{
  "repository": "OpenHands/OpenHands",
  "criterion": "Own PR means an identified implementation/proposed fix/partial implementation authored by enyst or smolpaws, across open, merged and closed-unmerged states. Incidental QA, issue-filing and documentation references to product bugs are excluded. Documentation/test/harness implementation counts when that is the issue itself. Matched merged PRs are distinct from GitHub direct closers. This inventory does not verify that merged PRs satisfy every requirement.",
  "window": {
    "start": "2026-10-04T22:00:00Z",
    "end": "2026-10-13T01:58:35Z",
    "timezone": "Europe/Stockholm",
    "start_local": "2026-10-05T00:00:00+02:00",
    "end_local": "2026-10-13T03:58:35+02:00"
  },
  "snapshot_at": "2026-10-13T01:58:35Z",
  "issue_creation_cutoff_at": "2026-10-13T01:58:35Z",
  "observed_at": "2026-10-14T05:19:13.780629Z",
  "status_drift": [],
  "fetch_started_at": "2026-10-14T05:19:02.404160Z",
  "fetch_finished_at": "2026-10-14T05:19:13.780629Z",
  "normalized_at": "2026-10-14T05:19:22.211892Z",
  "scope": "Issues authored by enyst or smolpaws and created from Monday 5 October 2026 00:00 Europe/Stockholm inclusive through the frozen issue-creation membership cutoff; latest issue/PR states observed during collection; identified implementation PRs across all states and authors. PR creation has no lower cutoff. Real cross-repository fixes count when authoritative references establish implementation; website-report mentions are excluded. Inventory only; no fixes, reviews or closures performed.",
  "refresh_changes": {
    "previous_observed_at": "2026-10-13T02:04:15.419787Z",
    "current_observed_at": "2026-10-14T05:19:13.780629Z",
    "previous_counts": {
      "issue_count": 118,
      "issue_authors": {
        "enyst": 108,
        "smolpaws": 10
      },
      "with_own_pr": 80,
      "without_own_pr": 38,
      "open": 34,
      "closed": 84,
      "open_with_own_pr": 14,
      "open_without_own_pr": 20,
      "open_with_active_own_pr": 10,
      "open_with_closed_only_own_pr": 3,
      "open_with_merged_own_pr": 2,
      "open_with_inactive_own_history": 4,
      "open_without_active_own_pr": 24,
      "closed_direct_merged_pr": 83,
      "closed_direct_merged_pr_own": 66,
      "closed_direct_merged_pr_other": 17,
      "closed_without_direct_pr": 1,
      "distinct_proposed_prs": 164,
      "proposed_pr_issue_matches": 171,
      "excluded_reference_pairs": 146,
      "distinct_open_prs": 56
    },
    "current_counts": {
      "issue_count": 118,
      "issue_authors": {
        "enyst": 108,
        "smolpaws": 10
      },
      "with_own_pr": 90,
      "without_own_pr": 28,
      "open": 30,
      "closed": 88,
      "open_with_own_pr": 20,
      "open_without_own_pr": 10,
      "open_with_active_own_pr": 16,
      "open_with_closed_only_own_pr": 3,
      "open_with_merged_own_pr": 2,
      "open_with_inactive_own_history": 4,
      "open_without_active_own_pr": 14,
      "closed_direct_merged_pr": 87,
      "closed_direct_merged_pr_own": 70,
      "closed_direct_merged_pr_other": 17,
      "closed_without_direct_pr": 1,
      "distinct_proposed_prs": 176,
      "proposed_pr_issue_matches": 183,
      "excluded_reference_pairs": 173,
      "distinct_open_prs": 62
    },
    "new_issue_numbers": [],
    "issue_state_changes": [
      {
        "issue": 17955,
        "previous_state": "open",
        "state": "closed",
        "closed_at": "2026-10-14T04:15:52Z"
      },
      {
        "issue": 18318,
        "previous_state": "open",
        "state": "closed",
        "closed_at": "2026-10-13T04:11:12Z"
      },
      {
        "issue": 18319,
        "previous_state": "open",
        "state": "closed",
        "closed_at": "2026-10-13T04:10:39Z"
      },
      {
        "issue": 18329,
        "previous_state": "open",
        "state": "closed",
        "closed_at": "2026-10-13T05:20:53Z"
      }
    ],
    "new_implementation_matches": [
      {
        "issue": 17899,
        "pr": 18425,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18425",
        "direct_closer": false
      },
      {
        "issue": 17900,
        "pr": 18370,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18370",
        "direct_closer": false
      },
      {
        "issue": 17900,
        "pr": 18376,
        "author": "lx3133584",
        "url": "https://github.com/OpenHands/OpenHands/pull/18376",
        "direct_closer": false
      },
      {
        "issue": 17919,
        "pr": 18367,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18367",
        "direct_closer": false
      },
      {
        "issue": 17927,
        "pr": 18372,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18372",
        "direct_closer": false
      },
      {
        "issue": 17946,
        "pr": 18368,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18368",
        "direct_closer": false
      },
      {
        "issue": 17949,
        "pr": 18363,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18363",
        "direct_closer": false
      },
      {
        "issue": 17953,
        "pr": 18423,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18423",
        "direct_closer": false
      },
      {
        "issue": 17955,
        "pr": 18377,
        "author": "lx3133584",
        "url": "https://github.com/OpenHands/OpenHands/pull/18377",
        "direct_closer": false
      },
      {
        "issue": 17955,
        "pr": 18422,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18422",
        "direct_closer": true
      },
      {
        "issue": 18123,
        "pr": 18364,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18364",
        "direct_closer": false
      },
      {
        "issue": 18160,
        "pr": 18369,
        "author": "enyst",
        "url": "https://github.com/OpenHands/OpenHands/pull/18369",
        "direct_closer": false
      }
    ],
    "pr_state_changes": [
      {
        "issue": 17899,
        "pr": 18425,
        "url": "https://github.com/OpenHands/OpenHands/pull/18425",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17900,
        "pr": 18370,
        "url": "https://github.com/OpenHands/OpenHands/pull/18370",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17900,
        "pr": 18376,
        "url": "https://github.com/OpenHands/OpenHands/pull/18376",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17919,
        "pr": 18367,
        "url": "https://github.com/OpenHands/OpenHands/pull/18367",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17927,
        "pr": 18372,
        "url": "https://github.com/OpenHands/OpenHands/pull/18372",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17946,
        "pr": 18368,
        "url": "https://github.com/OpenHands/OpenHands/pull/18368",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17949,
        "pr": 18363,
        "url": "https://github.com/OpenHands/OpenHands/pull/18363",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17953,
        "pr": 18423,
        "url": "https://github.com/OpenHands/OpenHands/pull/18423",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17955,
        "pr": 18377,
        "url": "https://github.com/OpenHands/OpenHands/pull/18377",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 17955,
        "pr": 18422,
        "url": "https://github.com/OpenHands/OpenHands/pull/18422",
        "previous_state": null,
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-14T04:15:50Z",
        "closed_at": "2026-10-14T04:15:51Z"
      },
      {
        "issue": 18004,
        "pr": 18321,
        "url": "https://github.com/OpenHands/OpenHands/pull/18321",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T04:10:37Z",
        "closed_at": "2026-10-13T04:10:38Z"
      },
      {
        "issue": 18004,
        "pr": 18330,
        "url": "https://github.com/OpenHands/OpenHands/pull/18330",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T05:20:52Z",
        "closed_at": "2026-10-13T05:20:52Z"
      },
      {
        "issue": 18004,
        "pr": 18346,
        "url": "https://github.com/OpenHands/OpenHands/pull/18346",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T04:09:37Z",
        "closed_at": "2026-10-13T04:09:37Z"
      },
      {
        "issue": 18123,
        "pr": 18364,
        "url": "https://github.com/OpenHands/OpenHands/pull/18364",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 18160,
        "pr": 18369,
        "url": "https://github.com/OpenHands/OpenHands/pull/18369",
        "previous_state": null,
        "previous_merged": false,
        "state": "open",
        "merged": false,
        "merged_at": null,
        "closed_at": null
      },
      {
        "issue": 18318,
        "pr": 18320,
        "url": "https://github.com/OpenHands/OpenHands/pull/18320",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T04:11:11Z",
        "closed_at": "2026-10-13T04:11:11Z"
      },
      {
        "issue": 18319,
        "pr": 18321,
        "url": "https://github.com/OpenHands/OpenHands/pull/18321",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T04:10:37Z",
        "closed_at": "2026-10-13T04:10:38Z"
      },
      {
        "issue": 18329,
        "pr": 18330,
        "url": "https://github.com/OpenHands/OpenHands/pull/18330",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T05:20:52Z",
        "closed_at": "2026-10-13T05:20:52Z"
      },
      {
        "issue": 18347,
        "pr": 18355,
        "url": "https://github.com/OpenHands/OpenHands/pull/18355",
        "previous_state": "open",
        "previous_merged": false,
        "state": "closed",
        "merged": true,
        "merged_at": "2026-10-13T21:32:17Z",
        "closed_at": "2026-10-13T21:32:17Z"
      }
    ],
    "previous_open_without_own_pr_count": 20,
    "current_open_without_own_pr_count": 10,
    "new_excluded_reference_pairs": [
      {
        "issue": 17900,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17907,
        "pr": 18394,
        "reason": "The draft-dialog fix cites this issue as an earlier analogous fix; the automation Delete dialog and its original fix are unchanged."
      },
      {
        "issue": 17915,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17920,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17926,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17927,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17928,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17932,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17938,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17948,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17953,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17955,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17957,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 17958,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18004,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18060,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18061,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18173,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18178,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18181,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18202,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18206,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18233,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18263,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18302,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18303,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      },
      {
        "issue": 18324,
        "pr": 18399,
        "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix."
      }
    ]
  },
  "methodology": {
    "issue_membership_audit": {
      "rest_count": 118,
      "search_count": 118,
      "equal": true,
      "rest_only": [],
      "search_only": [],
      "searches": [
        {
          "query": "repo:OpenHands/OpenHands is:issue author:enyst created:2026-10-04T22:00:00Z..2026-10-13T01:58:35Z",
          "page": 1,
          "total_count": 108,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:issue author:enyst created:2026-10-04T22:00:00Z..2026-10-13T01:58:35Z",
          "page": 2,
          "total_count": 108,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:issue author:smolpaws created:2026-10-04T22:00:00Z..2026-10-13T01:58:35Z",
          "page": 1,
          "total_count": 10,
          "incomplete_results": false
        }
      ],
      "creator_pages": [
        {
          "author": "enyst",
          "page": 1,
          "items": 100,
          "has_link_next": true,
          "oldest_created_at": "2026-10-05T21:53:28Z"
        },
        {
          "author": "enyst",
          "page": 2,
          "items": 100,
          "has_link_next": true,
          "oldest_created_at": "2026-10-04T23:26:16Z"
        },
        {
          "author": "enyst",
          "page": 3,
          "items": 100,
          "has_link_next": true,
          "oldest_created_at": "2026-02-20T19:55:13Z"
        },
        {
          "author": "smolpaws",
          "page": 1,
          "items": 55,
          "has_link_next": false,
          "oldest_created_at": "2026-01-15T19:57:54Z"
        }
      ]
    },
    "issue_enumeration": "Fresh paginated official REST creator issue collections, excluding PR records, with normalized lower-case Link headers and a full-100-record-page pagination fallback; stopped only once results predated the cutoff. Exact UTC comparison retained 118 issues; independent complete author Search returned the identical issue-number set.",
    "timelines": "Every issue REST timeline paginated to exhaustion. Supplemented all issue GraphQL ClosedEvent/ReopenedEvent and CrossReferencedEvent/ConnectedEvent histories with pageInfo exhaustion.",
    "reference_limitation": "Fresh REST timeline cross-referenced events: 1; GraphQL cross-reference/connected events: 1. Complete reverse-reference audits and preserved previously classified evidence supplement sparse GitHub cross references. Absence means no corresponding implementation PR identified by this protocol.",
    "own_author_reverse_audit": {
      "searches": [
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 1,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 2,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 3,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 4,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 5,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 6,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:enyst",
          "page": 7,
          "total_count": 607,
          "incomplete_results": false
        },
        {
          "query": "repo:OpenHands/OpenHands is:pr author:smolpaws",
          "page": 1,
          "total_count": 28,
          "incomplete_results": false
        }
      ],
      "totals": {
        "enyst": 605,
        "smolpaws": 28
      },
      "description": "Complete all-state own-author repository-wide PR Search without a creation-time cutoff; every page has incomplete_results=false and result counts below the 1000-result cap. Exact issue-number and issue-URL references were reviewed."
    },
    "all_author_reverse_audit": {
      "searches": [
        {
          "query": "repo:OpenHands/OpenHands is:pr updated:>=2026-10-12T19:02:33.010730Z",
          "page": 1,
          "total_count": 31,
          "incomplete_results": false
        }
      ],
      "total": 31,
      "description": "All-author/all-state PRs updated since the previous inventory observation; complete search below the 1000-result cap. Previous candidate/excluded matches retained and every referenced PR state refreshed. New fixing references reviewed in context."
    },
    "additional_candidates": "Preserved audited semantic matches (#17898/#18081/#18086 and partial #18004/#18331/#18333), fresh direct GitHub ClosedEvent closers, exact PR URLs in current issue bodies/comments and authoritative cross-repository references.",
    "classification": "Previous implementation versus incidental QA/docs classifications retained. Two changed old summaries were inspected: #18038 changed autogenerated Docker details and #18346 added test evidence, leaving implementation scope unchanged. Five new issue/PR references classified from public summaries: three implementation matches and two incidental product-bug references. No PR implementation code copied or reused.",
    "snapshot_consistency": "Issue creation membership is frozen at the stated cutoff and independently verified. Issue/PR states use latest observations during the fetch interval, with per-record timestamps. Direct merged closers establish factual closure, not proof that every issue requirement is satisfied.",
    "latest_status_refresh": {
      "frozen_issue_membership": 118,
      "full_issue_timeline_pages_exhausted": true,
      "discovery": {
        "since": "2026-10-11T04:29:46Z",
        "pages": [
          {
            "state": "OPEN",
            "records": 100,
            "has_next_page": true
          },
          {
            "state": "OPEN",
            "records": 100,
            "has_next_page": true
          },
          {
            "state": "OPEN",
            "records": 100,
            "has_next_page": true
          },
          {
            "state": "OPEN",
            "records": 100,
            "has_next_page": true
          },
          {
            "state": "OPEN",
            "records": 83,
            "has_next_page": false
          },
          {
            "state": "CLOSED",
            "records": 100,
            "has_next_page": true
          },
          {
            "state": "MERGED",
            "records": 100,
            "has_next_page": true
          }
        ],
        "records": 604,
        "repository": "OpenHands/OpenHands"
      },
      "classification": "Previously reviewed matches/exclusions retained. New explicit fixing references or direct GitHub closers added; ambiguous new references audited separately. Metadata refresh only; no runtime checks or GitHub mutations.",
      "new_ambiguous_references_reviewed": 27,
      "new_explicit_implementation_references_reviewed": 12
    }
  },
  "counts": {
    "issue_count": 118,
    "issue_authors": {
      "enyst": 108,
      "smolpaws": 10
    },
    "with_own_pr": 90,
    "without_own_pr": 28,
    "open": 30,
    "closed": 88,
    "open_with_own_pr": 20,
    "open_without_own_pr": 10,
    "open_with_active_own_pr": 16,
    "open_with_closed_only_own_pr": 3,
    "open_with_merged_own_pr": 2,
    "open_with_inactive_own_history": 4,
    "open_without_active_own_pr": 14,
    "closed_direct_merged_pr": 87,
    "closed_direct_merged_pr_own": 70,
    "closed_direct_merged_pr_other": 17,
    "closed_without_direct_pr": 1,
    "distinct_proposed_prs": 176,
    "proposed_pr_issue_matches": 183,
    "excluded_reference_pairs": 173,
    "distinct_open_prs": 62
  },
  "records": [
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17896,
      "title": "[Bug]: Tablet customization navigation squeezes MCP content to 152px at 768px width",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17896",
      "created_at": "2026-10-04T23:17:19Z",
      "updated_at": "2026-10-06T02:13:24Z",
      "state": "closed",
      "closed_at": "2026-10-06T02:13:24Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17910,
          "title": "fix: keep settings and customization usable on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17910",
          "created_at": "2026-10-04T23:53:39Z",
          "updated_at": "2026-10-08T20:38:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:23Z",
          "closed_at": "2026-10-06T02:13:23Z",
          "head_sha": "8d7a39b4c8006d24d878ee8d1cda98f893f843ea",
          "scope": "Keeps Settings and Customize content usable at tablet widths and preserves phone/desktop navigation.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sed by Apps.\r\n- Add a Chromium regression test at 390, 767, 768, 820, 1023, 1024, and 1440px, exercising keyboard hub navigation, search, the custom-server dialog, and all shared route layouts.\r\n\r\n## Issue Number\r\nFixes #17896\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3117 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Open the app, skip onboarding, and add a Local backend named Local QA at `http://127.0.0.1:3117`; decline analytics. Open Customize → MCP Servers with the global sidebar expanded. At 768px, the main column is now 468px rather than 152px. Customize"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17910"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17910,
          "title": "fix: keep settings and customization usable on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17910",
          "created_at": "2026-10-04T23:53:39Z",
          "updated_at": "2026-10-08T20:38:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:23Z",
          "closed_at": "2026-10-06T02:13:23Z",
          "head_sha": "8d7a39b4c8006d24d878ee8d1cda98f893f843ea",
          "scope": "Keeps Settings and Customize content usable at tablet widths and preserves phone/desktop navigation.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sed by Apps.\r\n- Add a Chromium regression test at 390, 767, 768, 820, 1023, 1024, and 1440px, exercising keyboard hub navigation, search, the custom-server dialog, and all shared route layouts.\r\n\r\n## Issue Number\r\nFixes #17896\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3117 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Open the app, skip onboarding, and add a Local backend named Local QA at `http://127.0.0.1:3117`; decline analytics. Open Customize → MCP Servers with the global sidebar expanded. At 768px, the main column is now 468px rather than 152px. Customize"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17910"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "- fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is act"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17910,
          "title": "fix: keep settings and customization usable on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17910",
          "created_at": "2026-10-04T23:53:39Z",
          "updated_at": "2026-10-08T20:38:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:23Z",
          "closed_at": "2026-10-06T02:13:23Z",
          "head_sha": "8d7a39b4c8006d24d878ee8d1cda98f893f843ea",
          "scope": "Keeps Settings and Customize content usable at tablet widths and preserves phone/desktop navigation.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sed by Apps.\r\n- Add a Chromium regression test at 390, 767, 768, 820, 1023, 1024, and 1440px, exercising keyboard hub navigation, search, the custom-server dialog, and all shared route layouts.\r\n\r\n## Issue Number\r\nFixes #17896\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3117 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Open the app, skip onboarding, and add a Local backend named Local QA at `http://127.0.0.1:3117`; decline analytics. Open Customize → MCP Servers with the global sidebar expanded. At 768px, the main column is now 468px rather than 152px. Customize"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17910"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17910,
          "title": "fix: keep settings and customization usable on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17910",
          "created_at": "2026-10-04T23:53:39Z",
          "updated_at": "2026-10-08T20:38:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:23Z",
          "closed_at": "2026-10-06T02:13:23Z",
          "head_sha": "8d7a39b4c8006d24d878ee8d1cda98f893f843ea",
          "scope": "Keeps Settings and Customize content usable at tablet widths and preserves phone/desktop navigation.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sed by Apps.\r\n- Add a Chromium regression test at 390, 767, 768, 820, 1023, 1024, and 1440px, exercising keyboard hub navigation, search, the custom-server dialog, and all shared route layouts.\r\n\r\n## Issue Number\r\nFixes #17896\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3117 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Open the app, skip onboarding, and add a Local backend named Local QA at `http://127.0.0.1:3117`; decline analytics. Open Customize → MCP Servers with the global sidebar expanded. At 768px, the main column is now 468px rather than 152px. Customize"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17910"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17910; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17897,
      "title": "[Bug]: Backend-sync helper text has insufficient contrast in Neutral/dark theme",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17897",
      "created_at": "2026-10-04T23:17:20Z",
      "updated_at": "2026-10-06T02:13:03Z",
      "state": "closed",
      "closed_at": "2026-10-06T02:13:03Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17911,
          "title": "fix: improve backend settings note contrast",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17911",
          "created_at": "2026-10-04T23:53:40Z",
          "updated_at": "2026-10-08T20:38:40Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:02Z",
          "closed_at": "2026-10-06T02:13:02Z",
          "head_sha": "4e1466ee16e14ce2578c13fa8a25ec81a201ca2c",
          "scope": "Improves backend-sync note contrast through theme-aware readable text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the actual rendered utility through theme tokens across navigation, surface, and drawer backgrounds. Require 4.5:1 in Neutral and preserve or improve existing Light+/Solarized Light contrast.\r\n\r\n## Issue Number\r\nFixes #17897\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3118 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Skip onboarding and add a Local backend named Local QA at `http://127.0.0.1:3118`. Decline analytics, open `/mcp` in OpenHands-Neutral at 1440 × 1000, and inspect the backend note under Customize navigation.\r\n\r\nValidation completed:\r\n- `npm run li"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17911"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17911,
          "title": "fix: improve backend settings note contrast",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17911",
          "created_at": "2026-10-04T23:53:40Z",
          "updated_at": "2026-10-08T20:38:40Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:02Z",
          "closed_at": "2026-10-06T02:13:02Z",
          "head_sha": "4e1466ee16e14ce2578c13fa8a25ec81a201ca2c",
          "scope": "Improves backend-sync note contrast through theme-aware readable text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the actual rendered utility through theme tokens across navigation, surface, and drawer backgrounds. Require 4.5:1 in Neutral and preserve or improve existing Light+/Solarized Light contrast.\r\n\r\n## Issue Number\r\nFixes #17897\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3118 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Skip onboarding and add a Local backend named Local QA at `http://127.0.0.1:3118`. Decline analytics, open `/mcp` in OpenHands-Neutral at 1440 × 1000, and inspect the backend note under Customize navigation.\r\n\r\nValidation completed:\r\n- `npm run li"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17911"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17911,
          "title": "fix: improve backend settings note contrast",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17911",
          "created_at": "2026-10-04T23:53:40Z",
          "updated_at": "2026-10-08T20:38:40Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:02Z",
          "closed_at": "2026-10-06T02:13:02Z",
          "head_sha": "4e1466ee16e14ce2578c13fa8a25ec81a201ca2c",
          "scope": "Improves backend-sync note contrast through theme-aware readable text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the actual rendered utility through theme tokens across navigation, surface, and drawer backgrounds. Require 4.5:1 in Neutral and preserve or improve existing Light+/Solarized Light contrast.\r\n\r\n## Issue Number\r\nFixes #17897\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3118 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Skip onboarding and add a Local backend named Local QA at `http://127.0.0.1:3118`. Decline analytics, open `/mcp` in OpenHands-Neutral at 1440 × 1000, and inspect the backend note under Customize navigation.\r\n\r\nValidation completed:\r\n- `npm run li"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17911"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17911,
          "title": "fix: improve backend settings note contrast",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17911",
          "created_at": "2026-10-04T23:53:40Z",
          "updated_at": "2026-10-08T20:38:40Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:02Z",
          "closed_at": "2026-10-06T02:13:02Z",
          "head_sha": "4e1466ee16e14ce2578c13fa8a25ec81a201ca2c",
          "scope": "Improves backend-sync note contrast through theme-aware readable text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the actual rendered utility through theme tokens across navigation, surface, and drawer backgrounds. Require 4.5:1 in Neutral and preserve or improve existing Light+/Solarized Light contrast.\r\n\r\n## Issue Number\r\nFixes #17897\r\n\r\n## How to Test\r\nRun `npm ci`, then `VITE_FRONTEND_PORT=3118 VITE_DO_NOT_TRACK=1 npm run dev:mock`. Skip onboarding and add a Local backend named Local QA at `http://127.0.0.1:3118`. Decline analytics, open `/mcp` in OpenHands-Neutral at 1440 × 1000, and inspect the backend note under Customize navigation.\r\n\r\nValidation completed:\r\n- `npm run li"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17911"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17911; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17898,
      "title": "[Bug]: VITE_DO_NOT_TRACK=1 still initializes PostHog and loads remote scripts from the telemetry host",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17898",
      "created_at": "2026-10-04T23:25:57Z",
      "updated_at": "2026-10-12T10:47:27Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Fixes the same Do Not Track telemetry-initialization cause as duplicate issue #18081; #17898 remains an open issue-state reconciliation candidate despite this merged fix.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "semantic_duplicate_issue_scope_reference"
            ],
            "reference_contexts": [
              "PR #18086 implements the same no-initialization/no-network Do Not Track scope as #17898; its explicit fixing reference is duplicate #18081. #17898 remains open, so this is a scope match rather than a direct issue closer.",
              "issue only removes the PostHog requests the live guard observes.\n- The pre-consent `canvas_install` behavior when Do Not Track is off is unchanged.\n- #17898 reports the same root cause for the production `bin/agent-canvas.mjs` build; consolidating the two issues is a maintainer call and does not change this scope.\n\n### Acceptance Criteria\n- [ ] With `VITE_DO_NOT_TRACK=1`, `initializePostHogClient()` resolves `null` and the `posthog-js` `init` function is never called, including when reached through `TelemetryProvider` mount, `trackInstall()`, `trackEvent()`, `trackSessionStart()`, `setTelemetryConsent(\"granted\")`, and `setTelemetryIdentity(...)`.\n- [ ] The same holds when Do Not Track comes ",
              "Issue #17898 acceptance: - [ ] In a build with `VITE_DO_NOT_TRACK=1`, loading any page makes zero requests to the PostHog host.\n- [ ] `initializePostHogClient()` returns `null` without calling `posthog.init` when `isDoNotTrackEnabled()` is true.\n- [ ] A unit test in `__tests__/services/telemetry.test.ts` covers the `VITE_DO_NOT_TRACK` path, mirroring the existing runtime-flag tests."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086",
              "https://github.com/OpenHands/OpenHands/issues/17898",
              "https://github.com/OpenHands/OpenHands/issues/18081"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17962,
          "title": "fix: honor Do Not Track before telemetry initialization",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17962",
          "created_at": "2026-10-05T02:57:04Z",
          "updated_at": "2026-10-13T11:36:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d7e78af478ec07586876d4847556b5436860635b",
          "scope": "Honors Do Not Track before telemetry import/bootstrap and initialization.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "-disable checks at entry, after import, and after consent initialization.\n- Add behavioral regressions for six opt-out inputs, cancellation/retry, cached access and locked Cloud consent/identity.\n\n## Issue Number\n\nFixes #17898\n\n## How to Test\n\n```sh\nnpm test -- __tests__/services/telemetry.test.ts __tests__/services/telemetry-bootstrap.test.ts --maxWorkers=1\nnpm run lint\nnpm run build:lib\n```\n\nRecorded: 58 scoped tests pass; lint, production app build and ESM/CJS/type library build pass. The complete suite exits 1 with **8,108 passed / 3 failed / 7 todo**. All three fai"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17962"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17962,
          "title": "fix: honor Do Not Track before telemetry initialization",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17962",
          "created_at": "2026-10-05T02:57:04Z",
          "updated_at": "2026-10-13T11:36:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d7e78af478ec07586876d4847556b5436860635b",
          "scope": "Honors Do Not Track before telemetry import/bootstrap and initialization.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "-disable checks at entry, after import, and after consent initialization.\n- Add behavioral regressions for six opt-out inputs, cancellation/retry, cached access and locked Cloud consent/identity.\n\n## Issue Number\n\nFixes #17898\n\n## How to Test\n\n```sh\nnpm test -- __tests__/services/telemetry.test.ts __tests__/services/telemetry-bootstrap.test.ts --maxWorkers=1\nnpm run lint\nnpm run build:lib\n```\n\nRecorded: 58 scoped tests pass; lint, production app build and ESM/CJS/type library build pass. The complete suite exits 1 with **8,108 passed / 3 failed / 7 todo**. All three fai"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17962"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Fixes the same Do Not Track telemetry-initialization cause as duplicate issue #18081; #17898 remains an open issue-state reconciliation candidate despite this merged fix.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "semantic_duplicate_issue_scope_reference"
            ],
            "reference_contexts": [
              "PR #18086 implements the same no-initialization/no-network Do Not Track scope as #17898; its explicit fixing reference is duplicate #18081. #17898 remains open, so this is a scope match rather than a direct issue closer.",
              "issue only removes the PostHog requests the live guard observes.\n- The pre-consent `canvas_install` behavior when Do Not Track is off is unchanged.\n- #17898 reports the same root cause for the production `bin/agent-canvas.mjs` build; consolidating the two issues is a maintainer call and does not change this scope.\n\n### Acceptance Criteria\n- [ ] With `VITE_DO_NOT_TRACK=1`, `initializePostHogClient()` resolves `null` and the `posthog-js` `init` function is never called, including when reached through `TelemetryProvider` mount, `trackInstall()`, `trackEvent()`, `trackSessionStart()`, `setTelemetryConsent(\"granted\")`, and `setTelemetryIdentity(...)`.\n- [ ] The same holds when Do Not Track comes ",
              "Issue #17898 acceptance: - [ ] In a build with `VITE_DO_NOT_TRACK=1`, loading any page makes zero requests to the PostHog host.\n- [ ] `initializePostHogClient()` returns `null` without calling `posthog.init` when `isDoNotTrackEnabled()` is true.\n- [ ] A unit test in `__tests__/services/telemetry.test.ts` covers the `VITE_DO_NOT_TRACK` path, mirroring the existing runtime-flag tests."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086",
              "https://github.com/OpenHands/OpenHands/issues/17898",
              "https://github.com/OpenHands/OpenHands/issues/18081"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "*OpenHands/automation (1)**\n\n- OpenHands/automation#551: Setting a Git Sync encryption key leaves already-synced automations as plaintext in the repository\n\n<details><summary><b>OpenHands/OpenHands (62)</b></summary>\n\n- OpenHands/OpenHands#17898: VITE_DO_NOT_TRACK=1 still initializes PostHog and loads remote scripts from the telemetry host\n- OpenHands/OpenHands#17899: Git user name and email from Settings > Application are never applied to agent commits\n- OpenHands/OpenHands#17900: Settings switches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17962,
          "title": "fix: honor Do Not Track before telemetry initialization",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17962",
          "created_at": "2026-10-05T02:57:04Z",
          "updated_at": "2026-10-13T11:36:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d7e78af478ec07586876d4847556b5436860635b",
          "scope": "Honors Do Not Track before telemetry import/bootstrap and initialization.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "-disable checks at entry, after import, and after consent initialization.\n- Add behavioral regressions for six opt-out inputs, cancellation/retry, cached access and locked Cloud consent/identity.\n\n## Issue Number\n\nFixes #17898\n\n## How to Test\n\n```sh\nnpm test -- __tests__/services/telemetry.test.ts __tests__/services/telemetry-bootstrap.test.ts --maxWorkers=1\nnpm run lint\nnpm run build:lib\n```\n\nRecorded: 58 scoped tests pass; lint, production app build and ESM/CJS/type library build pass. The complete suite exits 1 with **8,108 passed / 3 failed / 7 todo**. All three fai"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17962"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Fixes the same Do Not Track telemetry-initialization cause as duplicate issue #18081; #17898 remains an open issue-state reconciliation candidate despite this merged fix.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "semantic_duplicate_issue_scope_reference"
            ],
            "reference_contexts": [
              "PR #18086 implements the same no-initialization/no-network Do Not Track scope as #17898; its explicit fixing reference is duplicate #18081. #17898 remains open, so this is a scope match rather than a direct issue closer.",
              "issue only removes the PostHog requests the live guard observes.\n- The pre-consent `canvas_install` behavior when Do Not Track is off is unchanged.\n- #17898 reports the same root cause for the production `bin/agent-canvas.mjs` build; consolidating the two issues is a maintainer call and does not change this scope.\n\n### Acceptance Criteria\n- [ ] With `VITE_DO_NOT_TRACK=1`, `initializePostHogClient()` resolves `null` and the `posthog-js` `init` function is never called, including when reached through `TelemetryProvider` mount, `trackInstall()`, `trackEvent()`, `trackSessionStart()`, `setTelemetryConsent(\"granted\")`, and `setTelemetryIdentity(...)`.\n- [ ] The same holds when Do Not Track comes ",
              "Issue #17898 acceptance: - [ ] In a build with `VITE_DO_NOT_TRACK=1`, loading any page makes zero requests to the PostHog host.\n- [ ] `initializePostHogClient()` returns `null` without calling `posthog.init` when `isDoNotTrackEnabled()` is true.\n- [ ] A unit test in `__tests__/services/telemetry.test.ts` covers the `VITE_DO_NOT_TRACK` path, mirroring the existing runtime-flag tests."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086",
              "https://github.com/OpenHands/OpenHands/issues/17898",
              "https://github.com/OpenHands/OpenHands/issues/18081"
            ]
          },
          "direct_closer": false
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17899,
      "title": "[Bug]: Git user name and email from Settings > Application are never applied to agent commits",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17899",
      "created_at": "2026-10-04T23:26:16Z",
      "updated_at": "2026-10-12T05:05:46Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18425"
            ]
          },
          "number": 18425,
          "title": "fix(settings): commit as the Git identity from Settings > Application",
          "url": "https://github.com/OpenHands/OpenHands/pull/18425",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:47:16Z",
          "updated_at": "2026-10-14T04:04:57Z",
          "head_sha": "79a70d1b7f46ca4aafd88379d05264916e8c30be",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18425"
            ]
          },
          "number": 18425,
          "title": "fix(settings): commit as the Git identity from Settings > Application",
          "url": "https://github.com/OpenHands/OpenHands/pull/18425",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:47:16Z",
          "updated_at": "2026-10-14T04:04:57Z",
          "head_sha": "79a70d1b7f46ca4aafd88379d05264916e8c30be",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " as plaintext in the repository\n\n<details><summary><b>OpenHands/OpenHands (62)</b></summary>\n\n- OpenHands/OpenHands#17898: VITE_DO_NOT_TRACK=1 still initializes PostHog and loads remote scripts from the telemetry host\n- OpenHands/OpenHands#17899: Git user name and email from Settings > Application are never applied to agent commits\n- OpenHands/OpenHands#17900: Settings switches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)\n- OpenHands/OpenHands#17901: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast\n- O"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18425"
            ]
          },
          "number": 18425,
          "title": "fix(settings): commit as the Git identity from Settings > Application",
          "url": "https://github.com/OpenHands/OpenHands/pull/18425",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:47:16Z",
          "updated_at": "2026-10-14T04:04:57Z",
          "head_sha": "79a70d1b7f46ca4aafd88379d05264916e8c30be",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17900,
      "title": "[Bug]: Settings switches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17900",
      "created_at": "2026-10-04T23:26:33Z",
      "updated_at": "2026-10-12T05:05:45Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18370"
            ]
          },
          "number": 18370,
          "title": "fix(settings): make switches keyboard accessible",
          "url": "https://github.com/OpenHands/OpenHands/pull/18370",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:41:46Z",
          "updated_at": "2026-10-14T04:31:59Z",
          "head_sha": "b797cf5db2b4b9fedb235c63ff85e66558171421",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17963,
          "title": "fix: restore keyboard access to settings switches",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17963",
          "created_at": "2026-10-05T02:57:12Z",
          "updated_at": "2026-10-13T10:48:54Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "cb43883c4a0aec10958ae37c3847ffbc5cbb4357",
          "scope": "Restores native keyboard and screen-reader access to Settings switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " `hidden` with `sr-only peer` and add a peer focus-visible outline in both layouts.\n- Preserve native Space, label activation, controlled state and disabled semantics; add behavioral regressions.\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\n```sh\nnpm test -- __tests__/components/settings/settings-switch.test.tsx --maxWorkers=1\nnpm run build\n```\n\nRecorded: 7 primitive tests, 14 relevant consumer tests and 2 selected SDK boolean-setting cases pass, alongside changed-file formatting/lint, diff checks and the full production build. No separate full-suite, whole-project l"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17963"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18154,
          "title": "fix: make settings switches keyboard accessible",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18154",
          "created_at": "2026-10-08T12:41:49Z",
          "updated_at": "2026-10-08T12:42:06Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f160a34f47742198db31cb9a059c89fca370fd4c",
          "scope": "Makes settings switches keyboard-accessible and exposes focus and assistive-technology semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "chnology access\n- add a visible focus outline to the decorative track through the checkbox's peer focus state\n- cover Space-key toggling, accessible naming/state, and disabled-switch tab behavior\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/settings/settings-switch.test.tsx\nnpx eslint src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\nnpx prettier --check src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18154"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18376"
            ]
          },
          "number": 18376,
          "title": "fix(settings): make settings switch focusable and accessible via sr-only checkbox",
          "url": "https://github.com/OpenHands/OpenHands/pull/18376",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:20:30Z",
          "updated_at": "2026-10-13T08:20:47Z",
          "head_sha": "465d8a7297d6c66bfa36b7efd295fcb630c8173e",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17963,
          "title": "fix: restore keyboard access to settings switches",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17963",
          "created_at": "2026-10-05T02:57:12Z",
          "updated_at": "2026-10-13T10:48:54Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "cb43883c4a0aec10958ae37c3847ffbc5cbb4357",
          "scope": "Restores native keyboard and screen-reader access to Settings switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " `hidden` with `sr-only peer` and add a peer focus-visible outline in both layouts.\n- Preserve native Space, label activation, controlled state and disabled semantics; add behavioral regressions.\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\n```sh\nnpm test -- __tests__/components/settings/settings-switch.test.tsx --maxWorkers=1\nnpm run build\n```\n\nRecorded: 7 primitive tests, 14 relevant consumer tests and 2 selected SDK boolean-setting cases pass, alongside changed-file formatting/lint, diff checks and the full production build. No separate full-suite, whole-project l"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17963"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18154,
          "title": "fix: make settings switches keyboard accessible",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18154",
          "created_at": "2026-10-08T12:41:49Z",
          "updated_at": "2026-10-08T12:42:06Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f160a34f47742198db31cb9a059c89fca370fd4c",
          "scope": "Makes settings switches keyboard-accessible and exposes focus and assistive-technology semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "chnology access\n- add a visible focus outline to the decorative track through the checkbox's peer focus state\n- cover Space-key toggling, accessible naming/state, and disabled-switch tab behavior\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/settings/settings-switch.test.tsx\nnpx eslint src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\nnpx prettier --check src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18154"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18370"
            ]
          },
          "number": 18370,
          "title": "fix(settings): make switches keyboard accessible",
          "url": "https://github.com/OpenHands/OpenHands/pull/18370",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:41:46Z",
          "updated_at": "2026-10-14T04:31:59Z",
          "head_sha": "b797cf5db2b4b9fedb235c63ff85e66558171421",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18376"
            ]
          },
          "number": 18376,
          "title": "fix(settings): make settings switch focusable and accessible via sr-only checkbox",
          "url": "https://github.com/OpenHands/OpenHands/pull/18376",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:20:30Z",
          "updated_at": "2026-10-13T08:20:47Z",
          "head_sha": "465d8a7297d6c66bfa36b7efd295fcb630c8173e",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "17898: VITE_DO_NOT_TRACK=1 still initializes PostHog and loads remote scripts from the telemetry host\n- OpenHands/OpenHands#17899: Git user name and email from Settings > Application are never applied to agent commits\n- OpenHands/OpenHands#17900: Settings switches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)\n- OpenHands/OpenHands#17901: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast\n- OpenHands/OpenHands#17902: Automations Filters popover closes after every option click, so filters cannot be combined"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets and F13.acp-model-discovery\n  - F16.backend-switch\n  - F21.saved-draf"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 3,
      "open_pr_count": 4,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17963,
          "title": "fix: restore keyboard access to settings switches",
          "author": "Minghan2005",
          "author_url": "https://github.com/Minghan2005",
          "url": "https://github.com/OpenHands/OpenHands/pull/17963",
          "created_at": "2026-10-05T02:57:12Z",
          "updated_at": "2026-10-13T10:48:54Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "cb43883c4a0aec10958ae37c3847ffbc5cbb4357",
          "scope": "Restores native keyboard and screen-reader access to Settings switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " `hidden` with `sr-only peer` and add a peer focus-visible outline in both layouts.\n- Preserve native Space, label activation, controlled state and disabled semantics; add behavioral regressions.\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\n```sh\nnpm test -- __tests__/components/settings/settings-switch.test.tsx --maxWorkers=1\nnpm run build\n```\n\nRecorded: 7 primitive tests, 14 relevant consumer tests and 2 selected SDK boolean-setting cases pass, alongside changed-file formatting/lint, diff checks and the full production build. No separate full-suite, whole-project l"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17963"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18154,
          "title": "fix: make settings switches keyboard accessible",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18154",
          "created_at": "2026-10-08T12:41:49Z",
          "updated_at": "2026-10-08T12:42:06Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f160a34f47742198db31cb9a059c89fca370fd4c",
          "scope": "Makes settings switches keyboard-accessible and exposes focus and assistive-technology semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "chnology access\n- add a visible focus outline to the decorative track through the checkbox's peer focus state\n- cover Space-key toggling, accessible naming/state, and disabled-switch tab behavior\n\n## Issue Number\n\nFixes #17900\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/settings/settings-switch.test.tsx\nnpx eslint src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\nnpx prettier --check src/components/features/settings/settings-switch.tsx __tests__/components/settings/settings-switch.test.tsx\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18154"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18370"
            ]
          },
          "number": 18370,
          "title": "fix(settings): make switches keyboard accessible",
          "url": "https://github.com/OpenHands/OpenHands/pull/18370",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:41:46Z",
          "updated_at": "2026-10-14T04:31:59Z",
          "head_sha": "b797cf5db2b4b9fedb235c63ff85e66558171421",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18376"
            ]
          },
          "number": 18376,
          "title": "fix(settings): make settings switch focusable and accessible via sr-only checkbox",
          "url": "https://github.com/OpenHands/OpenHands/pull/18376",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:20:30Z",
          "updated_at": "2026-10-13T08:20:47Z",
          "head_sha": "465d8a7297d6c66bfa36b7efd295fcb630c8173e",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17901,
      "title": "[Bug]: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17901",
      "created_at": "2026-10-04T23:28:40Z",
      "updated_at": "2026-10-06T01:21:25Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:21:25Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18010,
          "title": "fix(onboarding): stop the \"No backend is configured.\" toast before a backend exists",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18010",
          "created_at": "2026-10-05T20:21:09Z",
          "updated_at": "2026-10-08T20:38:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:21:24Z",
          "closed_at": "2026-10-06T01:21:24Z",
          "head_sha": "fac966c31391e129221fabff95e7f53400e12f33",
          "scope": "Prevents free-model queries and missing-backend toasts before first-run backend setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "d the query runs for it.\r\n- Unit tests (with the real `createAgentServerQueryClient` toast handler) and a Playwright regression test in the public-gate group of `mock-llm-auth-modes.spec.ts`.\r\n\r\n## Issue Number\r\n\r\nFixes #17901\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx setup-llm-step agent-server-ui-providers query-client-config llm-settings-local-view chat-input-llm-profile-picker cloud-organization-startup\r\nnpm run lint\r\n```\r\n\r\n- 8 files, 91 tests pass. On `origin/main`'s `use-free-models.ts`, \"s",
              "now true at once instead of after the query failed (~7 s with retries). Its consumers need a backend to be shown anyway.\r\n- Follow-up: the verify-openhands feature map (F01 onboarding-backend-step, and the gotcha naming #17901) lists this as a known failure; update it in #17961 once this merges.\r\n- Reviewer remarks (non-blocking):\r\n  - `.pr/17901-after-remove-last-backend-api-key-screen-no-toast.png` is byte-identical to the after API-key screenshot (same screen), so it is not embedded above; the remove-last-backend variant is backed by the toast history text.\r\n  - The "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18010"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18010,
          "title": "fix(onboarding): stop the \"No backend is configured.\" toast before a backend exists",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18010",
          "created_at": "2026-10-05T20:21:09Z",
          "updated_at": "2026-10-08T20:38:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:21:24Z",
          "closed_at": "2026-10-06T01:21:24Z",
          "head_sha": "fac966c31391e129221fabff95e7f53400e12f33",
          "scope": "Prevents free-model queries and missing-backend toasts before first-run backend setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "d the query runs for it.\r\n- Unit tests (with the real `createAgentServerQueryClient` toast handler) and a Playwright regression test in the public-gate group of `mock-llm-auth-modes.spec.ts`.\r\n\r\n## Issue Number\r\n\r\nFixes #17901\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx setup-llm-step agent-server-ui-providers query-client-config llm-settings-local-view chat-input-llm-profile-picker cloud-organization-startup\r\nnpm run lint\r\n```\r\n\r\n- 8 files, 91 tests pass. On `origin/main`'s `use-free-models.ts`, \"s",
              "now true at once instead of after the query failed (~7 s with retries). Its consumers need a backend to be shown anyway.\r\n- Follow-up: the verify-openhands feature map (F01 onboarding-backend-step, and the gotcha naming #17901) lists this as a known failure; update it in #17961 once this merges.\r\n- Reviewer remarks (non-blocking):\r\n  - `.pr/17901-after-remove-last-backend-api-key-screen-no-toast.png` is byte-identical to the after API-key screenshot (same screen), so it is not embedded above; the remove-last-backend variant is backed by the toast history text.\r\n  - The "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18010"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " and checked by a second agent.\n  - fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link res",
              "r name and email from Settings > Application are never applied to agent commits\n- OpenHands/OpenHands#17900: Settings switches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)\n- OpenHands/OpenHands#17901: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast\n- OpenHands/OpenHands#17902: Automations Filters popover closes after every option click, so filters cannot be combined\n- OpenHands/OpenHands#17903: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen\n- OpenHands/OpenHan"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18038,
          "title": "fix(backends): recoverable error when a locked Cloud backend fails to resolve",
          "author": "aivong-openhands",
          "author_url": "https://github.com/aivong-openhands",
          "url": "https://github.com/OpenHands/OpenHands/pull/18038",
          "created_at": "2026-10-05T21:40:32Z",
          "updated_at": "2026-10-12T22:37:02Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d22473337812138c1f998dbbef1919c53af432d6",
          "scope": "Provides locked-Cloud backend-resolution recovery.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              " for the new message (with and without a host) and the new guard. `src/api/agent-server-compatibility.test.ts` (62) and `__tests__/root.test.tsx` (24) pass; typecheck and lint clean.\n\n## Why not just suppress the toast (#17901 / #18010)\n\n#17901 / #18010 target **first-run onboarding in public mode with no backend yet**, and only gate the error toast. They do not apply once a backend is configured and the user is past onboarding. This change is about **backend resolution** on a locked-to-Cloud instance, not the onboarding toast.\n\n## Scope / limitations (why this is a dra",
              "ge (with and without a host) and the new guard. `src/api/agent-server-compatibility.test.ts` (62) and `__tests__/root.test.tsx` (24) pass; typecheck and lint clean.\n\n## Why not just suppress the toast (#17901 / #18010)\n\n#17901 / #18010 target **first-run onboarding in public mode with no backend yet**, and only gate the error toast. They do not apply once a backend is configured and the user is past onboarding. This change is about **backend resolution** on a locked-to-Cloud instance, not the onboarding toast.\n\n## Scope / limitations (why this is a draft)\n\n- **Robustly "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18038"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly distinguishes this configured-backend scenario from first-run public onboarding in #17901."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18010,
          "title": "fix(onboarding): stop the \"No backend is configured.\" toast before a backend exists",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18010",
          "created_at": "2026-10-05T20:21:09Z",
          "updated_at": "2026-10-08T20:38:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:21:24Z",
          "closed_at": "2026-10-06T01:21:24Z",
          "head_sha": "fac966c31391e129221fabff95e7f53400e12f33",
          "scope": "Prevents free-model queries and missing-backend toasts before first-run backend setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "d the query runs for it.\r\n- Unit tests (with the real `createAgentServerQueryClient` toast handler) and a Playwright regression test in the public-gate group of `mock-llm-auth-modes.spec.ts`.\r\n\r\n## Issue Number\r\n\r\nFixes #17901\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx setup-llm-step agent-server-ui-providers query-client-config llm-settings-local-view chat-input-llm-profile-picker cloud-organization-startup\r\nnpm run lint\r\n```\r\n\r\n- 8 files, 91 tests pass. On `origin/main`'s `use-free-models.ts`, \"s",
              "now true at once instead of after the query failed (~7 s with retries). Its consumers need a backend to be shown anyway.\r\n- Follow-up: the verify-openhands feature map (F01 onboarding-backend-step, and the gotcha naming #17901) lists this as a known failure; update it in #17961 once this merges.\r\n- Reviewer remarks (non-blocking):\r\n  - `.pr/17901-after-remove-last-backend-api-key-screen-no-toast.png` is byte-identical to the after API-key screenshot (same screen), so it is not embedded above; the remove-last-backend variant is backed by the toast history text.\r\n  - The "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18010"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18010,
          "title": "fix(onboarding): stop the \"No backend is configured.\" toast before a backend exists",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18010",
          "created_at": "2026-10-05T20:21:09Z",
          "updated_at": "2026-10-08T20:38:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:21:24Z",
          "closed_at": "2026-10-06T01:21:24Z",
          "head_sha": "fac966c31391e129221fabff95e7f53400e12f33",
          "scope": "Prevents free-model queries and missing-backend toasts before first-run backend setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "d the query runs for it.\r\n- Unit tests (with the real `createAgentServerQueryClient` toast handler) and a Playwright regression test in the public-gate group of `mock-llm-auth-modes.spec.ts`.\r\n\r\n## Issue Number\r\n\r\nFixes #17901\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx setup-llm-step agent-server-ui-providers query-client-config llm-settings-local-view chat-input-llm-profile-picker cloud-organization-startup\r\nnpm run lint\r\n```\r\n\r\n- 8 files, 91 tests pass. On `origin/main`'s `use-free-models.ts`, \"s",
              "now true at once instead of after the query failed (~7 s with retries). Its consumers need a backend to be shown anyway.\r\n- Follow-up: the verify-openhands feature map (F01 onboarding-backend-step, and the gotcha naming #17901) lists this as a known failure; update it in #17961 once this merges.\r\n- Reviewer remarks (non-blocking):\r\n  - `.pr/17901-after-remove-last-backend-api-key-screen-no-toast.png` is byte-identical to the after API-key screenshot (same screen), so it is not embedded above; the remove-last-backend variant is backed by the toast history text.\r\n  - The "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18010"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18010; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17902,
      "title": "[Bug]: Automations Filters popover closes after every option click, so filters cannot be combined",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17902",
      "created_at": "2026-10-04T23:28:53Z",
      "updated_at": "2026-10-06T03:35:38Z",
      "state": "closed",
      "closed_at": "2026-10-06T03:35:38Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18026,
          "title": "fix(automations): keep the filters popover open between choices",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18026",
          "created_at": "2026-10-05T21:05:49Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "closed_at": "2026-10-06T03:35:36Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Keeps automation filter choices inside the open popover until the user dismisses it.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "il if the trigger ignore ref from #18015 is removed. In the browser the overflow menu was not affected: a `document` listener there always sees the full dispatch path, which includes the trigger.\n\n## Issue Number\n\nFixes #17902\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/use-click-outside-element.test.tsx __tests__/components/features/automations __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run lint\n```\n\nPlaywright spec (chromium; needs `npm run dev:mock` per the e2e guide):\n\n```bash\nnpx playwright test t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18026"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18026,
          "title": "fix(automations): keep the filters popover open between choices",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18026",
          "created_at": "2026-10-05T21:05:49Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "closed_at": "2026-10-06T03:35:36Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Keeps automation filter choices inside the open popover until the user dismisses it.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "il if the trigger ignore ref from #18015 is removed. In the browser the overflow menu was not affected: a `document` listener there always sees the full dispatch path, which includes the trigger.\n\n## Issue Number\n\nFixes #17902\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/use-click-outside-element.test.tsx __tests__/components/features/automations __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run lint\n```\n\nPlaywright spec (chromium; needs `npm run dev:mock` per the e2e guide):\n\n```bash\nnpx playwright test t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18026"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known",
              "itches are skipped by Tab and invisible to screen readers (SettingsSwitch renders <input hidden>)\n- OpenHands/OpenHands#17901: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast\n- OpenHands/OpenHands#17902: Automations Filters popover closes after every option click, so filters cannot be combined\n- OpenHands/OpenHands#17903: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen\n- OpenHands/OpenHands#17904: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error\n- OpenHands/OpenHands#1790"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18026,
          "title": "fix(automations): keep the filters popover open between choices",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18026",
          "created_at": "2026-10-05T21:05:49Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "closed_at": "2026-10-06T03:35:36Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Keeps automation filter choices inside the open popover until the user dismisses it.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "il if the trigger ignore ref from #18015 is removed. In the browser the overflow menu was not affected: a `document` listener there always sees the full dispatch path, which includes the trigger.\n\n## Issue Number\n\nFixes #17902\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/use-click-outside-element.test.tsx __tests__/components/features/automations __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run lint\n```\n\nPlaywright spec (chromium; needs `npm run dev:mock` per the e2e guide):\n\n```bash\nnpx playwright test t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18026"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18026,
          "title": "fix(automations): keep the filters popover open between choices",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18026",
          "created_at": "2026-10-05T21:05:49Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "closed_at": "2026-10-06T03:35:36Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Keeps automation filter choices inside the open popover until the user dismisses it.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "il if the trigger ignore ref from #18015 is removed. In the browser the overflow menu was not affected: a `document` listener there always sees the full dispatch path, which includes the trigger.\n\n## Issue Number\n\nFixes #17902\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/use-click-outside-element.test.tsx __tests__/components/features/automations __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run lint\n```\n\nPlaywright spec (chromium; needs `npm run dev:mock` per the e2e guide):\n\n```bash\nnpx playwright test t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18026"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18026; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17903,
      "title": "[Bug]: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17903",
      "created_at": "2026-10-04T23:29:02Z",
      "updated_at": "2026-10-05T21:36:06Z",
      "state": "closed",
      "closed_at": "2026-10-05T21:36:06Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18008,
          "title": "fix(settings): keep the Agent Canvas update dialog inside phone viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18008",
          "created_at": "2026-10-05T20:15:41Z",
          "updated_at": "2026-10-06T00:58:27Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:36:04Z",
          "closed_at": "2026-10-05T21:36:04Z",
          "head_sha": "27486956582f4a3d2743dd1b37d6b3f5728bbe66",
          "scope": "Caps the Agent Canvas update dialog width to fit phone viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ". It is now `min(520px, 90vw)` wide, and desktop stays at 520px.\r\n- Add a unit test that checks the dialog keeps `w-130` and also has the `max-w-[90vw]` cap. It fails on main and passes here.\r\n\r\n## Issue Number\r\n\r\nFixes #17903\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run src/components/features/settings/agent-canvas-update-card.test.tsx __tests__/components/features/conversation-panel/conversation-lg-modals-viewport.test.tsx\r\n# 2 files, 18 tests passed; the new test fails on main (missing max-w-[90vw])\r\nnpx eslint src/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18008"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18008,
          "title": "fix(settings): keep the Agent Canvas update dialog inside phone viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18008",
          "created_at": "2026-10-05T20:15:41Z",
          "updated_at": "2026-10-06T00:58:27Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:36:04Z",
          "closed_at": "2026-10-05T21:36:04Z",
          "head_sha": "27486956582f4a3d2743dd1b37d6b3f5728bbe66",
          "scope": "Caps the Agent Canvas update dialog width to fit phone viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ". It is now `min(520px, 90vw)` wide, and desktop stays at 520px.\r\n- Add a unit test that checks the dialog keeps `w-130` and also has the `max-w-[90vw]` cap. It fails on main and passes here.\r\n\r\n## Issue Number\r\n\r\nFixes #17903\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run src/components/features/settings/agent-canvas-update-card.test.tsx __tests__/components/features/conversation-panel/conversation-lg-modals-viewport.test.tsx\r\n# 2 files, 18 tests passed; the new test fails on main (missing max-w-[90vw])\r\nnpx eslint src/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18008"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ssues merge, `main` is merged into this branch and the map is updated so those recipes expect the fixed behavior. Each changed recipe is re-run live on a fresh stack and checked by a second agent.\n  - fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 ",
              "17901: First-run onboarding and the API-key screen show a \"No backend is configured.\" error toast\n- OpenHands/OpenHands#17902: Automations Filters popover closes after every option click, so filters cannot be combined\n- OpenHands/OpenHands#17903: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen\n- OpenHands/OpenHands#17904: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error\n- OpenHands/OpenHands#17905: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast\n- OpenHands/OpenH"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18008,
          "title": "fix(settings): keep the Agent Canvas update dialog inside phone viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18008",
          "created_at": "2026-10-05T20:15:41Z",
          "updated_at": "2026-10-06T00:58:27Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:36:04Z",
          "closed_at": "2026-10-05T21:36:04Z",
          "head_sha": "27486956582f4a3d2743dd1b37d6b3f5728bbe66",
          "scope": "Caps the Agent Canvas update dialog width to fit phone viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ". It is now `min(520px, 90vw)` wide, and desktop stays at 520px.\r\n- Add a unit test that checks the dialog keeps `w-130` and also has the `max-w-[90vw]` cap. It fails on main and passes here.\r\n\r\n## Issue Number\r\n\r\nFixes #17903\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run src/components/features/settings/agent-canvas-update-card.test.tsx __tests__/components/features/conversation-panel/conversation-lg-modals-viewport.test.tsx\r\n# 2 files, 18 tests passed; the new test fails on main (missing max-w-[90vw])\r\nnpx eslint src/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18008"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18008,
          "title": "fix(settings): keep the Agent Canvas update dialog inside phone viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18008",
          "created_at": "2026-10-05T20:15:41Z",
          "updated_at": "2026-10-06T00:58:27Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:36:04Z",
          "closed_at": "2026-10-05T21:36:04Z",
          "head_sha": "27486956582f4a3d2743dd1b37d6b3f5728bbe66",
          "scope": "Caps the Agent Canvas update dialog width to fit phone viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ". It is now `min(520px, 90vw)` wide, and desktop stays at 520px.\r\n- Add a unit test that checks the dialog keeps `w-130` and also has the `max-w-[90vw]` cap. It fails on main and passes here.\r\n\r\n## Issue Number\r\n\r\nFixes #17903\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run src/components/features/settings/agent-canvas-update-card.test.tsx __tests__/components/features/conversation-panel/conversation-lg-modals-viewport.test.tsx\r\n# 2 files, 18 tests passed; the new test fails on main (missing max-w-[90vw])\r\nnpx eslint src/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18008"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18008; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17904,
      "title": "[Bug]: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17904",
      "created_at": "2026-10-04T23:29:13Z",
      "updated_at": "2026-10-06T01:13:35Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:13:35Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18023,
          "title": "fix(routes): render unknown URLs as an in-app not-found page",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18023",
          "created_at": "2026-10-05T21:01:32Z",
          "updated_at": "2026-10-08T20:38:58Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:13:33Z",
          "closed_at": "2026-10-06T01:13:33Z",
          "head_sha": "f9c9667e6b3bf10e62361615f43b079048723b18",
          "scope": "Renders unknown URLs with an in-app not-found page and navigation back home.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "uses the shared `BackNavButton` and the existing `BUTTON$HOME` key.\r\n- New i18n keys `NOT_FOUND$TITLE` and `NOT_FOUND$MESSAGE` in all 15 languages, plus `__tests__/routes/not-found.test.tsx`.\r\n\r\n## Issue Number\r\n\r\nFixes #17904\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/routes/not-found.test.tsx`: 4 tests. On main's `src/routes.ts`, the 2 unknown-path tests fail because `matchRoutes` returns `undefined`. On this branch, all 4 pass.\r\n- `npx vitest run __tests__/routes/not-found.test.tsx __tests__/routes/root-layout __tests__/routes/settings`:"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18023"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18023,
          "title": "fix(routes): render unknown URLs as an in-app not-found page",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18023",
          "created_at": "2026-10-05T21:01:32Z",
          "updated_at": "2026-10-08T20:38:58Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:13:33Z",
          "closed_at": "2026-10-06T01:13:33Z",
          "head_sha": "f9c9667e6b3bf10e62361615f43b079048723b18",
          "scope": "Renders unknown URLs with an in-app not-found page and navigation back home.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "uses the shared `BackNavButton` and the existing `BUTTON$HOME` key.\r\n- New i18n keys `NOT_FOUND$TITLE` and `NOT_FOUND$MESSAGE` in all 15 languages, plus `__tests__/routes/not-found.test.tsx`.\r\n\r\n## Issue Number\r\n\r\nFixes #17904\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/routes/not-found.test.tsx`: 4 tests. On main's `src/routes.ts`, the 2 unknown-path tests fail because `matchRoutes` returns `undefined`. On this branch, all 4 pass.\r\n- `npx vitest run __tests__/routes/not-found.test.tsx __tests__/routes/root-layout __tests__/routes/settings`:"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18023"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "s#17902: Automations Filters popover closes after every option click, so filters cannot be combined\n- OpenHands/OpenHands#17903: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen\n- OpenHands/OpenHands#17904: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error\n- OpenHands/OpenHands#17905: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast\n- OpenHands/OpenHands#17906: A failed automation \"Run now\" shows two error toasts\n- OpenHands/OpenHands#17907: Automation delete confir"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Changes plugin/App wording and busy switches.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "sCheckToggle` and `ToggleSwitch` are unchanged. `ToggleSwitch` only gains the optional `disabled` prop.\n- **Out of scope:** no `/extensions` route or redirect is added; the docs are corrected instead. The bare 404 page (#17904) and the copy errors in #17939 are left alone.\n- **Reviewer note (non-blocking), focus after a keyboard toggle:** toggling an app's switch with the keyboard now drops focus to `<body>`. The switch's own `setEnabled` makes the card busy, and native `disabled` removes focus. The issue requires that a busy switch cannot take focus, so this meets it, "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves the bare 404 issue untouched."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18023,
          "title": "fix(routes): render unknown URLs as an in-app not-found page",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18023",
          "created_at": "2026-10-05T21:01:32Z",
          "updated_at": "2026-10-08T20:38:58Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:13:33Z",
          "closed_at": "2026-10-06T01:13:33Z",
          "head_sha": "f9c9667e6b3bf10e62361615f43b079048723b18",
          "scope": "Renders unknown URLs with an in-app not-found page and navigation back home.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "uses the shared `BackNavButton` and the existing `BUTTON$HOME` key.\r\n- New i18n keys `NOT_FOUND$TITLE` and `NOT_FOUND$MESSAGE` in all 15 languages, plus `__tests__/routes/not-found.test.tsx`.\r\n\r\n## Issue Number\r\n\r\nFixes #17904\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/routes/not-found.test.tsx`: 4 tests. On main's `src/routes.ts`, the 2 unknown-path tests fail because `matchRoutes` returns `undefined`. On this branch, all 4 pass.\r\n- `npx vitest run __tests__/routes/not-found.test.tsx __tests__/routes/root-layout __tests__/routes/settings`:"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18023"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18023,
          "title": "fix(routes): render unknown URLs as an in-app not-found page",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18023",
          "created_at": "2026-10-05T21:01:32Z",
          "updated_at": "2026-10-08T20:38:58Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:13:33Z",
          "closed_at": "2026-10-06T01:13:33Z",
          "head_sha": "f9c9667e6b3bf10e62361615f43b079048723b18",
          "scope": "Renders unknown URLs with an in-app not-found page and navigation back home.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "uses the shared `BackNavButton` and the existing `BUTTON$HOME` key.\r\n- New i18n keys `NOT_FOUND$TITLE` and `NOT_FOUND$MESSAGE` in all 15 languages, plus `__tests__/routes/not-found.test.tsx`.\r\n\r\n## Issue Number\r\n\r\nFixes #17904\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/routes/not-found.test.tsx`: 4 tests. On main's `src/routes.ts`, the 2 unknown-path tests fail because `matchRoutes` returns `undefined`. On this branch, all 4 pass.\r\n- `npx vitest run __tests__/routes/not-found.test.tsx __tests__/routes/root-layout __tests__/routes/settings`:"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18023"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18023; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17905,
      "title": "[Bug]: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17905",
      "created_at": "2026-10-04T23:29:21Z",
      "updated_at": "2026-10-05T23:50:58Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:50:58Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18009,
          "title": "fix(conversations): treat a null batch entry as not found, not an invalid response",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18009",
          "created_at": "2026-10-05T20:17:18Z",
          "updated_at": "2026-10-06T00:58:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:50:57Z",
          "closed_at": "2026-10-05T23:50:57Z",
          "head_sha": "594191ae36d32a1bdb91afcc38745d9cbc4d451b",
          "scope": "Treats null entries in conversation batches as not found instead of invalid UI data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "batch item is rejected, which was the bug. I replaced it with a test that a mixed `[conversation, null]` batch resolves to `[conversation, null]`. The other malformed-response cases are kept.\r\n\r\n## Issue Number\r\n\r\nFixes #17905\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/agent-server-conversation-service-regressions.test.ts __tests__/hooks/query/use-user-conversation.test.tsx __tests__/hooks/mutation/conversation-mutation-utils.test.ts __tests__/routes/conversation-backend-switch.tes",
              "ill reject a `null` item. Adding `[\"null item\", { items: [null], next_page_id: null }]` to the \"rejects a malformed conversation search response\" cases would guard it.\r\n- The verify-openhands feature map in #17961 lists #17905 as a known bug in F02/F07. That entry can be updated once this merges.\r\n- `npm run lint` on current main fails `tsc` in files unrelated to this PR (`tool-catalog-service.api.ts`, `agent-profiles-local-view.tsx`). Main moved to `@openhands/typescript-client` 1.53.0, and my local install still has 1.50.1. CI should install the right version.\r\n\r\n🤖 Ge"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18009"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18009,
          "title": "fix(conversations): treat a null batch entry as not found, not an invalid response",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18009",
          "created_at": "2026-10-05T20:17:18Z",
          "updated_at": "2026-10-06T00:58:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:50:57Z",
          "closed_at": "2026-10-05T23:50:57Z",
          "head_sha": "594191ae36d32a1bdb91afcc38745d9cbc4d451b",
          "scope": "Treats null entries in conversation batches as not found instead of invalid UI data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "batch item is rejected, which was the bug. I replaced it with a test that a mixed `[conversation, null]` batch resolves to `[conversation, null]`. The other malformed-response cases are kept.\r\n\r\n## Issue Number\r\n\r\nFixes #17905\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/agent-server-conversation-service-regressions.test.ts __tests__/hooks/query/use-user-conversation.test.tsx __tests__/hooks/mutation/conversation-mutation-utils.test.ts __tests__/routes/conversation-backend-switch.tes",
              "ill reject a `null` item. Adding `[\"null item\", { items: [null], next_page_id: null }]` to the \"rejects a malformed conversation search response\" cases would guard it.\r\n- The verify-openhands feature map in #17961 lists #17905 as a known bug in F02/F07. That entry can be updated once this merges.\r\n- `npm run lint` on current main fails `tsc` in files unrelated to this PR (`tool-catalog-service.api.ts`, `agent-profiles-local-view.tsx`). Main moved to `@openhands/typescript-client` 1.53.0, and my local install still has 1.50.1. CI should install the right version.\r\n\r\n🤖 Ge"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18009"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "penHands#17903: Agent Canvas update dialog overflows a 390px viewport and its Close button is off-screen\n- OpenHands/OpenHands#17904: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error\n- OpenHands/OpenHands#17905: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast\n- OpenHands/OpenHands#17906: A failed automation \"Run now\" shows two error toasts\n- OpenHands/OpenHands#17907: Automation delete confirmation ignores Escape and is not exposed as a dialog\n- OpenHands/OpenHands#17908: Command menu misses Model Route"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18009,
          "title": "fix(conversations): treat a null batch entry as not found, not an invalid response",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18009",
          "created_at": "2026-10-05T20:17:18Z",
          "updated_at": "2026-10-06T00:58:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:50:57Z",
          "closed_at": "2026-10-05T23:50:57Z",
          "head_sha": "594191ae36d32a1bdb91afcc38745d9cbc4d451b",
          "scope": "Treats null entries in conversation batches as not found instead of invalid UI data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "batch item is rejected, which was the bug. I replaced it with a test that a mixed `[conversation, null]` batch resolves to `[conversation, null]`. The other malformed-response cases are kept.\r\n\r\n## Issue Number\r\n\r\nFixes #17905\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/agent-server-conversation-service-regressions.test.ts __tests__/hooks/query/use-user-conversation.test.tsx __tests__/hooks/mutation/conversation-mutation-utils.test.ts __tests__/routes/conversation-backend-switch.tes",
              "ill reject a `null` item. Adding `[\"null item\", { items: [null], next_page_id: null }]` to the \"rejects a malformed conversation search response\" cases would guard it.\r\n- The verify-openhands feature map in #17961 lists #17905 as a known bug in F02/F07. That entry can be updated once this merges.\r\n- `npm run lint` on current main fails `tsc` in files unrelated to this PR (`tool-catalog-service.api.ts`, `agent-profiles-local-view.tsx`). Main moved to `@openhands/typescript-client` 1.53.0, and my local install still has 1.50.1. CI should install the right version.\r\n\r\n🤖 Ge"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18009"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18009,
          "title": "fix(conversations): treat a null batch entry as not found, not an invalid response",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18009",
          "created_at": "2026-10-05T20:17:18Z",
          "updated_at": "2026-10-06T00:58:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:50:57Z",
          "closed_at": "2026-10-05T23:50:57Z",
          "head_sha": "594191ae36d32a1bdb91afcc38745d9cbc4d451b",
          "scope": "Treats null entries in conversation batches as not found instead of invalid UI data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "batch item is rejected, which was the bug. I replaced it with a test that a mixed `[conversation, null]` batch resolves to `[conversation, null]`. The other malformed-response cases are kept.\r\n\r\n## Issue Number\r\n\r\nFixes #17905\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/agent-server-conversation-service-regressions.test.ts __tests__/hooks/query/use-user-conversation.test.tsx __tests__/hooks/mutation/conversation-mutation-utils.test.ts __tests__/routes/conversation-backend-switch.tes",
              "ill reject a `null` item. Adding `[\"null item\", { items: [null], next_page_id: null }]` to the \"rejects a malformed conversation search response\" cases would guard it.\r\n- The verify-openhands feature map in #17961 lists #17905 as a known bug in F02/F07. That entry can be updated once this merges.\r\n- `npm run lint` on current main fails `tsc` in files unrelated to this PR (`tool-catalog-service.api.ts`, `agent-profiles-local-view.tsx`). Main moved to `@openhands/typescript-client` 1.53.0, and my local install still has 1.50.1. CI should install the right version.\r\n\r\n🤖 Ge"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18009"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18009; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17906,
      "title": "[Bug]: A failed automation \"Run now\" shows two error toasts",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17906",
      "created_at": "2026-10-04T23:29:29Z",
      "updated_at": "2026-10-06T02:43:32Z",
      "state": "closed",
      "closed_at": "2026-10-06T02:43:32Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18043,
          "title": "fix(automations): show one error toast when an automation action fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18043",
          "created_at": "2026-10-05T22:06:23Z",
          "updated_at": "2026-10-08T20:38:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:43:31Z",
          "closed_at": "2026-10-06T02:43:31Z",
          "head_sha": "d817df59fdb47675c165572398dcf11955f7d249",
          "scope": "Prevents duplicated global and caller error toasts for failed automation actions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "utomationActions` (Run now, Turn off, Cancel run each show exactly one toast), hook-level single-toast cases with the real `createAgentServerQueryClient`, and an Edit dialog pending-dismiss case.\n\n## Issue Number\n\nFixes #17906\n\n## How to Test\n\nUnit tests and lint (from the repo root):\n\n```bash\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx __tests__/hooks/query/use-automations-backend-switch.test.tsx __tests__/components/automations/detail/edit-automation-modal.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automations-list-be"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18043"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18043,
          "title": "fix(automations): show one error toast when an automation action fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18043",
          "created_at": "2026-10-05T22:06:23Z",
          "updated_at": "2026-10-08T20:38:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:43:31Z",
          "closed_at": "2026-10-06T02:43:31Z",
          "head_sha": "d817df59fdb47675c165572398dcf11955f7d249",
          "scope": "Prevents duplicated global and caller error toasts for failed automation actions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "utomationActions` (Run now, Turn off, Cancel run each show exactly one toast), hook-level single-toast cases with the real `createAgentServerQueryClient`, and an Edit dialog pending-dismiss case.\n\n## Issue Number\n\nFixes #17906\n\n## How to Test\n\nUnit tests and lint (from the repo root):\n\n```bash\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx __tests__/hooks/query/use-automations-backend-switch.test.tsx __tests__/components/automations/detail/edit-automation-modal.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automations-list-be"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18043"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " second agent.\n  - fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vs",
              "904: Unknown URLs show a bare \"404 Not Found\" with no way back and log a hydration error\n- OpenHands/OpenHands#17905: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast\n- OpenHands/OpenHands#17906: A failed automation \"Run now\" shows two error toasts\n- OpenHands/OpenHands#17907: Automation delete confirmation ignores Escape and is not exposed as a dialog\n- OpenHands/OpenHands#17908: Command menu misses Model Router and Agent Context, and always shows ⌘K\n- OpenHands/OpenHands#17909: Screen-reader semantics: nested <main> in Settings, no aria"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18043,
          "title": "fix(automations): show one error toast when an automation action fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18043",
          "created_at": "2026-10-05T22:06:23Z",
          "updated_at": "2026-10-08T20:38:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:43:31Z",
          "closed_at": "2026-10-06T02:43:31Z",
          "head_sha": "d817df59fdb47675c165572398dcf11955f7d249",
          "scope": "Prevents duplicated global and caller error toasts for failed automation actions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "utomationActions` (Run now, Turn off, Cancel run each show exactly one toast), hook-level single-toast cases with the real `createAgentServerQueryClient`, and an Edit dialog pending-dismiss case.\n\n## Issue Number\n\nFixes #17906\n\n## How to Test\n\nUnit tests and lint (from the repo root):\n\n```bash\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx __tests__/hooks/query/use-automations-backend-switch.test.tsx __tests__/components/automations/detail/edit-automation-modal.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automations-list-be"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18043"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18043,
          "title": "fix(automations): show one error toast when an automation action fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18043",
          "created_at": "2026-10-05T22:06:23Z",
          "updated_at": "2026-10-08T20:38:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:43:31Z",
          "closed_at": "2026-10-06T02:43:31Z",
          "head_sha": "d817df59fdb47675c165572398dcf11955f7d249",
          "scope": "Prevents duplicated global and caller error toasts for failed automation actions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "utomationActions` (Run now, Turn off, Cancel run each show exactly one toast), hook-level single-toast cases with the real `createAgentServerQueryClient`, and an Edit dialog pending-dismiss case.\n\n## Issue Number\n\nFixes #17906\n\n## How to Test\n\nUnit tests and lint (from the repo root):\n\n```bash\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx __tests__/hooks/query/use-automations-backend-switch.test.tsx __tests__/components/automations/detail/edit-automation-modal.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automations-list-be"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18043"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18043; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17907,
      "title": "[Bug]: Automation delete confirmation ignores Escape and is not exposed as a dialog",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17907",
      "created_at": "2026-10-04T23:29:42Z",
      "updated_at": "2026-10-05T23:55:56Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:55:56Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18011,
          "title": "fix(automations): make the delete confirmation a modal dialog that closes on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18011",
          "created_at": "2026-10-05T20:24:21Z",
          "updated_at": "2026-10-06T00:58:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:54Z",
          "closed_at": "2026-10-05T23:55:54Z",
          "head_sha": "941ee1ec81bb36f47d38867bd8791cea8b93af84",
          "scope": "Makes automation delete confirmation an accessible modal that closes on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h helpers (`modalWidthClassName(\"sm\")` = `w-96`, the same 384px, plus `MODAL_MAX_WIDTH_VIEWPORT`). Delete, the API calls and the toasts are unchanged. 3 new Vitest/RTL tests cover both pages.\r\n\r\n## Issue Number\r\n\r\nFixes #17907\r\n\r\n## How to Test\r\n\r\nUnit tests (the 3 new tests fail on `main`, all pass here):\r\n\r\n```bash\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx -t \"delete confirmation\"\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automatio"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18011"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18011,
          "title": "fix(automations): make the delete confirmation a modal dialog that closes on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18011",
          "created_at": "2026-10-05T20:24:21Z",
          "updated_at": "2026-10-06T00:58:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:54Z",
          "closed_at": "2026-10-05T23:55:54Z",
          "head_sha": "941ee1ec81bb36f47d38867bd8791cea8b93af84",
          "scope": "Makes automation delete confirmation an accessible modal that closes on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h helpers (`modalWidthClassName(\"sm\")` = `w-96`, the same 384px, plus `MODAL_MAX_WIDTH_VIEWPORT`). Delete, the API calls and the toasts are unchanged. 3 new Vitest/RTL tests cover both pages.\r\n\r\n## Issue Number\r\n\r\nFixes #17907\r\n\r\n## How to Test\r\n\r\nUnit tests (the 3 new tests fail on `main`, all pass here):\r\n\r\n```bash\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx -t \"delete confirmation\"\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automatio"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18011"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " error\n- OpenHands/OpenHands#17905: Opening an unknown conversation id also shows a misleading \"data this UI does not understand\" toast\n- OpenHands/OpenHands#17906: A failed automation \"Run now\" shows two error toasts\n- OpenHands/OpenHands#17907: Automation delete confirmation ignores Escape and is not exposed as a dialog\n- OpenHands/OpenHands#17908: Command menu misses Model Router and Agent Context, and always shows ⌘K\n- OpenHands/OpenHands#17909: Screen-reader semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated\n- OpenHands/OpenHands#17913: Conv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds Escape handling to other menus/popovers.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "same Escape stack. The composer + tools menu, the status-dot menu and the workspace tabs overflow menu have the same symptom (see the issue comment) and are left as follow-ups. #17913 (header ⋯ menu, handled in #18028), #17907 and #17908 are untouched.\n- **Other Escape listeners not on the stack yet:** `ModalBackdrop` modals and the settings actions menus keep their own listeners. Example: with the Overview Skills drawer and the add-skill modal open, one Escape closes both. `main` behaves the same way, so this is not a regression. A follow-up can register them through `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states #17907 is untouched; its delete dialog has a separate fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "The draft-dialog fix cites this issue as an earlier analogous fix; the automation Delete dialog and its original fix are unchanged.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "draft?** confirmation for a saved setup draft was an inline overlay. It ignored Escape, took no focus and was not exposed as a dialog. This is the same class of bug that #17907 fixed for the automation Delete dialog on the same page (#18382; regression from #17242).\n\n## Summary\n\n- The inline overlay is replaced by `DeleteConfirmationModal`, the `ModalBackdrop`-based dialog ",
              "ialog on the same page (#18382; regression from #17242).\n\n## Summary\n\n- The inline overlay is replaced by `DeleteConfirmationModal`, the `ModalBackdrop`-based dialog the #17907 fix uses. It gains optional `title`, `message`, `confirmLabel`, `confirmTestId` and `isConfirming` props. The automation Delete dialog keeps the defaults and is unchanged.\n- The draft confirmation is"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18394"
            ]
          },
          "direct_closer": false,
          "number": 18394,
          "title": "fix(automations): make the draft delete confirmation a real dialog",
          "url": "https://github.com/OpenHands/OpenHands/pull/18394",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T15:58:13Z",
          "closed_at": "2026-10-13T15:58:13Z",
          "created_at": "2026-10-13T10:11:47Z",
          "updated_at": "2026-10-13T15:58:44Z",
          "head_sha": "f4f2635a2d608dee2acff18e8bd32d9ad619e567",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18011,
          "title": "fix(automations): make the delete confirmation a modal dialog that closes on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18011",
          "created_at": "2026-10-05T20:24:21Z",
          "updated_at": "2026-10-06T00:58:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:54Z",
          "closed_at": "2026-10-05T23:55:54Z",
          "head_sha": "941ee1ec81bb36f47d38867bd8791cea8b93af84",
          "scope": "Makes automation delete confirmation an accessible modal that closes on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h helpers (`modalWidthClassName(\"sm\")` = `w-96`, the same 384px, plus `MODAL_MAX_WIDTH_VIEWPORT`). Delete, the API calls and the toasts are unchanged. 3 new Vitest/RTL tests cover both pages.\r\n\r\n## Issue Number\r\n\r\nFixes #17907\r\n\r\n## How to Test\r\n\r\nUnit tests (the 3 new tests fail on `main`, all pass here):\r\n\r\n```bash\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx -t \"delete confirmation\"\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automatio"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18011"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18011,
          "title": "fix(automations): make the delete confirmation a modal dialog that closes on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18011",
          "created_at": "2026-10-05T20:24:21Z",
          "updated_at": "2026-10-06T00:58:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:54Z",
          "closed_at": "2026-10-05T23:55:54Z",
          "head_sha": "941ee1ec81bb36f47d38867bd8791cea8b93af84",
          "scope": "Makes automation delete confirmation an accessible modal that closes on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h helpers (`modalWidthClassName(\"sm\")` = `w-96`, the same 384px, plus `MODAL_MAX_WIDTH_VIEWPORT`). Delete, the API calls and the toasts are unchanged. 3 new Vitest/RTL tests cover both pages.\r\n\r\n## Issue Number\r\n\r\nFixes #17907\r\n\r\n## How to Test\r\n\r\nUnit tests (the 3 new tests fail on `main`, all pass here):\r\n\r\n```bash\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx -t \"delete confirmation\"\r\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/routes/automation-detail.test.tsx __tests__/routes/automatio"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18011"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18011; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17908,
      "title": "[Bug]: Command menu misses Model Router and Agent Context, and always shows ⌘K",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17908",
      "created_at": "2026-10-04T23:29:51Z",
      "updated_at": "2026-10-06T01:15:42Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:15:42Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18027,
          "title": "fix(command-menu): list Model Router and Agent Context; show Ctrl+K off Apple",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18027",
          "created_at": "2026-10-05T21:09:10Z",
          "updated_at": "2026-10-08T20:38:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:15:41Z",
          "closed_at": "2026-10-06T01:15:41Z",
          "head_sha": "f017c040916afcd356477ab45ee926b608b917ea",
          "scope": "Adds Model Router and Agent Context to the command menu and platform-appropriate shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sts: the new entries, an invariant that every `OSS_NAV_ITEMS` path has a menu entry, search-and-open for both pages, and the hint in both places for macOS, iOS, Linux and Windows user agents.\r\n\r\n## Issue Number\r\n\r\nFixes #17908\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpm run make-i18n\r\nnode scripts/check-translation-completeness.cjs\r\nnpx vitest run __tests__/components/features/command-menu/ __tests__/utils/browser-and-file-utilities.test.ts __tests__/components/features/sidebar/\r\nnpx eslint src\r\nnpx prettier --check 'src/**/*.{ts,tsx}'\r\n```\r\n\r\n- Vitest: 9 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18027"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18027,
          "title": "fix(command-menu): list Model Router and Agent Context; show Ctrl+K off Apple",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18027",
          "created_at": "2026-10-05T21:09:10Z",
          "updated_at": "2026-10-08T20:38:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:15:41Z",
          "closed_at": "2026-10-06T01:15:41Z",
          "head_sha": "f017c040916afcd356477ab45ee926b608b917ea",
          "scope": "Adds Model Router and Agent Context to the command menu and platform-appropriate shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sts: the new entries, an invariant that every `OSS_NAV_ITEMS` path has a menu entry, search-and-open for both pages, and the hint in both places for macOS, iOS, Linux and Windows user agents.\r\n\r\n## Issue Number\r\n\r\nFixes #17908\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpm run make-i18n\r\nnode scripts/check-translation-completeness.cjs\r\nnpx vitest run __tests__/components/features/command-menu/ __tests__/utils/browser-and-file-utilities.test.ts __tests__/components/features/sidebar/\r\nnpx eslint src\r\nnpx prettier --check 'src/**/*.{ts,tsx}'\r\n```\r\n\r\n- Vitest: 9 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18027"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "UI does not understand\" toast\n- OpenHands/OpenHands#17906: A failed automation \"Run now\" shows two error toasts\n- OpenHands/OpenHands#17907: Automation delete confirmation ignores Escape and is not exposed as a dialog\n- OpenHands/OpenHands#17908: Command menu misses Model Router and Agent Context, and always shows ⌘K\n- OpenHands/OpenHands#17909: Screen-reader semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated\n- OpenHands/OpenHands#17913: Conversation header \"⋯\" menu overflows the screen at phone width and does not close on Escape\n- OpenHands/Open"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds Escape handling to other menus/popovers.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " stack. The composer + tools menu, the status-dot menu and the workspace tabs overflow menu have the same symptom (see the issue comment) and are left as follow-ups. #17913 (header ⋯ menu, handled in #18028), #17907 and #17908 are untouched.\n- **Other Escape listeners not on the stack yet:** `ModalBackdrop` modals and the settings actions menus keep their own listeners. Example: with the Overview Skills drawer and the add-skill modal open, one Escape closes both. `main` behaves the same way, so this is not a regression. A follow-up can register them through `useCloseOnE"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states #17908 command-menu destinations/hints are untouched."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18027,
          "title": "fix(command-menu): list Model Router and Agent Context; show Ctrl+K off Apple",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18027",
          "created_at": "2026-10-05T21:09:10Z",
          "updated_at": "2026-10-08T20:38:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:15:41Z",
          "closed_at": "2026-10-06T01:15:41Z",
          "head_sha": "f017c040916afcd356477ab45ee926b608b917ea",
          "scope": "Adds Model Router and Agent Context to the command menu and platform-appropriate shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sts: the new entries, an invariant that every `OSS_NAV_ITEMS` path has a menu entry, search-and-open for both pages, and the hint in both places for macOS, iOS, Linux and Windows user agents.\r\n\r\n## Issue Number\r\n\r\nFixes #17908\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpm run make-i18n\r\nnode scripts/check-translation-completeness.cjs\r\nnpx vitest run __tests__/components/features/command-menu/ __tests__/utils/browser-and-file-utilities.test.ts __tests__/components/features/sidebar/\r\nnpx eslint src\r\nnpx prettier --check 'src/**/*.{ts,tsx}'\r\n```\r\n\r\n- Vitest: 9 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18027"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18027,
          "title": "fix(command-menu): list Model Router and Agent Context; show Ctrl+K off Apple",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18027",
          "created_at": "2026-10-05T21:09:10Z",
          "updated_at": "2026-10-08T20:38:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:15:41Z",
          "closed_at": "2026-10-06T01:15:41Z",
          "head_sha": "f017c040916afcd356477ab45ee926b608b917ea",
          "scope": "Adds Model Router and Agent Context to the command menu and platform-appropriate shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "sts: the new entries, an invariant that every `OSS_NAV_ITEMS` path has a menu entry, search-and-open for both pages, and the hint in both places for macOS, iOS, Linux and Windows user agents.\r\n\r\n## Issue Number\r\n\r\nFixes #17908\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpm run make-i18n\r\nnode scripts/check-translation-completeness.cjs\r\nnpx vitest run __tests__/components/features/command-menu/ __tests__/utils/browser-and-file-utilities.test.ts __tests__/components/features/sidebar/\r\nnpx eslint src\r\nnpx prettier --check 'src/**/*.{ts,tsx}'\r\n```\r\n\r\n- Vitest: 9 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18027"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18027; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17909,
      "title": "[Bug]: Screen-reader semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17909",
      "created_at": "2026-10-04T23:30:02Z",
      "updated_at": "2026-10-05T23:02:27Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:02:27Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18012,
          "title": "fix(a11y): one Settings main landmark, Customize aria-current, synced html lang",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18012",
          "created_at": "2026-10-05T20:27:58Z",
          "updated_at": "2026-10-06T00:58:13Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:02:25Z",
          "closed_at": "2026-10-05T23:02:25Z",
          "head_sha": "06e18e2276a745b781ccdc73fe1619ad8d5be503",
          "scope": "Fixes Settings landmarks, Customize aria-current and HTML language/direction semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ".\r\n<!-- Human contributors: add a short note about your testing. -->\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the screen-reader semantics reported in #17909. Settings now has a single `<main>` landmark, the sidebar Customize link gets `aria-current=\"page\"` when it is shown as active, `<html lang>`/`dir` follow the selected UI language, and the command-menu trigger label is translated.\r\n\r\n## Why\r\n\r\nScreen-reader users got wrong or missing semantics in four places:\r\n\r\n- **Two nested `<main>` landmarks i",
              "t layout, copies i18next's language to `<html lang>` and `i18n.dir()` to `<html dir>` on mount and on every `languageChanged` event. `COMMAND_MENU$OPEN_LABEL` is translated in all 15 locales.\r\n\r\n## Issue Number\r\n\r\nFixes #17909\r\n\r\n## How to Test\r\n\r\nUnit tests, lint and the i18n check, run from the repo root:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/use-sync-document-language.test.ts __tests__/routes/settings.test.tsx __tests__/components/features/sidebar/ __tests__/i18n/ __tests__/components/shared/navigation-link.test.tsx __tests__/routes/root-layout.test.tsx __tests_"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18012"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18012,
          "title": "fix(a11y): one Settings main landmark, Customize aria-current, synced html lang",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18012",
          "created_at": "2026-10-05T20:27:58Z",
          "updated_at": "2026-10-06T00:58:13Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:02:25Z",
          "closed_at": "2026-10-05T23:02:25Z",
          "head_sha": "06e18e2276a745b781ccdc73fe1619ad8d5be503",
          "scope": "Fixes Settings landmarks, Customize aria-current and HTML language/direction semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ".\r\n<!-- Human contributors: add a short note about your testing. -->\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the screen-reader semantics reported in #17909. Settings now has a single `<main>` landmark, the sidebar Customize link gets `aria-current=\"page\"` when it is shown as active, `<html lang>`/`dir` follow the selected UI language, and the command-menu trigger label is translated.\r\n\r\n## Why\r\n\r\nScreen-reader users got wrong or missing semantics in four places:\r\n\r\n- **Two nested `<main>` landmarks i",
              "t layout, copies i18next's language to `<html lang>` and `i18n.dir()` to `<html dir>` on mount and on every `languageChanged` event. `COMMAND_MENU$OPEN_LABEL` is translated in all 15 locales.\r\n\r\n## Issue Number\r\n\r\nFixes #17909\r\n\r\n## How to Test\r\n\r\nUnit tests, lint and the i18n check, run from the repo root:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/use-sync-document-language.test.ts __tests__/routes/settings.test.tsx __tests__/components/features/sidebar/ __tests__/i18n/ __tests__/components/shared/navigation-link.test.tsx __tests__/routes/root-layout.test.tsx __tests_"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18012"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n` is merged into this branch and the map is updated so those recipes expect the fixed behavior. Each changed recipe is re-run live on a fresh stack and checked by a second agent.\n  - fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 ",
              "ror toasts\n- OpenHands/OpenHands#17907: Automation delete confirmation ignores Escape and is not exposed as a dialog\n- OpenHands/OpenHands#17908: Command menu misses Model Router and Agent Context, and always shows ⌘K\n- OpenHands/OpenHands#17909: Screen-reader semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated\n- OpenHands/OpenHands#17913: Conversation header \"⋯\" menu overflows the screen at phone width and does not close on Escape\n- OpenHands/OpenHands#17914: \"Branch from here\" on a user message drops the message but leaves the new conversation's"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18012,
          "title": "fix(a11y): one Settings main landmark, Customize aria-current, synced html lang",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18012",
          "created_at": "2026-10-05T20:27:58Z",
          "updated_at": "2026-10-06T00:58:13Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:02:25Z",
          "closed_at": "2026-10-05T23:02:25Z",
          "head_sha": "06e18e2276a745b781ccdc73fe1619ad8d5be503",
          "scope": "Fixes Settings landmarks, Customize aria-current and HTML language/direction semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ".\r\n<!-- Human contributors: add a short note about your testing. -->\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the screen-reader semantics reported in #17909. Settings now has a single `<main>` landmark, the sidebar Customize link gets `aria-current=\"page\"` when it is shown as active, `<html lang>`/`dir` follow the selected UI language, and the command-menu trigger label is translated.\r\n\r\n## Why\r\n\r\nScreen-reader users got wrong or missing semantics in four places:\r\n\r\n- **Two nested `<main>` landmarks i",
              "t layout, copies i18next's language to `<html lang>` and `i18n.dir()` to `<html dir>` on mount and on every `languageChanged` event. `COMMAND_MENU$OPEN_LABEL` is translated in all 15 locales.\r\n\r\n## Issue Number\r\n\r\nFixes #17909\r\n\r\n## How to Test\r\n\r\nUnit tests, lint and the i18n check, run from the repo root:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/use-sync-document-language.test.ts __tests__/routes/settings.test.tsx __tests__/components/features/sidebar/ __tests__/i18n/ __tests__/components/shared/navigation-link.test.tsx __tests__/routes/root-layout.test.tsx __tests_"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18012"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18012,
          "title": "fix(a11y): one Settings main landmark, Customize aria-current, synced html lang",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18012",
          "created_at": "2026-10-05T20:27:58Z",
          "updated_at": "2026-10-06T00:58:13Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:02:25Z",
          "closed_at": "2026-10-05T23:02:25Z",
          "head_sha": "06e18e2276a745b781ccdc73fe1619ad8d5be503",
          "scope": "Fixes Settings landmarks, Customize aria-current and HTML language/direction semantics.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              ".\r\n<!-- Human contributors: add a short note about your testing. -->\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the screen-reader semantics reported in #17909. Settings now has a single `<main>` landmark, the sidebar Customize link gets `aria-current=\"page\"` when it is shown as active, `<html lang>`/`dir` follow the selected UI language, and the command-menu trigger label is translated.\r\n\r\n## Why\r\n\r\nScreen-reader users got wrong or missing semantics in four places:\r\n\r\n- **Two nested `<main>` landmarks i",
              "t layout, copies i18next's language to `<html lang>` and `i18n.dir()` to `<html dir>` on mount and on every `languageChanged` event. `COMMAND_MENU$OPEN_LABEL` is translated in all 15 locales.\r\n\r\n## Issue Number\r\n\r\nFixes #17909\r\n\r\n## How to Test\r\n\r\nUnit tests, lint and the i18n check, run from the repo root:\r\n\r\n```bash\r\nnpx vitest run __tests__/hooks/use-sync-document-language.test.ts __tests__/routes/settings.test.tsx __tests__/components/features/sidebar/ __tests__/i18n/ __tests__/components/shared/navigation-link.test.tsx __tests__/routes/root-layout.test.tsx __tests_"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18012"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18012; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17912,
      "title": "Enable static class checking for Canvas UI components",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17912",
      "created_at": "2026-10-05T00:20:51Z",
      "updated_at": "2026-10-05T12:36:17Z",
      "state": "closed",
      "closed_at": "2026-10-05T12:36:17Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17916,
          "title": "chore(lint): require static classes on Canvas UI components",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17916",
          "created_at": "2026-10-05T00:28:08Z",
          "updated_at": "2026-10-06T00:59:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T12:36:16Z",
          "closed_at": "2026-10-05T12:36:16Z",
          "head_sha": "1a84d363fad75bf1692831054525bf6108ece414",
          "scope": "Enforces static Canvas component classes through the requested lint rule.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "alues or component APIs change.\r\n- Exercise the shipped ESLint configuration with regression probes for dynamic classes, complete conditional classes, forwarding, and the primitive override.\r\n\r\n## Issue Number\r\n\r\nCloses #17912\r\n\r\n## How to Test\r\n\r\nRun `npx vitest run __tests__/scripts/static-classes-lint.test.ts`: both tests pass. With the same tests on the base configuration, the first test fails because the expected two lint errors are missing. This verifies the policy actually recognizes Canvas imports.\r\n\r\nI also ran `npm run lint` (zero errors, 376 existing warnings"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17916"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17916,
          "title": "chore(lint): require static classes on Canvas UI components",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17916",
          "created_at": "2026-10-05T00:28:08Z",
          "updated_at": "2026-10-06T00:59:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T12:36:16Z",
          "closed_at": "2026-10-05T12:36:16Z",
          "head_sha": "1a84d363fad75bf1692831054525bf6108ece414",
          "scope": "Enforces static Canvas component classes through the requested lint rule.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "alues or component APIs change.\r\n- Exercise the shipped ESLint configuration with regression probes for dynamic classes, complete conditional classes, forwarding, and the primitive override.\r\n\r\n## Issue Number\r\n\r\nCloses #17912\r\n\r\n## How to Test\r\n\r\nRun `npx vitest run __tests__/scripts/static-classes-lint.test.ts`: both tests pass. With the same tests on the base configuration, the first test fails because the expected two lint errors are missing. This verifies the policy actually recognizes Canvas imports.\r\n\r\nI also ran `npm run lint` (zero errors, 376 existing warnings"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17916"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17916,
          "title": "chore(lint): require static classes on Canvas UI components",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17916",
          "created_at": "2026-10-05T00:28:08Z",
          "updated_at": "2026-10-06T00:59:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T12:36:16Z",
          "closed_at": "2026-10-05T12:36:16Z",
          "head_sha": "1a84d363fad75bf1692831054525bf6108ece414",
          "scope": "Enforces static Canvas component classes through the requested lint rule.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "alues or component APIs change.\r\n- Exercise the shipped ESLint configuration with regression probes for dynamic classes, complete conditional classes, forwarding, and the primitive override.\r\n\r\n## Issue Number\r\n\r\nCloses #17912\r\n\r\n## How to Test\r\n\r\nRun `npx vitest run __tests__/scripts/static-classes-lint.test.ts`: both tests pass. With the same tests on the base configuration, the first test fails because the expected two lint errors are missing. This verifies the policy actually recognizes Canvas imports.\r\n\r\nI also ran `npm run lint` (zero errors, 376 existing warnings"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17916"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17916,
          "title": "chore(lint): require static classes on Canvas UI components",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17916",
          "created_at": "2026-10-05T00:28:08Z",
          "updated_at": "2026-10-06T00:59:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T12:36:16Z",
          "closed_at": "2026-10-05T12:36:16Z",
          "head_sha": "1a84d363fad75bf1692831054525bf6108ece414",
          "scope": "Enforces static Canvas component classes through the requested lint rule.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "alues or component APIs change.\r\n- Exercise the shipped ESLint configuration with regression probes for dynamic classes, complete conditional classes, forwarding, and the primitive override.\r\n\r\n## Issue Number\r\n\r\nCloses #17912\r\n\r\n## How to Test\r\n\r\nRun `npx vitest run __tests__/scripts/static-classes-lint.test.ts`: both tests pass. With the same tests on the base configuration, the first test fails because the expected two lint errors are missing. This verifies the policy actually recognizes Canvas imports.\r\n\r\nI also ran `npm run lint` (zero errors, 376 existing warnings"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17916"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17916; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17913,
      "title": "[Bug]: Conversation header \"⋯\" menu overflows the screen at phone width and does not close on Escape",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17913",
      "created_at": "2026-10-05T00:25:23Z",
      "updated_at": "2026-10-06T01:16:34Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:16:34Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Clamps the conversation header menu on phone widths and closes it on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "in `conversation-name.test.tsx`. All three fail on main: the clamp expects `145px` and main gives `193px`, main calls `onClose` 0 times, and on main the menu is still in the DOM after Escape.\r\n\r\n## Issue Number\r\n\r\nFixes #17913\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, from `frontend/`:\r\n\r\n```bash\r\nnpx vitest run \\\r\n  __tests__/components/features/conversation/conversation-name-context-menu.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\r\n  __tests"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Clamps the conversation header menu on phone widths and closes it on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "in `conversation-name.test.tsx`. All three fail on main: the clamp expects `145px` and main gives `193px`, main calls `onClose` 0 times, and on main the menu is still in the DOM after Escape.\r\n\r\n## Issue Number\r\n\r\nFixes #17913\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, from `frontend/`:\r\n\r\n```bash\r\nnpx vitest run \\\r\n  __tests__/components/features/conversation/conversation-name-context-menu.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\r\n  __tests"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "s#17908: Command menu misses Model Router and Agent Context, and always shows ⌘K\n- OpenHands/OpenHands#17909: Screen-reader semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated\n- OpenHands/OpenHands#17913: Conversation header \"⋯\" menu overflows the screen at phone width and does not close on Escape\n- OpenHands/OpenHands#17914: \"Branch from here\" on a user message drops the message but leaves the new conversation's composer empty\n- OpenHands/OpenHands#17915: Stop/Delete conversation confirmation buttons render without their data-testid (BrandButton "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds Escape handling to other menus/popovers.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "wer and phone nav drawer so they share the same Escape stack. The composer + tools menu, the status-dot menu and the workspace tabs overflow menu have the same symptom (see the issue comment) and are left as follow-ups. #17913 (header ⋯ menu, handled in #18028), #17907 and #17908 are untouched.\n- **Other Escape listeners not on the stack yet:** `ModalBackdrop` modals and the settings actions menus keep their own listeners. Example: with the Overview Skills drawer and the add-skill modal open, one Escape closes both. `main` behaves the same way, so this is not a regressi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states #17913 is handled separately in #18028 and remains untouched here."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Clamps the conversation header menu on phone widths and closes it on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "in `conversation-name.test.tsx`. All three fail on main: the clamp expects `145px` and main gives `193px`, main calls `onClose` 0 times, and on main the menu is still in the DOM after Escape.\r\n\r\n## Issue Number\r\n\r\nFixes #17913\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, from `frontend/`:\r\n\r\n```bash\r\nnpx vitest run \\\r\n  __tests__/components/features/conversation/conversation-name-context-menu.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\r\n  __tests"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Clamps the conversation header menu on phone widths and closes it on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "in `conversation-name.test.tsx`. All three fail on main: the clamp expects `145px` and main gives `193px`, main calls `onClose` 0 times, and on main the menu is still in the DOM after Escape.\r\n\r\n## Issue Number\r\n\r\nFixes #17913\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, from `frontend/`:\r\n\r\n```bash\r\nnpx vitest run \\\r\n  __tests__/components/features/conversation/conversation-name-context-menu.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name.test.tsx \\\r\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\r\n  __tests"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18028; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17914,
      "title": "[Bug]: \"Branch from here\" on a user message drops the message but leaves the new conversation's composer empty",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17914",
      "created_at": "2026-10-05T00:25:36Z",
      "updated_at": "2026-10-06T00:05:55Z",
      "state": "closed",
      "closed_at": "2026-10-06T00:05:55Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18014,
          "title": "fix(chat): keep the message text in the composer after \"Branch from here\"",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18014",
          "created_at": "2026-10-05T20:31:51Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "closed_at": "2026-10-06T00:05:54Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Preserves the source user-message text as the new branch composer draft.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "submitted; it fails on `main`. The no-prefill cases (agent message, no parent, older agent-server that ignores `from_event_id`, image-only message) assert that no draft is saved for the fork.\r\n\r\n## Issue Number\r\n\r\nFixes #17914\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/chat/user-assistant-event-message.test.tsx   # 10/10; the prefill test fails on main\r\nnpx vitest run __tests__/hooks/use-draft-persistence.test.tsx\r\nnpx eslint src/components/conversation-events/chat/event-message-components/user-assistant-event-mess"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18014"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18014,
          "title": "fix(chat): keep the message text in the composer after \"Branch from here\"",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18014",
          "created_at": "2026-10-05T20:31:51Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "closed_at": "2026-10-06T00:05:54Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Preserves the source user-message text as the new branch composer draft.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "submitted; it fails on `main`. The no-prefill cases (agent message, no parent, older agent-server that ignores `from_event_id`, image-only message) assert that no draft is saved for the fork.\r\n\r\n## Issue Number\r\n\r\nFixes #17914\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/chat/user-assistant-event-message.test.tsx   # 10/10; the prefill test fails on main\r\nnpx vitest run __tests__/hooks/use-draft-persistence.test.tsx\r\nnpx eslint src/components/conversation-events/chat/event-message-components/user-assistant-event-mess"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18014"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " semantics: nested <main> in Settings, no aria-current on Customize, <html lang> never updated\n- OpenHands/OpenHands#17913: Conversation header \"⋯\" menu overflows the screen at phone width and does not close on Escape\n- OpenHands/OpenHands#17914: \"Branch from here\" on a user message drops the message but leaves the new conversation's composer empty\n- OpenHands/OpenHands#17915: Stop/Delete conversation confirmation buttons render without their data-testid (BrandButton expects testId)\n- OpenHands/OpenHands#17917: Model Router: choosing \"Don't create profiles\" snaps back to a provider connec"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18016,
          "title": "fix(skills): pre-fill the Home composer from Use skill and Create Automation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18016",
          "created_at": "2026-10-05T20:36:58Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "closed_at": "2026-10-06T00:00:14Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Prefills the Home composer for skill/automation launch.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "t behaves as before. These include `manifest-actions` `startConversation` and the recommended-automations launcher, both of which navigate to `/conversations/<id>`. Launch behavior on `/conversations/<id>` is covered by #17914.\r\n- `IMessageToSend.target` is optional because `messageRestoreIfEmpty` shares the type; a missing target means `\"conversation\"`.\r\n- Non-blocking remarks from the independent review, left as possible follow-ups:\r\n  - The launch text on Home is ephemeral until the user edits it. Applying it does not write the sessionStorage Home draft, so a remount"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18016"
            ]
          },
          "direct_closer": false,
          "reason": "The PR distinguishes conversation-route launch behavior tracked by #17914; it implements the separate Home issue."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18014,
          "title": "fix(chat): keep the message text in the composer after \"Branch from here\"",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18014",
          "created_at": "2026-10-05T20:31:51Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "closed_at": "2026-10-06T00:05:54Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Preserves the source user-message text as the new branch composer draft.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "submitted; it fails on `main`. The no-prefill cases (agent message, no parent, older agent-server that ignores `from_event_id`, image-only message) assert that no draft is saved for the fork.\r\n\r\n## Issue Number\r\n\r\nFixes #17914\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/chat/user-assistant-event-message.test.tsx   # 10/10; the prefill test fails on main\r\nnpx vitest run __tests__/hooks/use-draft-persistence.test.tsx\r\nnpx eslint src/components/conversation-events/chat/event-message-components/user-assistant-event-mess"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18014"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18014,
          "title": "fix(chat): keep the message text in the composer after \"Branch from here\"",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18014",
          "created_at": "2026-10-05T20:31:51Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "closed_at": "2026-10-06T00:05:54Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Preserves the source user-message text as the new branch composer draft.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "submitted; it fails on `main`. The no-prefill cases (agent message, no parent, older agent-server that ignores `from_event_id`, image-only message) assert that no draft is saved for the fork.\r\n\r\n## Issue Number\r\n\r\nFixes #17914\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/chat/user-assistant-event-message.test.tsx   # 10/10; the prefill test fails on main\r\nnpx vitest run __tests__/hooks/use-draft-persistence.test.tsx\r\nnpx eslint src/components/conversation-events/chat/event-message-components/user-assistant-event-mess"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18014"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18014; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17915,
      "title": "[Bug]: Stop/Delete conversation confirmation buttons render without their data-testid (BrandButton expects testId)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17915",
      "created_at": "2026-10-05T00:25:46Z",
      "updated_at": "2026-10-11T02:43:01Z",
      "state": "closed",
      "closed_at": "2026-10-11T02:43:01Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17983,
          "title": "fix(frontend): pass testId to Stop and Delete confirm buttons",
          "author": "drakeo338",
          "author_url": "https://github.com/drakeo338",
          "url": "https://github.com/OpenHands/OpenHands/pull/17983",
          "created_at": "2026-10-05T10:59:32Z",
          "updated_at": "2026-10-08T23:36:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T23:36:36Z",
          "head_sha": "bc6565b3e33ead4e541c20259a444b7080352e08",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " id.\n\n## Summary\n\n- Use `testId` for the cancel and confirm buttons in `confirm-stop-modal.tsx` and `confirm-delete-modal.tsx`.\n- Add component tests asserting both buttons expose their test ids.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\n`npx vitest run __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx`. On main the new tests fail (2 failed); with the change 5 pass. I did not run the full app.\n\n## Video/Screenshots\n\nNo screenshot: the change is a prop name and"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17983"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18140,
          "title": "fix: expose conversation confirmation test ids",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18140",
          "created_at": "2026-10-08T06:39:56Z",
          "updated_at": "2026-10-11T23:06:16Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:16Z",
          "head_sha": "d9d3823bf1213411959877c7757183d6fa606569",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ndButton` call sites from `data-testid` to `testId`\n- add component coverage for the Cancel and Confirm selectors in both dialogs\n- verify no `BrandButton` call site still passes the ignored prop\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\nnpx eslint src/components/features/conversation-panel/confirm-stop-modal.tsx src/components/features/conversation-panel/confirm-delete-modal.tsx __"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18140"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18151,
          "title": "fix(conversation-panel): pass testId to BrandButton in confirm modals",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18151",
          "created_at": "2026-10-08T11:26:02Z",
          "updated_at": "2026-10-12T15:07:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:42:59Z",
          "closed_at": "2026-10-11T02:43:00Z",
          "head_sha": "2cf8cbd891cd9f7939ffbaa462f7e5a804dfa6e0",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "it test in `confirm-delete-modal.test.tsx` verifying both test id attributes are rendered.\n- Added unit test suite in `confirm-stop-modal.test.tsx` verifying both test id attributes are rendered.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirm-buttons-testid\" src=\"https://github.com/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18151"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17983,
          "title": "fix(frontend): pass testId to Stop and Delete confirm buttons",
          "author": "drakeo338",
          "author_url": "https://github.com/drakeo338",
          "url": "https://github.com/OpenHands/OpenHands/pull/17983",
          "created_at": "2026-10-05T10:59:32Z",
          "updated_at": "2026-10-08T23:36:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T23:36:36Z",
          "head_sha": "bc6565b3e33ead4e541c20259a444b7080352e08",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " id.\n\n## Summary\n\n- Use `testId` for the cancel and confirm buttons in `confirm-stop-modal.tsx` and `confirm-delete-modal.tsx`.\n- Add component tests asserting both buttons expose their test ids.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\n`npx vitest run __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx`. On main the new tests fail (2 failed); with the change 5 pass. I did not run the full app.\n\n## Video/Screenshots\n\nNo screenshot: the change is a prop name and"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17983"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18140,
          "title": "fix: expose conversation confirmation test ids",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18140",
          "created_at": "2026-10-08T06:39:56Z",
          "updated_at": "2026-10-11T23:06:16Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:16Z",
          "head_sha": "d9d3823bf1213411959877c7757183d6fa606569",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ndButton` call sites from `data-testid` to `testId`\n- add component coverage for the Cancel and Confirm selectors in both dialogs\n- verify no `BrandButton` call site still passes the ignored prop\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\nnpx eslint src/components/features/conversation-panel/confirm-stop-modal.tsx src/components/features/conversation-panel/confirm-delete-modal.tsx __"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18140"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18151,
          "title": "fix(conversation-panel): pass testId to BrandButton in confirm modals",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18151",
          "created_at": "2026-10-08T11:26:02Z",
          "updated_at": "2026-10-12T15:07:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:42:59Z",
          "closed_at": "2026-10-11T02:43:00Z",
          "head_sha": "2cf8cbd891cd9f7939ffbaa462f7e5a804dfa6e0",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "it test in `confirm-delete-modal.test.tsx` verifying both test id attributes are rendered.\n- Added unit test suite in `confirm-stop-modal.test.tsx` verifying both test id attributes are rendered.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirm-buttons-testid\" src=\"https://github.com/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18151"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ion header \"⋯\" menu overflows the screen at phone width and does not close on Escape\n- OpenHands/OpenHands#17914: \"Branch from here\" on a user message drops the message but leaves the new conversation's composer empty\n- OpenHands/OpenHands#17915: Stop/Delete conversation confirmation buttons render without their data-testid (BrandButton expects testId)\n- OpenHands/OpenHands#17917: Model Router: choosing \"Don't create profiles\" snaps back to a provider connection, and Save creates 11 LLM profiles\n- OpenHands/OpenHands#17918: Model Router list heading and router names are invisible in light"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              " paths. Every fail row is a known open issue or one of the new defects below.\n\n## Closed issues re-driven\n\n- **Fixed and verified live; notes removed or rewritten:**\n  - #17915 (F04/F07 confirm-button test ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18151,
          "title": "fix(conversation-panel): pass testId to BrandButton in confirm modals",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18151",
          "created_at": "2026-10-08T11:26:02Z",
          "updated_at": "2026-10-12T15:07:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:42:59Z",
          "closed_at": "2026-10-11T02:43:00Z",
          "head_sha": "2cf8cbd891cd9f7939ffbaa462f7e5a804dfa6e0",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "it test in `confirm-delete-modal.test.tsx` verifying both test id attributes are rendered.\n- Added unit test suite in `confirm-stop-modal.test.tsx` verifying both test id attributes are rendered.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirm-buttons-testid\" src=\"https://github.com/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18151"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18151,
          "title": "fix(conversation-panel): pass testId to BrandButton in confirm modals",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18151",
          "created_at": "2026-10-08T11:26:02Z",
          "updated_at": "2026-10-12T15:07:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:42:59Z",
          "closed_at": "2026-10-11T02:43:00Z",
          "head_sha": "2cf8cbd891cd9f7939ffbaa462f7e5a804dfa6e0",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "it test in `confirm-delete-modal.test.tsx` verifying both test id attributes are rendered.\n- Added unit test suite in `confirm-stop-modal.test.tsx` verifying both test id attributes are rendered.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirm-buttons-testid\" src=\"https://github.com/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18151"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17983,
          "title": "fix(frontend): pass testId to Stop and Delete confirm buttons",
          "author": "drakeo338",
          "author_url": "https://github.com/drakeo338",
          "url": "https://github.com/OpenHands/OpenHands/pull/17983",
          "created_at": "2026-10-05T10:59:32Z",
          "updated_at": "2026-10-08T23:36:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T23:36:36Z",
          "head_sha": "bc6565b3e33ead4e541c20259a444b7080352e08",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " id.\n\n## Summary\n\n- Use `testId` for the cancel and confirm buttons in `confirm-stop-modal.tsx` and `confirm-delete-modal.tsx`.\n- Add component tests asserting both buttons expose their test ids.\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\n`npx vitest run __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx`. On main the new tests fail (2 failed); with the change 5 pass. I did not run the full app.\n\n## Video/Screenshots\n\nNo screenshot: the change is a prop name and"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17983"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18140,
          "title": "fix: expose conversation confirmation test ids",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18140",
          "created_at": "2026-10-08T06:39:56Z",
          "updated_at": "2026-10-11T23:06:16Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:16Z",
          "head_sha": "d9d3823bf1213411959877c7757183d6fa606569",
          "scope": "Passes the supported testId prop to Stop/Delete confirmation buttons.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ndButton` call sites from `data-testid` to `testId`\n- add component coverage for the Cancel and Confirm selectors in both dialogs\n- verify no `BrandButton` call site still passes the ignored prop\n\n## Issue Number\n\nFixes #17915\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/confirm-delete-modal.test.tsx __tests__/components/features/conversation-panel/confirm-stop-modal.test.tsx\nnpx eslint src/components/features/conversation-panel/confirm-stop-modal.tsx src/components/features/conversation-panel/confirm-delete-modal.tsx __"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18140"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18151; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17917,
      "title": "[Bug]: Model Router: choosing \"Don't create profiles\" snaps back to a provider connection, and Save creates 11 LLM profiles",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17917",
      "created_at": "2026-10-05T01:10:39Z",
      "updated_at": "2026-10-05T23:26:55Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:26:55Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18020,
          "title": "fix(settings): keep \"Don't create profiles\" for router templates",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18020",
          "created_at": "2026-10-05T20:51:08Z",
          "updated_at": "2026-10-06T05:45:34Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:26:53Z",
          "closed_at": "2026-10-05T23:26:53Z",
          "head_sha": "607d81faa6ea78788923b414824139f3737956e6",
          "scope": "Preserves an explicit Do not create profiles choice for Model Router templates.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "k to the template default only until the user picks. This removes the effect.\r\n- Add tests for an explicit \"Don't create profiles\" choice and for connections that load after the editor opens.\r\n\r\n## Issue Number\r\n\r\nFixes #17917\r\n\r\n## How to Test\r\n\r\n1. Start a local stack with `npm run dev -- --static`, add a provider connection, then open Settings > Model Router > Add Model Router > Add OpenHands Router Flash.\r\n2. Pick \"Don't create profiles\" and Save.\r\n3. On main the picker returns to the connection and `GET /api/profiles` goes from 0 to 11 (starting with no profiles). "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18020"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18020,
          "title": "fix(settings): keep \"Don't create profiles\" for router templates",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18020",
          "created_at": "2026-10-05T20:51:08Z",
          "updated_at": "2026-10-06T05:45:34Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:26:53Z",
          "closed_at": "2026-10-05T23:26:53Z",
          "head_sha": "607d81faa6ea78788923b414824139f3737956e6",
          "scope": "Preserves an explicit Do not create profiles choice for Model Router templates.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "k to the template default only until the user picks. This removes the effect.\r\n- Add tests for an explicit \"Don't create profiles\" choice and for connections that load after the editor opens.\r\n\r\n## Issue Number\r\n\r\nFixes #17917\r\n\r\n## How to Test\r\n\r\n1. Start a local stack with `npm run dev -- --static`, add a provider connection, then open Settings > Model Router > Add Model Router > Add OpenHands Router Flash.\r\n2. Pick \"Don't create profiles\" and Save.\r\n3. On main the picker returns to the connection and `GET /api/profiles` goes from 0 to 11 (starting with no profiles). "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18020"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "is branch and the map is updated so those recipes expect the fixed behavior. Each changed recipe is re-run live on a fresh stack and checked by a second agent.\n  - fdeeb5e2a: #18008 (#17903), #18012 (#17909) and #18020 (#17917).\n  - b1b62413a: #18009, #18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#1",
              " user message drops the message but leaves the new conversation's composer empty\n- OpenHands/OpenHands#17915: Stop/Delete conversation confirmation buttons render without their data-testid (BrandButton expects testId)\n- OpenHands/OpenHands#17917: Model Router: choosing \"Don't create profiles\" snaps back to a provider connection, and Save creates 11 LLM profiles\n- OpenHands/OpenHands#17918: Model Router list heading and router names are invisible in light color themes\n- OpenHands/OpenHands#17919: \"Delete all\" conversations deletes only the loaded first page and states a smaller count\n- Ope"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18020,
          "title": "fix(settings): keep \"Don't create profiles\" for router templates",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18020",
          "created_at": "2026-10-05T20:51:08Z",
          "updated_at": "2026-10-06T05:45:34Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:26:53Z",
          "closed_at": "2026-10-05T23:26:53Z",
          "head_sha": "607d81faa6ea78788923b414824139f3737956e6",
          "scope": "Preserves an explicit Do not create profiles choice for Model Router templates.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "k to the template default only until the user picks. This removes the effect.\r\n- Add tests for an explicit \"Don't create profiles\" choice and for connections that load after the editor opens.\r\n\r\n## Issue Number\r\n\r\nFixes #17917\r\n\r\n## How to Test\r\n\r\n1. Start a local stack with `npm run dev -- --static`, add a provider connection, then open Settings > Model Router > Add Model Router > Add OpenHands Router Flash.\r\n2. Pick \"Don't create profiles\" and Save.\r\n3. On main the picker returns to the connection and `GET /api/profiles` goes from 0 to 11 (starting with no profiles). "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18020"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18020,
          "title": "fix(settings): keep \"Don't create profiles\" for router templates",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18020",
          "created_at": "2026-10-05T20:51:08Z",
          "updated_at": "2026-10-06T05:45:34Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:26:53Z",
          "closed_at": "2026-10-05T23:26:53Z",
          "head_sha": "607d81faa6ea78788923b414824139f3737956e6",
          "scope": "Preserves an explicit Do not create profiles choice for Model Router templates.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "k to the template default only until the user picks. This removes the effect.\r\n- Add tests for an explicit \"Don't create profiles\" choice and for connections that load after the editor opens.\r\n\r\n## Issue Number\r\n\r\nFixes #17917\r\n\r\n## How to Test\r\n\r\n1. Start a local stack with `npm run dev -- --static`, add a provider connection, then open Settings > Model Router > Add Model Router > Add OpenHands Router Flash.\r\n2. Pick \"Don't create profiles\" and Save.\r\n3. On main the picker returns to the connection and `GET /api/profiles` goes from 0 to 11 (starting with no profiles). "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18020"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18020; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17918,
      "title": "[Bug]: Model Router list heading and router names are invisible in light color themes",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17918",
      "created_at": "2026-10-05T01:11:29Z",
      "updated_at": "2026-10-05T23:54:17Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:54:17Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18013,
          "title": "fix(settings): use theme contrast ink for Model Router list text",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18013",
          "created_at": "2026-10-05T20:31:21Z",
          "updated_at": "2026-10-06T00:58:06Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:54:16Z",
          "closed_at": "2026-10-05T23:54:16Z",
          "head_sha": "d59aaad10760850037eef18f0baf61101e081481",
          "scope": "Uses theme contrast ink for Model Router headings and names in light themes.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " test asserting the heading and a router name carry `text-contrast` and not `text-white`. It fails on the old code.\r\n- Added before/after screenshots and computed-color captures under `.pr/`.\r\n\r\n## Issue Number\r\n\r\nFixes #17918\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/components/settings/meta-llm-profiles/`: 3 files, 43 tests passed. The new test fails on main (the heading's classes were `text-base font-medium text-white`).\r\n- `npx eslint` and `npx prettier --check` on the three changed files: no new problems. The only prettier/eslint erro",
              "d-color pill. No `text-white` remains in `meta-llm-profiles/`.\r\n- Follow-up: once this merges, the verify-openhands feature map in #17961 should drop the \"Known failure\" note under `F12.light-theme` and the \"Known issue #17918\" line.\r\n- Reviewer remark (non-blocking): the unit test checks class names, not rendered color, because jsdom can't resolve Tailwind theme tokens. The live computed-color checks above cover the actual behavior. A later Playwright light-theme assertion could cover it end to end.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\nh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18013"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18013,
          "title": "fix(settings): use theme contrast ink for Model Router list text",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18013",
          "created_at": "2026-10-05T20:31:21Z",
          "updated_at": "2026-10-06T00:58:06Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:54:16Z",
          "closed_at": "2026-10-05T23:54:16Z",
          "head_sha": "d59aaad10760850037eef18f0baf61101e081481",
          "scope": "Uses theme contrast ink for Model Router headings and names in light themes.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " test asserting the heading and a router name carry `text-contrast` and not `text-white`. It fails on the old code.\r\n- Added before/after screenshots and computed-color captures under `.pr/`.\r\n\r\n## Issue Number\r\n\r\nFixes #17918\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/components/settings/meta-llm-profiles/`: 3 files, 43 tests passed. The new test fails on main (the heading's classes were `text-base font-medium text-white`).\r\n- `npx eslint` and `npx prettier --check` on the three changed files: no new problems. The only prettier/eslint erro",
              "d-color pill. No `text-white` remains in `meta-llm-profiles/`.\r\n- Follow-up: once this merges, the verify-openhands feature map in #17961 should drop the \"Known failure\" note under `F12.light-theme` and the \"Known issue #17918\" line.\r\n- Reviewer remark (non-blocking): the unit test checks class names, not rendered color, because jsdom can't resolve Tailwind theme tokens. The live computed-color checks above cover the actual behavior. A later Playwright light-theme assertion could cover it end to end.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\nh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18013"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n buttons render without their data-testid (BrandButton expects testId)\n- OpenHands/OpenHands#17917: Model Router: choosing \"Don't create profiles\" snaps back to a provider connection, and Save creates 11 LLM profiles\n- OpenHands/OpenHands#17918: Model Router list heading and router names are invisible in light color themes\n- OpenHands/OpenHands#17919: \"Delete all\" conversations deletes only the loaded first page and states a smaller count\n- OpenHands/OpenHands#17920: A rejected (Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle\n- Ope"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18013,
          "title": "fix(settings): use theme contrast ink for Model Router list text",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18013",
          "created_at": "2026-10-05T20:31:21Z",
          "updated_at": "2026-10-06T00:58:06Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:54:16Z",
          "closed_at": "2026-10-05T23:54:16Z",
          "head_sha": "d59aaad10760850037eef18f0baf61101e081481",
          "scope": "Uses theme contrast ink for Model Router headings and names in light themes.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " test asserting the heading and a router name carry `text-contrast` and not `text-white`. It fails on the old code.\r\n- Added before/after screenshots and computed-color captures under `.pr/`.\r\n\r\n## Issue Number\r\n\r\nFixes #17918\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/components/settings/meta-llm-profiles/`: 3 files, 43 tests passed. The new test fails on main (the heading's classes were `text-base font-medium text-white`).\r\n- `npx eslint` and `npx prettier --check` on the three changed files: no new problems. The only prettier/eslint erro",
              "d-color pill. No `text-white` remains in `meta-llm-profiles/`.\r\n- Follow-up: once this merges, the verify-openhands feature map in #17961 should drop the \"Known failure\" note under `F12.light-theme` and the \"Known issue #17918\" line.\r\n- Reviewer remark (non-blocking): the unit test checks class names, not rendered color, because jsdom can't resolve Tailwind theme tokens. The live computed-color checks above cover the actual behavior. A later Playwright light-theme assertion could cover it end to end.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\nh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18013"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18013,
          "title": "fix(settings): use theme contrast ink for Model Router list text",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18013",
          "created_at": "2026-10-05T20:31:21Z",
          "updated_at": "2026-10-06T00:58:06Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:54:16Z",
          "closed_at": "2026-10-05T23:54:16Z",
          "head_sha": "d59aaad10760850037eef18f0baf61101e081481",
          "scope": "Uses theme contrast ink for Model Router headings and names in light themes.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " test asserting the heading and a router name carry `text-contrast` and not `text-white`. It fails on the old code.\r\n- Added before/after screenshots and computed-color captures under `.pr/`.\r\n\r\n## Issue Number\r\n\r\nFixes #17918\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n- `npx vitest run __tests__/components/settings/meta-llm-profiles/`: 3 files, 43 tests passed. The new test fails on main (the heading's classes were `text-base font-medium text-white`).\r\n- `npx eslint` and `npx prettier --check` on the three changed files: no new problems. The only prettier/eslint erro",
              "d-color pill. No `text-white` remains in `meta-llm-profiles/`.\r\n- Follow-up: once this merges, the verify-openhands feature map in #17961 should drop the \"Known failure\" note under `F12.light-theme` and the \"Known issue #17918\" line.\r\n- Reviewer remark (non-blocking): the unit test checks class names, not rendered color, because jsdom can't resolve Tailwind theme tokens. The live computed-color checks above cover the actual behavior. A later Playwright light-theme assertion could cover it end to end.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\nh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18013"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18013; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17919,
      "title": "[Bug]: \"Delete all\" conversations deletes only the loaded first page and states a smaller count",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17919",
      "created_at": "2026-10-05T01:11:44Z",
      "updated_at": "2026-10-13T05:39:31Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18367"
            ]
          },
          "number": 18367,
          "title": "fix(conversations): delete all pages with one captured backend scope",
          "url": "https://github.com/OpenHands/OpenHands/pull/18367",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T05:38:58Z",
          "updated_at": "2026-10-14T04:32:20Z",
          "head_sha": "2a11ea84c815cbdf4c0f3ecbec1768c43331abc5",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18367"
            ]
          },
          "number": 18367,
          "title": "fix(conversations): delete all pages with one captured backend scope",
          "url": "https://github.com/OpenHands/OpenHands/pull/18367",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T05:38:58Z",
          "updated_at": "2026-10-14T04:32:20Z",
          "head_sha": "2a11ea84c815cbdf4c0f3ecbec1768c43331abc5",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "outer: choosing \"Don't create profiles\" snaps back to a provider connection, and Save creates 11 LLM profiles\n- OpenHands/OpenHands#17918: Model Router list heading and router names are invisible in light color themes\n- OpenHands/OpenHands#17919: \"Delete all\" conversations deletes only the loaded first page and states a smaller count\n- OpenHands/OpenHands#17920: A rejected (Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle\n- OpenHands/OpenHands#17921: Files tab keeps showing stale file content after Refresh (and even after a reload)\n-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18213,
          "title": "docs: record 2026-10-09 verify-openhands sweep",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18213",
          "created_at": "2026-10-09T02:08:48Z",
          "updated_at": "2026-10-11T21:50:56Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T21:50:56Z",
          "head_sha": "4b2f3b0597951ac5902fd568ed65ba960f92f2d9",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ked. It was partial, so it must not advance the accepted maintenance baseline.\n\n## Summary\n\n- Record the frozen target, comparison interval, agentic run method, per-ID coverage, blockers, issue triage (including a fresh #17919 Delete all repro), and cleanup in `references/run-history.md`, with one row for each merged PR in the linked intent appendix.\n- Link the 2026-10-09 full-sweep attempt from the feature-map index while leaving the 2026-10-06 accepted baseline unchanged.\n- Correct the current F01 bootstrap, F03 automation-outage, F04 download-error, F07 Available Too"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18213"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18367"
            ]
          },
          "number": 18367,
          "title": "fix(conversations): delete all pages with one captured backend scope",
          "url": "https://github.com/OpenHands/OpenHands/pull/18367",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T05:38:58Z",
          "updated_at": "2026-10-14T04:32:20Z",
          "head_sha": "2a11ea84c815cbdf4c0f3ecbec1768c43331abc5",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17920,
      "title": "[Bug]: A rejected (Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17920",
      "created_at": "2026-10-05T01:12:00Z",
      "updated_at": "2026-10-12T05:05:43Z",
      "state": "closed",
      "closed_at": "2026-10-12T04:59:30Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17995,
          "title": "fix: resolve rejected and errored actions in event groups",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17995",
          "created_at": "2026-10-05T15:35:59Z",
          "updated_at": "2026-10-12T15:07:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:59:29Z",
          "closed_at": "2026-10-12T04:59:29Z",
          "head_sha": "e501b48c5bb489c624e52798f91dcc78d74f805b",
          "scope": "Resolves rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ed (`2 actions completed`), which the issue's acceptance criteria allow (`N/N`). A separate \"k completed, 1 rejected\" count would need new plural copy in 15 locales; happy to add it if preferred.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nAutomated (all run locally on this branch):\n\n- `npm run lint` — 0 errors (pre-existing warnings only)\n- `node scripts/check-translation-completeness.cjs` — passes\n- `npm run build` — passes\n- `npm test` — the full run had one failure outside this change: `__tests__/scripts/dev-with-automation.test.ts > cleans up detached services "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17995"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18247,
          "title": "fix(chat): resolve event group status for rejected and errored actions",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18247",
          "created_at": "2026-10-09T17:32:17Z",
          "updated_at": "2026-10-12T09:22:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "545da063406da7e90a41a360149f7f31430b9f93",
          "scope": "Proposes resolving rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "o the message branch and threw a TypeError because it lacked `llm_message.content`. A related issue occurred when actions failed with `AgentErrorEvent`, leaving actions counted as uncompleted in the group summary (issue #17920).\n\n## Summary\n\n- **Type Guards**:\n  - Exported `isUserRejectObservation` in `src/types/agent-server/type-guards.ts` checking `source === \"environment\"`, `action_id`, and `rejection_reason`.\n- **UI Event Processing**:\n  - Updated `handleEventForUI` in `src/utils/handle-event-for-ui.ts` to replace the corresponding `ActionEvent` when receiving eithe",
              "ted count for rejected actions.\n    - `EventGroup` spinner removal for actions resolved by `AgentErrorEvent` in `allEvents`.\n    - Distinct rejected marker rendering inside expanded event groups.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nRun the new and updated test suites:\n```bash\nnpm test -- __tests__/components/conversation-events/chat/rejected-grouped-action.test.tsx __tests__/utils/handle-event-for-ui.test.ts __tests__/components/conversation-events/chat/event-message-components/event-group.test.tsx\n```\n\nAll 39 tests pass cleanly:\n```text\n Test Files  3 passe"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18247"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17995,
          "title": "fix: resolve rejected and errored actions in event groups",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17995",
          "created_at": "2026-10-05T15:35:59Z",
          "updated_at": "2026-10-12T15:07:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:59:29Z",
          "closed_at": "2026-10-12T04:59:29Z",
          "head_sha": "e501b48c5bb489c624e52798f91dcc78d74f805b",
          "scope": "Resolves rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ed (`2 actions completed`), which the issue's acceptance criteria allow (`N/N`). A separate \"k completed, 1 rejected\" count would need new plural copy in 15 locales; happy to add it if preferred.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nAutomated (all run locally on this branch):\n\n- `npm run lint` — 0 errors (pre-existing warnings only)\n- `node scripts/check-translation-completeness.cjs` — passes\n- `npm run build` — passes\n- `npm test` — the full run had one failure outside this change: `__tests__/scripts/dev-with-automation.test.ts > cleans up detached services "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17995"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18247,
          "title": "fix(chat): resolve event group status for rejected and errored actions",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18247",
          "created_at": "2026-10-09T17:32:17Z",
          "updated_at": "2026-10-12T09:22:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "545da063406da7e90a41a360149f7f31430b9f93",
          "scope": "Proposes resolving rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "o the message branch and threw a TypeError because it lacked `llm_message.content`. A related issue occurred when actions failed with `AgentErrorEvent`, leaving actions counted as uncompleted in the group summary (issue #17920).\n\n## Summary\n\n- **Type Guards**:\n  - Exported `isUserRejectObservation` in `src/types/agent-server/type-guards.ts` checking `source === \"environment\"`, `action_id`, and `rejection_reason`.\n- **UI Event Processing**:\n  - Updated `handleEventForUI` in `src/utils/handle-event-for-ui.ts` to replace the corresponding `ActionEvent` when receiving eithe",
              "ted count for rejected actions.\n    - `EventGroup` spinner removal for actions resolved by `AgentErrorEvent` in `allEvents`.\n    - Distinct rejected marker rendering inside expanded event groups.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nRun the new and updated test suites:\n```bash\nnpm test -- __tests__/components/conversation-events/chat/rejected-grouped-action.test.tsx __tests__/utils/handle-event-for-ui.test.ts __tests__/components/conversation-events/chat/event-message-components/event-group.test.tsx\n```\n\nAll 39 tests pass cleanly:\n```text\n Test Files  3 passe"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18247"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nds/OpenHands#17918: Model Router list heading and router names are invisible in light color themes\n- OpenHands/OpenHands#17919: \"Delete all\" conversations deletes only the loaded first page and states a smaller count\n- OpenHands/OpenHands#17920: A rejected (Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle\n- OpenHands/OpenHands#17921: Files tab keeps showing stale file content after Refresh (and even after a reload)\n- OpenHands/OpenHands#17922: MCP library lists entries that cannot be installed on a local backend; their install dialo"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "or one of the new defects below.\n\n## Closed issues re-driven\n\n- **Fixed and verified live; notes removed or rewritten:**\n  - #17915 (F04/F07 confirm-button test ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n",
              "8ba/.pr/map-maintenance/2026-10-13/F05.draft-persistence-fast-switch.png)```\n- F06.confirmation-mode: after Cancel and a reload, the group shows Rejected and no spinner (#17920 fixed).\n  ![F06 mode](````https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F06.confirmation-mode-after-reload.png)````\n- F"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17995,
          "title": "fix: resolve rejected and errored actions in event groups",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17995",
          "created_at": "2026-10-05T15:35:59Z",
          "updated_at": "2026-10-12T15:07:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:59:29Z",
          "closed_at": "2026-10-12T04:59:29Z",
          "head_sha": "e501b48c5bb489c624e52798f91dcc78d74f805b",
          "scope": "Resolves rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ed (`2 actions completed`), which the issue's acceptance criteria allow (`N/N`). A separate \"k completed, 1 rejected\" count would need new plural copy in 15 locales; happy to add it if preferred.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nAutomated (all run locally on this branch):\n\n- `npm run lint` — 0 errors (pre-existing warnings only)\n- `node scripts/check-translation-completeness.cjs` — passes\n- `npm run build` — passes\n- `npm test` — the full run had one failure outside this change: `__tests__/scripts/dev-with-automation.test.ts > cleans up detached services "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17995"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18247,
          "title": "fix(chat): resolve event group status for rejected and errored actions",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18247",
          "created_at": "2026-10-09T17:32:17Z",
          "updated_at": "2026-10-12T09:22:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "545da063406da7e90a41a360149f7f31430b9f93",
          "scope": "Proposes resolving rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "o the message branch and threw a TypeError because it lacked `llm_message.content`. A related issue occurred when actions failed with `AgentErrorEvent`, leaving actions counted as uncompleted in the group summary (issue #17920).\n\n## Summary\n\n- **Type Guards**:\n  - Exported `isUserRejectObservation` in `src/types/agent-server/type-guards.ts` checking `source === \"environment\"`, `action_id`, and `rejection_reason`.\n- **UI Event Processing**:\n  - Updated `handleEventForUI` in `src/utils/handle-event-for-ui.ts` to replace the corresponding `ActionEvent` when receiving eithe",
              "ted count for rejected actions.\n    - `EventGroup` spinner removal for actions resolved by `AgentErrorEvent` in `allEvents`.\n    - Distinct rejected marker rendering inside expanded event groups.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nRun the new and updated test suites:\n```bash\nnpm test -- __tests__/components/conversation-events/chat/rejected-grouped-action.test.tsx __tests__/utils/handle-event-for-ui.test.ts __tests__/components/conversation-events/chat/event-message-components/event-group.test.tsx\n```\n\nAll 39 tests pass cleanly:\n```text\n Test Files  3 passe"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18247"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17995,
          "title": "fix: resolve rejected and errored actions in event groups",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17995",
          "created_at": "2026-10-05T15:35:59Z",
          "updated_at": "2026-10-12T15:07:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:59:29Z",
          "closed_at": "2026-10-12T04:59:29Z",
          "head_sha": "e501b48c5bb489c624e52798f91dcc78d74f805b",
          "scope": "Resolves rejected and errored actions in event groups instead of leaving a spinner after idle.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ed (`2 actions completed`), which the issue's acceptance criteria allow (`N/N`). A separate \"k completed, 1 rejected\" count would need new plural copy in 15 locales; happy to add it if preferred.\n\n## Issue Number\n\nFixes #17920\n\n## How to Test\n\nAutomated (all run locally on this branch):\n\n- `npm run lint` — 0 errors (pre-existing warnings only)\n- `node scripts/check-translation-completeness.cjs` — passes\n- `npm run build` — passes\n- `npm test` — the full run had one failure outside this change: `__tests__/scripts/dev-with-automation.test.ts > cleans up detached services "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17995"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17995; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17921,
      "title": "[Bug]: Files tab keeps showing stale file content after Refresh (and even after a reload)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17921",
      "created_at": "2026-10-05T01:12:16Z",
      "updated_at": "2026-10-06T05:26:17Z",
      "state": "closed",
      "closed_at": "2026-10-06T05:26:17Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18032,
          "title": "fix(files): show the current file body after Refresh and reload",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18032",
          "created_at": "2026-10-05T21:20:40Z",
          "updated_at": "2026-10-08T20:38:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:26:15Z",
          "closed_at": "2026-10-06T05:26:15Z",
          "head_sha": "8b9ffd52b9b9a5b6fbcb29252d92f102f49a6960",
          "scope": "Revalidates workspace file content after Refresh and reload instead of reusing stale HTTP cache.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ter a page reload, for both the text preview and the rich HTML/image preview.\n\n## Why\n\nWhen a file open in the Files tab changed on disk, the tab kept showing the old content after Refresh, and even after a full reload (#17921).\n\nRoot cause: the Agent Server's workspace fileserver sends `Last-Modified` and `ETag` but no `Cache-Control`, so Chromium applies heuristic freshness (about 10% of the file's age) and answers repeat requests from its HTTP cache.\n- Text preview: `useWorkspaceFileContent` fetched with the default cache mode, so React Query's refetch got the cached",
              "t invalidation is removed, since it only caused a duplicate request.\n- The counter starts at the page-load time instead of 0, so a reload never rebuilds a `?v=` URL cached during an earlier load.\n\n## Issue Number\n\nFixes #17921\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/query/use-workspace-file-content.test.tsx __tests__/routes/files-tab.test.tsx __tests__/stores/use-workspace-mutation-counter.test.ts __tests__/components/features/files-tab __tests__/hooks/use-auto-refresh-files-on-edit.test.tsx\nnpm run lint\n```\n\n- On the fixed code: 8 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18032"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18032,
          "title": "fix(files): show the current file body after Refresh and reload",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18032",
          "created_at": "2026-10-05T21:20:40Z",
          "updated_at": "2026-10-08T20:38:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:26:15Z",
          "closed_at": "2026-10-06T05:26:15Z",
          "head_sha": "8b9ffd52b9b9a5b6fbcb29252d92f102f49a6960",
          "scope": "Revalidates workspace file content after Refresh and reload instead of reusing stale HTTP cache.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ter a page reload, for both the text preview and the rich HTML/image preview.\n\n## Why\n\nWhen a file open in the Files tab changed on disk, the tab kept showing the old content after Refresh, and even after a full reload (#17921).\n\nRoot cause: the Agent Server's workspace fileserver sends `Last-Modified` and `ETag` but no `Cache-Control`, so Chromium applies heuristic freshness (about 10% of the file's age) and answers repeat requests from its HTTP cache.\n- Text preview: `useWorkspaceFileContent` fetched with the default cache mode, so React Query's refetch got the cached",
              "t invalidation is removed, since it only caused a duplicate request.\n- The counter starts at the page-load time instead of 0, so a reload never rebuilds a `?v=` URL cached during an earlier load.\n\n## Issue Number\n\nFixes #17921\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/query/use-workspace-file-content.test.tsx __tests__/routes/files-tab.test.tsx __tests__/stores/use-workspace-mutation-counter.test.ts __tests__/components/features/files-tab __tests__/hooks/use-auto-refresh-files-on-edit.test.tsx\nnpm run lint\n```\n\n- On the fixed code: 8 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18032"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17827,
          "title": "feat(chat): outline Word, Excel and PowerPoint artifacts inline",
          "author": "analisaperlengkapan",
          "author_url": "https://github.com/analisaperlengkapan",
          "url": "https://github.com/OpenHands/OpenHands/pull/17827",
          "created_at": "2026-09-30T15:05:08Z",
          "updated_at": "2026-10-11T22:16:36Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "02df10ef3e1fcf4dd29d8bf6ec3dcf1998dc2bbc",
          "scope": "Adds OOXML artifact previews and adopts canonical main revalidation while rebasing.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " for an oversized HTML file in rich mode\").\r\n- **Staleness realignment.** The rebase onto the sibling branch tip adopts the\r\n  canonical `fetch(staticUrl, { credentials: \"include\", cache: \"no-cache\" })`\r\n  revalidation (#17921) and drops the branch's older `?v=` cache-buster, so the hook\r\n  matches `main`.\r\n- **Live backend evidence** — captured above.\r\n\r\n\r\n### Checks\r\n\r\n- `npx vitest run` → **796 files, 8563 passed | 7 todo**.\r\n- `npm run lint` → clean.\r\n- `npm run typecheck` → clean.\r\n\r\n## Why\r\n\r\nOnly Markdown gets a rich inline preview today. The sibling PR adds HTML"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17827"
            ]
          },
          "direct_closer": false,
          "reason": "The #17921 text describes inheriting the existing canonical fix, not an independent file-staleness fix proposal."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "#18011, #18013–#18019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **C",
              "ersations deletes only the loaded first page and states a smaller count\n- OpenHands/OpenHands#17920: A rejected (Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle\n- OpenHands/OpenHands#17921: Files tab keeps showing stale file content after Refresh (and even after a reload)\n- OpenHands/OpenHands#17922: MCP library lists entries that cannot be installed on a local backend; their install dialog is empty and Install does nothing\n- OpenHands/OpenHands#17923: Skills \"Use skill\" opens Home with an empty composer instead of pre-filling the s"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18032,
          "title": "fix(files): show the current file body after Refresh and reload",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18032",
          "created_at": "2026-10-05T21:20:40Z",
          "updated_at": "2026-10-08T20:38:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:26:15Z",
          "closed_at": "2026-10-06T05:26:15Z",
          "head_sha": "8b9ffd52b9b9a5b6fbcb29252d92f102f49a6960",
          "scope": "Revalidates workspace file content after Refresh and reload instead of reusing stale HTTP cache.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ter a page reload, for both the text preview and the rich HTML/image preview.\n\n## Why\n\nWhen a file open in the Files tab changed on disk, the tab kept showing the old content after Refresh, and even after a full reload (#17921).\n\nRoot cause: the Agent Server's workspace fileserver sends `Last-Modified` and `ETag` but no `Cache-Control`, so Chromium applies heuristic freshness (about 10% of the file's age) and answers repeat requests from its HTTP cache.\n- Text preview: `useWorkspaceFileContent` fetched with the default cache mode, so React Query's refetch got the cached",
              "t invalidation is removed, since it only caused a duplicate request.\n- The counter starts at the page-load time instead of 0, so a reload never rebuilds a `?v=` URL cached during an earlier load.\n\n## Issue Number\n\nFixes #17921\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/query/use-workspace-file-content.test.tsx __tests__/routes/files-tab.test.tsx __tests__/stores/use-workspace-mutation-counter.test.ts __tests__/components/features/files-tab __tests__/hooks/use-auto-refresh-files-on-edit.test.tsx\nnpm run lint\n```\n\n- On the fixed code: 8 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18032"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18032,
          "title": "fix(files): show the current file body after Refresh and reload",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18032",
          "created_at": "2026-10-05T21:20:40Z",
          "updated_at": "2026-10-08T20:38:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:26:15Z",
          "closed_at": "2026-10-06T05:26:15Z",
          "head_sha": "8b9ffd52b9b9a5b6fbcb29252d92f102f49a6960",
          "scope": "Revalidates workspace file content after Refresh and reload instead of reusing stale HTTP cache.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ter a page reload, for both the text preview and the rich HTML/image preview.\n\n## Why\n\nWhen a file open in the Files tab changed on disk, the tab kept showing the old content after Refresh, and even after a full reload (#17921).\n\nRoot cause: the Agent Server's workspace fileserver sends `Last-Modified` and `ETag` but no `Cache-Control`, so Chromium applies heuristic freshness (about 10% of the file's age) and answers repeat requests from its HTTP cache.\n- Text preview: `useWorkspaceFileContent` fetched with the default cache mode, so React Query's refetch got the cached",
              "t invalidation is removed, since it only caused a duplicate request.\n- The counter starts at the page-load time instead of 0, so a reload never rebuilds a `?v=` URL cached during an earlier load.\n\n## Issue Number\n\nFixes #17921\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/hooks/query/use-workspace-file-content.test.tsx __tests__/routes/files-tab.test.tsx __tests__/stores/use-workspace-mutation-counter.test.ts __tests__/components/features/files-tab __tests__/hooks/use-auto-refresh-files-on-edit.test.tsx\nnpm run lint\n```\n\n- On the fixed code: 8 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18032"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18032; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17922,
      "title": "[Bug]: MCP library lists entries that cannot be installed on a local backend; their install dialog is empty and Install does nothing",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17922",
      "created_at": "2026-10-05T01:12:33Z",
      "updated_at": "2026-10-12T05:05:42Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18289,
          "title": "fix(mcp): filter marketplace catalog by installable connection options",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18289",
          "created_at": "2026-10-11T16:14:08Z",
          "updated_at": "2026-10-11T16:16:40Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5d35a0b16231f72907f844af4a9a3d32e8a0f964",
          "scope": "Filters MCP marketplace entries to locally installable connection options.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ed test cases confirming that entries lacking locally installable options (such as Sentry) return false for `isMcpInstallableEntry` and are excluded from `getMcpMarketplaceCatalog`.\n\n## Issue Number\n\nFixes #17959, Fixes #17922\n\n## How to Test\n\nRun the MCP marketplace utils test suite:\n```bash\nnpm test -- __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\nRun typecheck:\n```bash\nnpm run typecheck\n```\n\nRun linter:\n```bash\nnpx eslint src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"mcp-marketpl"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18289"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18289,
          "title": "fix(mcp): filter marketplace catalog by installable connection options",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18289",
          "created_at": "2026-10-11T16:14:08Z",
          "updated_at": "2026-10-11T16:16:40Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5d35a0b16231f72907f844af4a9a3d32e8a0f964",
          "scope": "Filters MCP marketplace entries to locally installable connection options.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ed test cases confirming that entries lacking locally installable options (such as Sentry) return false for `isMcpInstallableEntry` and are excluded from `getMcpMarketplaceCatalog`.\n\n## Issue Number\n\nFixes #17959, Fixes #17922\n\n## How to Test\n\nRun the MCP marketplace utils test suite:\n```bash\nnpm test -- __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\nRun typecheck:\n```bash\nnpm run typecheck\n```\n\nRun linter:\n```bash\nnpx eslint src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"mcp-marketpl"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18289"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "(Cancel) action leaves its event group spinning as \"k/N actions completed\" after the conversation is idle\n- OpenHands/OpenHands#17921: Files tab keeps showing stale file content after Refresh (and even after a reload)\n- OpenHands/OpenHands#17922: MCP library lists entries that cannot be installed on a local backend; their install dialog is empty and Install does nothing\n- OpenHands/OpenHands#17923: Skills \"Use skill\" opens Home with an empty composer instead of pre-filling the skill command\n- OpenHands/OpenHands#17924: \"Show Available Hooks\" always says \"No hooks configured\" on local back"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18325,
          "title": "docs(verify-openhands): map maintenance 2026-10-12",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18325",
          "created_at": "2026-10-12T07:48:05Z",
          "updated_at": "2026-10-12T19:34:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T17:44:03Z",
          "closed_at": "2026-10-12T17:44:03Z",
          "head_sha": "f6990463c4223f3099be60dcdb91ab6915c89417",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "coped outcomes: latest root F17 **8/0/1/0**, F17 peer **20/1/9/9**, F18 root **0/2/0/0**, F18 peer **0/2/0/0** (pass/fail/blocked/not-run). Overlapping checks do not complete families; peer's additional known failure is #17922. [Report and reviewed ledgers](https://github.com/smolpaws/OpenHands/blob/f6990463c4223f3099be60dcdb91ab6915c89417/.pr/map-maintenance/2026-10-12/report.md) name every changed row, capture viewport corrections, blocked prerequisites and retained evidence.\n\nPending: bound aggregate DeepSeek spend + configured key; entitled Cloud backend; Docker bin"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18325"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18289,
          "title": "fix(mcp): filter marketplace catalog by installable connection options",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18289",
          "created_at": "2026-10-11T16:14:08Z",
          "updated_at": "2026-10-11T16:16:40Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5d35a0b16231f72907f844af4a9a3d32e8a0f964",
          "scope": "Filters MCP marketplace entries to locally installable connection options.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ed test cases confirming that entries lacking locally installable options (such as Sentry) return false for `isMcpInstallableEntry` and are excluded from `getMcpMarketplaceCatalog`.\n\n## Issue Number\n\nFixes #17959, Fixes #17922\n\n## How to Test\n\nRun the MCP marketplace utils test suite:\n```bash\nnpm test -- __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\nRun typecheck:\n```bash\nnpm run typecheck\n```\n\nRun linter:\n```bash\nnpx eslint src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"mcp-marketpl"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18289"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17923,
      "title": "[Bug]: Skills \"Use skill\" opens Home with an empty composer instead of pre-filling the skill command",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17923",
      "created_at": "2026-10-05T01:12:47Z",
      "updated_at": "2026-10-06T00:00:15Z",
      "state": "closed",
      "closed_at": "2026-10-06T00:00:15Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18016,
          "title": "fix(skills): pre-fill the Home composer from Use skill and Create Automation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18016",
          "created_at": "2026-10-05T20:36:58Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "closed_at": "2026-10-06T00:00:14Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Targets queued skill and automation launch messages to the Home composer so they prefill correctly.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "es a message whose target matches its route (`\"home\"` with no conversation id, `\"conversation\"` with one). The existing `clearMessageToSend` still clears the message once it has been applied.\r\n\r\n## Issue Number\r\n\r\nFixes #17923\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/skills/skill-detail-modal.test.tsx __tests__/components/automations/create-instructions.test.tsx __tests__/stores/conversation-store.test.ts\r\nnpm run lint\r\n```\r\n\r\n- The new test in `skill-detail-modal.test.tsx` renders the real H"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18016"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18016,
          "title": "fix(skills): pre-fill the Home composer from Use skill and Create Automation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18016",
          "created_at": "2026-10-05T20:36:58Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "closed_at": "2026-10-06T00:00:14Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Targets queued skill and automation launch messages to the Home composer so they prefill correctly.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "es a message whose target matches its route (`\"home\"` with no conversation id, `\"conversation\"` with one). The existing `clearMessageToSend` still clears the message once it has been applied.\r\n\r\n## Issue Number\r\n\r\nFixes #17923\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/skills/skill-detail-modal.test.tsx __tests__/components/automations/create-instructions.test.tsx __tests__/stores/conversation-store.test.ts\r\nnpm run lint\r\n```\r\n\r\n- The new test in `skill-detail-modal.test.tsx` renders the real H"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18016"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ing stale file content after Refresh (and even after a reload)\n- OpenHands/OpenHands#17922: MCP library lists entries that cannot be installed on a local backend; their install dialog is empty and Install does nothing\n- OpenHands/OpenHands#17923: Skills \"Use skill\" opens Home with an empty composer instead of pre-filling the skill command\n- OpenHands/OpenHands#17924: \"Show Available Hooks\" always says \"No hooks configured\" on local backends, even when workspace hooks are active\n- OpenHands/OpenHands#17925: Composer \"More input actions\" menu closes as soon as it opens at narrow widths, so "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18014,
          "title": "fix(chat): keep the message text in the composer after \"Branch from here\"",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18014",
          "created_at": "2026-10-05T20:31:51Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "closed_at": "2026-10-06T00:05:54Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Preserves text when branching a user message.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "sationState` merges, so only `draftMessage` is touched.\r\n- Not fixed here: every forked conversation fails its first model turn with an API-key error, tracked in OpenHands/software-agent-sdk#5465.\r\n- Possible follow-up: #17923 (\"Use skill\" opens Home with an empty composer) may share a similar timing cause in `useLaunchSkillInChat`; left to that issue.\r\n- The test shims `innerText` (jsdom lacks it) on `HTMLElement.prototype` for the test's duration and removes it afterwards; a reviewer noted this could become a shared helper later.\r\n- Local typecheck against this branch"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18014"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves the potentially related Use skill timing problem to #17923."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18016,
          "title": "fix(skills): pre-fill the Home composer from Use skill and Create Automation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18016",
          "created_at": "2026-10-05T20:36:58Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "closed_at": "2026-10-06T00:00:14Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Targets queued skill and automation launch messages to the Home composer so they prefill correctly.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "es a message whose target matches its route (`\"home\"` with no conversation id, `\"conversation\"` with one). The existing `clearMessageToSend` still clears the message once it has been applied.\r\n\r\n## Issue Number\r\n\r\nFixes #17923\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/skills/skill-detail-modal.test.tsx __tests__/components/automations/create-instructions.test.tsx __tests__/stores/conversation-store.test.ts\r\nnpm run lint\r\n```\r\n\r\n- The new test in `skill-detail-modal.test.tsx` renders the real H"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18016"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18016,
          "title": "fix(skills): pre-fill the Home composer from Use skill and Create Automation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18016",
          "created_at": "2026-10-05T20:36:58Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "closed_at": "2026-10-06T00:00:14Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Targets queued skill and automation launch messages to the Home composer so they prefill correctly.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "es a message whose target matches its route (`\"home\"` with no conversation id, `\"conversation\"` with one). The existing `clearMessageToSend` still clears the message once it has been applied.\r\n\r\n## Issue Number\r\n\r\nFixes #17923\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repo root):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/skills/skill-detail-modal.test.tsx __tests__/components/automations/create-instructions.test.tsx __tests__/stores/conversation-store.test.ts\r\nnpm run lint\r\n```\r\n\r\n- The new test in `skill-detail-modal.test.tsx` renders the real H"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18016"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18016; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17924,
      "title": "[Bug]: \"Show Available Hooks\" always says \"No hooks configured\" on local backends, even when workspace hooks are active",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17924",
      "created_at": "2026-10-05T01:13:01Z",
      "updated_at": "2026-10-06T20:32:43Z",
      "state": "closed",
      "closed_at": "2026-10-06T20:32:43Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18031,
          "title": "fix(hooks): list workspace hooks in the Available Hooks dialog on local backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18031",
          "created_at": "2026-10-05T21:16:43Z",
          "updated_at": "2026-10-08T20:37:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:32:41Z",
          "closed_at": "2026-10-06T20:32:41Z",
          "head_sha": "9f1fb381f2b16672e762c78974656f49e1779824",
          "scope": "Lists workspace hooks in the Available Hooks dialog on supported local backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the SDK type), and the dialog hides the timeout pill when it is absent. Cloud, no backend, no conversation id and Docker-isolated backends still get an empty list and send no hooks request.\r\n\r\n## Issue Number\r\n\r\nFixes #17924\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/docker-conversation-boundaries.test.ts __tests__/api/hooks-service.test.ts __tests__/hooks/query/use-conversation-hooks.test.tsx __tests__/components/features/conversation-panel/hooks-modal.test.tsx src/api/no-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18031"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18031,
          "title": "fix(hooks): list workspace hooks in the Available Hooks dialog on local backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18031",
          "created_at": "2026-10-05T21:16:43Z",
          "updated_at": "2026-10-08T20:37:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:32:41Z",
          "closed_at": "2026-10-06T20:32:41Z",
          "head_sha": "9f1fb381f2b16672e762c78974656f49e1779824",
          "scope": "Lists workspace hooks in the Available Hooks dialog on supported local backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the SDK type), and the dialog hides the timeout pill when it is absent. Cloud, no backend, no conversation id and Docker-isolated backends still get an empty list and send no hooks request.\r\n\r\n## Issue Number\r\n\r\nFixes #17924\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/docker-conversation-boundaries.test.ts __tests__/api/hooks-service.test.ts __tests__/hooks/query/use-conversation-hooks.test.tsx __tests__/components/features/conversation-panel/hooks-modal.test.tsx src/api/no-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18031"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "cannot be installed on a local backend; their install dialog is empty and Install does nothing\n- OpenHands/OpenHands#17923: Skills \"Use skill\" opens Home with an empty composer instead of pre-filling the skill command\n- OpenHands/OpenHands#17924: \"Show Available Hooks\" always says \"No hooks configured\" on local backends, even when workspace hooks are active\n- OpenHands/OpenHands#17925: Composer \"More input actions\" menu closes as soon as it opens at narrow widths, so the model cannot be switched\n- OpenHands/OpenHands#17926: Conversation draft typed within 500 ms of navigating away is lost"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "points to Update or Uninstall. Still broken, kept as Known failures: the catalog-source rewrite (OpenHands/software-agent-sdk#5496, narrowed) and the duplicate plugin install's `force=true` toast (#18090).\n- **#18031** (#17924), F07: the Available Hooks dialog lists the workspace's `hooks.json` (read on first open and on Refresh, then cached for 5 minutes).\n- **#18039** (#17950), F24: the Git Sync card hides repository credentials, and the switch's help text is current.\n- **#18041** (#17952), F23: Repositories and Plugins render from `preset_metadata`, and Export keeps "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18031,
          "title": "fix(hooks): list workspace hooks in the Available Hooks dialog on local backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18031",
          "created_at": "2026-10-05T21:16:43Z",
          "updated_at": "2026-10-08T20:37:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:32:41Z",
          "closed_at": "2026-10-06T20:32:41Z",
          "head_sha": "9f1fb381f2b16672e762c78974656f49e1779824",
          "scope": "Lists workspace hooks in the Available Hooks dialog on supported local backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the SDK type), and the dialog hides the timeout pill when it is absent. Cloud, no backend, no conversation id and Docker-isolated backends still get an empty list and send no hooks request.\r\n\r\n## Issue Number\r\n\r\nFixes #17924\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/docker-conversation-boundaries.test.ts __tests__/api/hooks-service.test.ts __tests__/hooks/query/use-conversation-hooks.test.tsx __tests__/components/features/conversation-panel/hooks-modal.test.tsx src/api/no-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18031"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18031,
          "title": "fix(hooks): list workspace hooks in the Available Hooks dialog on local backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18031",
          "created_at": "2026-10-05T21:16:43Z",
          "updated_at": "2026-10-08T20:37:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:32:41Z",
          "closed_at": "2026-10-06T20:32:41Z",
          "head_sha": "9f1fb381f2b16672e762c78974656f49e1779824",
          "scope": "Lists workspace hooks in the Available Hooks dialog on supported local backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "g the SDK type), and the dialog hides the timeout pill when it is absent. Cloud, no backend, no conversation id and Docker-isolated backends still get an empty list and send no hooks request.\r\n\r\n## Issue Number\r\n\r\nFixes #17924\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/agent-server-conversation-service.test.ts __tests__/api/docker-conversation-boundaries.test.ts __tests__/api/hooks-service.test.ts __tests__/hooks/query/use-conversation-hooks.test.tsx __tests__/components/features/conversation-panel/hooks-modal.test.tsx src/api/no-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18031"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18031; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17925,
      "title": "[Bug]: Composer \"More input actions\" menu closes as soon as it opens at narrow widths, so the model cannot be switched",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17925",
      "created_at": "2026-10-05T01:13:17Z",
      "updated_at": "2026-10-05T23:55:08Z",
      "state": "closed",
      "closed_at": "2026-10-05T23:55:08Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18015,
          "title": "fix(chat): keep the composer overflow menu open at narrow widths",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18015",
          "created_at": "2026-10-05T20:35:26Z",
          "updated_at": "2026-10-06T00:58:04Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:07Z",
          "closed_at": "2026-10-05T23:55:07Z",
          "head_sha": "fecbbb18e24df4b238e2e2bec4b9b3ce0d5bc138",
          "scope": "Ignores the opening trigger click in outside-click handling so the narrow composer menu stays open.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "has committed the open menu, which is the order a real browser produces. Two of them fail on main and pass with the fix.\r\n- `.pr/`: before and after evidence (screenshots and `--observe` logs).\r\n\r\n## Issue Number\r\nFixes #17925\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repository root; run `npm run make-i18n` first if `declaration.ts` is missing):\r\n\r\n```\r\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/features/chat/components/chat-input-model.test.tsx __tests__/components/features/chat/components/cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18015"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18015,
          "title": "fix(chat): keep the composer overflow menu open at narrow widths",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18015",
          "created_at": "2026-10-05T20:35:26Z",
          "updated_at": "2026-10-06T00:58:04Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:07Z",
          "closed_at": "2026-10-05T23:55:07Z",
          "head_sha": "fecbbb18e24df4b238e2e2bec4b9b3ce0d5bc138",
          "scope": "Ignores the opening trigger click in outside-click handling so the narrow composer menu stays open.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "has committed the open menu, which is the order a real browser produces. Two of them fail on main and pass with the fix.\r\n- `.pr/`: before and after evidence (screenshots and `--observe` logs).\r\n\r\n## Issue Number\r\nFixes #17925\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repository root; run `npm run make-i18n` first if `declaration.ts` is missing):\r\n\r\n```\r\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/features/chat/components/chat-input-model.test.tsx __tests__/components/features/chat/components/cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18015"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " opens Home with an empty composer instead of pre-filling the skill command\n- OpenHands/OpenHands#17924: \"Show Available Hooks\" always says \"No hooks configured\" on local backends, even when workspace hooks are active\n- OpenHands/OpenHands#17925: Composer \"More input actions\" menu closes as soon as it opens at narrow widths, so the model cannot be switched\n- OpenHands/OpenHands#17926: Conversation draft typed within 500 ms of navigating away is lost; the older draft comes back\n- OpenHands/OpenHands#17927: A failed Save on Settings > Application discards the user's unsaved edits\n- OpenHand"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18026,
          "title": "fix(automations): keep the filters popover open between choices",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18026",
          "created_at": "2026-10-05T21:05:49Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "closed_at": "2026-10-06T03:35:36Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Fixes automation Filters outside-click behavior and adapts existing composer tests.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " and checks an outside click still closes it.\n- Test-only change in `__tests__/components/features/chat/components/chat-input-actions.test.tsx`, needed after merging `main`: the composer overflow-menu tests from #18015 (#17925) replay the opening click to the `document` listeners after React has rendered the menu, as a browser does. They built that click with `new MouseEvent()` and set only `target`. A click that was never dispatched has an empty `composedPath()`, so with the new hook the replayed click no longer went through the trigger the hook ignores, and the menu c",
              " Status Disabled, Trigger Scheduled and Sort Name each left the popover open (\"Filters 1\", \"Filters 2\", \"Filters 3\"), Reset all kept it open, and clicking the Dashboard heading closed it. The composer overflow menu from #17925 at 320 px, in a conversation with the DeepSeek profiles: the \"More input actions\" button opens the menu and it stays open (`aria-expanded` true), Model opens the submenu listing deepseek-flash and deepseek-pro, a click in the message area closes it, and a second click on the button also closes it. No page or console errors.\n\nResults: the targeted "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18026"
            ]
          },
          "direct_closer": false,
          "reason": "The #17925 changes are test-only guards after merging its fix; the browser product behavior was already unaffected."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18115,
          "title": "fix(chat): keep the overflow menu's submenus inside the viewport",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18115",
          "created_at": "2026-10-07T06:04:03Z",
          "updated_at": "2026-10-12T04:26:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f8890f07e433bbd55e702c73d2f0941f76484bf6",
          "scope": "Clamps overflow submenus to viewport bounds.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " the rows below remain reachable; screenshots are attached below.\n\n---\n\nAGENT:\n\n`npx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx` — 24/24 passing. Four new tests in the existing `#17925` describe block stub the row/submenu geometry (row at x 68 / top 571, 200 px wide; menu 220×190) and pin the clamping: at 320×700 the menu lands at (92, 502) — i.e. `left: 24px, top: -69px` relative to the row — instead of overflowing; at 1024×768 the computed `left: 201px, top: -4px` coincide with the class-based placement; on a 200×150 viewport "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18115"
            ]
          },
          "direct_closer": false,
          "reason": "The reference names the existing test describe block; this PR implements the separate positioning issue #18063."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Adds Escape dismissal to the overflow input-actions menu.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " closes the menu with focus on the trigger, on a menu item, or with the Model submenu open, and focus returns to the trigger. Outside click and trigger toggle still close it, the menu stays open after the opening click (#17925 guard), and switching profiles from the Model submenu still works. Escape with only the overflow menu open leaves the composer draft and the page alone.\n\n## Video/Screenshots\n\nScreen recordings at 320 px (`browser viewport narrow`) of the real composer on a finished conversation. There were two local stacks, each on agent-server 1.53.0 with deepse"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": false,
          "reason": "The #17925 reference is a regression guard confirming the already-fixed opening behavior, not an implementation of its fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18015,
          "title": "fix(chat): keep the composer overflow menu open at narrow widths",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18015",
          "created_at": "2026-10-05T20:35:26Z",
          "updated_at": "2026-10-06T00:58:04Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:07Z",
          "closed_at": "2026-10-05T23:55:07Z",
          "head_sha": "fecbbb18e24df4b238e2e2bec4b9b3ce0d5bc138",
          "scope": "Ignores the opening trigger click in outside-click handling so the narrow composer menu stays open.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "has committed the open menu, which is the order a real browser produces. Two of them fail on main and pass with the fix.\r\n- `.pr/`: before and after evidence (screenshots and `--observe` logs).\r\n\r\n## Issue Number\r\nFixes #17925\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repository root; run `npm run make-i18n` first if `declaration.ts` is missing):\r\n\r\n```\r\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/features/chat/components/chat-input-model.test.tsx __tests__/components/features/chat/components/cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18015"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18015,
          "title": "fix(chat): keep the composer overflow menu open at narrow widths",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18015",
          "created_at": "2026-10-05T20:35:26Z",
          "updated_at": "2026-10-06T00:58:04Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:07Z",
          "closed_at": "2026-10-05T23:55:07Z",
          "head_sha": "fecbbb18e24df4b238e2e2bec4b9b3ce0d5bc138",
          "scope": "Ignores the opening trigger click in outside-click handling so the narrow composer menu stays open.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "has committed the open menu, which is the order a real browser produces. Two of them fail on main and pass with the fix.\r\n- `.pr/`: before and after evidence (screenshots and `--observe` logs).\r\n\r\n## Issue Number\r\nFixes #17925\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (from the repository root; run `npm run make-i18n` first if `declaration.ts` is missing):\r\n\r\n```\r\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/features/chat/components/chat-input-model.test.tsx __tests__/components/features/chat/components/cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18015"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18015; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17926,
      "title": "[Bug]: Conversation draft typed within 500 ms of navigating away is lost; the older draft comes back",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17926",
      "created_at": "2026-10-05T01:13:30Z",
      "updated_at": "2026-10-11T04:23:38Z",
      "state": "closed",
      "closed_at": "2026-10-11T04:23:38Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17968,
          "title": "fix(chat): flush conversation drafts before navigation",
          "author": "GoldArowana",
          "author_url": "https://github.com/GoldArowana",
          "url": "https://github.com/OpenHands/OpenHands/pull/17968",
          "created_at": "2026-10-05T06:24:24Z",
          "updated_at": "2026-10-12T15:07:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:23:36Z",
          "closed_at": "2026-10-11T04:23:36Z",
          "head_sha": "9b2ebe2e962f5aa35e89952dd98abc4a9e9c2eaf",
          "scope": "Flushes pending debounced conversation drafts before navigation using the captured conversation identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "UMAN:\n\nI reviewed the before-and-after recordings and confirmed that drafts are preserved when switching conversations or navigating to Settings and back, without mixing drafts between conversations.\n\n---\n\nAGENT:\n\nFixes #17926.\n\n## Why\n\nConversation edits made within the 500 ms debounce window can be lost during navigation, restoring an older draft instead.\n\n## Summary\n\nPending conversation drafts are flushed before navigation or unmount using the captured conversation identity. Multiline text and `clearDraft` semantics are preserved. Home draft and task-ID behavior are",
              "re preserved. Home draft and task-ID behavior are unchanged. Regression tests cover rapid conversation switching, Settings/Back navigation, multiline drafts, cleared drafts, and conversation isolation.\n\n## Issue Number\n\n#17926 is labeled `ready-for-dev`.\n\n## How to Test\n\nThe recorded production app ran with `node bin/agent-canvas.mjs`, local AgentServer 1.50.1, automation 1.17.0, and Chromium. Edit a saved draft and navigate within 500 ms: switch conversations and return; open Settings and go Back; enter multiline text, open New Chat, and return. Confirm the latest text"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17968"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18096,
          "title": "fix(chat): flush pending conversation draft on unmount",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18096",
          "created_at": "2026-10-07T01:32:30Z",
          "updated_at": "2026-10-11T23:06:24Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:24Z",
          "head_sha": "027972203b67280f9395306518486142e6285ae4",
          "scope": "Flushes pending conversation drafts on unmount instead of losing recent edits.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vent flushing cleared drafts.\n- Added regression tests in `__tests__/hooks/use-draft-persistence.test.tsx` verifying that unmounting within the debounce window flushes the draft to local storage.\n\n## Issue Number\n\nFixes #17926\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 42 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"conversation-draft-flush-on-unmount\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18096"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17968,
          "title": "fix(chat): flush conversation drafts before navigation",
          "author": "GoldArowana",
          "author_url": "https://github.com/GoldArowana",
          "url": "https://github.com/OpenHands/OpenHands/pull/17968",
          "created_at": "2026-10-05T06:24:24Z",
          "updated_at": "2026-10-12T15:07:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:23:36Z",
          "closed_at": "2026-10-11T04:23:36Z",
          "head_sha": "9b2ebe2e962f5aa35e89952dd98abc4a9e9c2eaf",
          "scope": "Flushes pending debounced conversation drafts before navigation using the captured conversation identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "UMAN:\n\nI reviewed the before-and-after recordings and confirmed that drafts are preserved when switching conversations or navigating to Settings and back, without mixing drafts between conversations.\n\n---\n\nAGENT:\n\nFixes #17926.\n\n## Why\n\nConversation edits made within the 500 ms debounce window can be lost during navigation, restoring an older draft instead.\n\n## Summary\n\nPending conversation drafts are flushed before navigation or unmount using the captured conversation identity. Multiline text and `clearDraft` semantics are preserved. Home draft and task-ID behavior are",
              "re preserved. Home draft and task-ID behavior are unchanged. Regression tests cover rapid conversation switching, Settings/Back navigation, multiline drafts, cleared drafts, and conversation isolation.\n\n## Issue Number\n\n#17926 is labeled `ready-for-dev`.\n\n## How to Test\n\nThe recorded production app ran with `node bin/agent-canvas.mjs`, local AgentServer 1.50.1, automation 1.17.0, and Chromium. Edit a saved draft and navigate within 500 ms: switch conversations and return; open Settings and go Back; enter multiline text, open New Chat, and return. Confirm the latest text"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17968"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18096,
          "title": "fix(chat): flush pending conversation draft on unmount",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18096",
          "created_at": "2026-10-07T01:32:30Z",
          "updated_at": "2026-10-11T23:06:24Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:24Z",
          "head_sha": "027972203b67280f9395306518486142e6285ae4",
          "scope": "Flushes pending conversation drafts on unmount instead of losing recent edits.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vent flushing cleared drafts.\n- Added regression tests in `__tests__/hooks/use-draft-persistence.test.tsx` verifying that unmounting within the debounce window flushes the draft to local storage.\n\n## Issue Number\n\nFixes #17926\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 42 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"conversation-draft-flush-on-unmount\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18096"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "No hooks configured\" on local backends, even when workspace hooks are active\n- OpenHands/OpenHands#17925: Composer \"More input actions\" menu closes as soon as it opens at narrow widths, so the model cannot be switched\n- OpenHands/OpenHands#17926: Conversation draft typed within 500 ms of navigating away is lost; the older draft comes back\n- OpenHands/OpenHands#17927: A failed Save on Settings > Application discards the user's unsaved edits\n- OpenHands/OpenHands#17928: Confirmation Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows\n- OpenHands/OpenHands#1792"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "e-driven\n\n- **Fixed and verified live; notes removed or rewritten:**\n  - #17915 (F04/F07 confirm-button test ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Defau",
              "5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F04.automation-setup-tag.png``)\n- F05.draft-persistence: a draft typed just before switching comes back (#17926 fixed).\n  ![F05](```https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F05.draft-persistence-fast-switch.png)```\n- F06.confi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17968,
          "title": "fix(chat): flush conversation drafts before navigation",
          "author": "GoldArowana",
          "author_url": "https://github.com/GoldArowana",
          "url": "https://github.com/OpenHands/OpenHands/pull/17968",
          "created_at": "2026-10-05T06:24:24Z",
          "updated_at": "2026-10-12T15:07:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:23:36Z",
          "closed_at": "2026-10-11T04:23:36Z",
          "head_sha": "9b2ebe2e962f5aa35e89952dd98abc4a9e9c2eaf",
          "scope": "Flushes pending debounced conversation drafts before navigation using the captured conversation identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "UMAN:\n\nI reviewed the before-and-after recordings and confirmed that drafts are preserved when switching conversations or navigating to Settings and back, without mixing drafts between conversations.\n\n---\n\nAGENT:\n\nFixes #17926.\n\n## Why\n\nConversation edits made within the 500 ms debounce window can be lost during navigation, restoring an older draft instead.\n\n## Summary\n\nPending conversation drafts are flushed before navigation or unmount using the captured conversation identity. Multiline text and `clearDraft` semantics are preserved. Home draft and task-ID behavior are",
              "re preserved. Home draft and task-ID behavior are unchanged. Regression tests cover rapid conversation switching, Settings/Back navigation, multiline drafts, cleared drafts, and conversation isolation.\n\n## Issue Number\n\n#17926 is labeled `ready-for-dev`.\n\n## How to Test\n\nThe recorded production app ran with `node bin/agent-canvas.mjs`, local AgentServer 1.50.1, automation 1.17.0, and Chromium. Edit a saved draft and navigate within 500 ms: switch conversations and return; open Settings and go Back; enter multiline text, open New Chat, and return. Confirm the latest text"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17968"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17968,
          "title": "fix(chat): flush conversation drafts before navigation",
          "author": "GoldArowana",
          "author_url": "https://github.com/GoldArowana",
          "url": "https://github.com/OpenHands/OpenHands/pull/17968",
          "created_at": "2026-10-05T06:24:24Z",
          "updated_at": "2026-10-12T15:07:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:23:36Z",
          "closed_at": "2026-10-11T04:23:36Z",
          "head_sha": "9b2ebe2e962f5aa35e89952dd98abc4a9e9c2eaf",
          "scope": "Flushes pending debounced conversation drafts before navigation using the captured conversation identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "UMAN:\n\nI reviewed the before-and-after recordings and confirmed that drafts are preserved when switching conversations or navigating to Settings and back, without mixing drafts between conversations.\n\n---\n\nAGENT:\n\nFixes #17926.\n\n## Why\n\nConversation edits made within the 500 ms debounce window can be lost during navigation, restoring an older draft instead.\n\n## Summary\n\nPending conversation drafts are flushed before navigation or unmount using the captured conversation identity. Multiline text and `clearDraft` semantics are preserved. Home draft and task-ID behavior are",
              "re preserved. Home draft and task-ID behavior are unchanged. Regression tests cover rapid conversation switching, Settings/Back navigation, multiline drafts, cleared drafts, and conversation isolation.\n\n## Issue Number\n\n#17926 is labeled `ready-for-dev`.\n\n## How to Test\n\nThe recorded production app ran with `node bin/agent-canvas.mjs`, local AgentServer 1.50.1, automation 1.17.0, and Chromium. Edit a saved draft and navigate within 500 ms: switch conversations and return; open Settings and go Back; enter multiline text, open New Chat, and return. Confirm the latest text"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17968"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18096,
          "title": "fix(chat): flush pending conversation draft on unmount",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18096",
          "created_at": "2026-10-07T01:32:30Z",
          "updated_at": "2026-10-11T23:06:24Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:24Z",
          "head_sha": "027972203b67280f9395306518486142e6285ae4",
          "scope": "Flushes pending conversation drafts on unmount instead of losing recent edits.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vent flushing cleared drafts.\n- Added regression tests in `__tests__/hooks/use-draft-persistence.test.tsx` verifying that unmounting within the debounce window flushes the draft to local storage.\n\n## Issue Number\n\nFixes #17926\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 42 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"conversation-draft-flush-on-unmount\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18096"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #17968; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17927,
      "title": "[Bug]: A failed Save on Settings > Application discards the user's unsaved edits",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17927",
      "created_at": "2026-10-05T01:13:43Z",
      "updated_at": "2026-10-12T05:05:41Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18372"
            ]
          },
          "number": 18372,
          "title": "fix(settings): preserve application edits after a failed save",
          "url": "https://github.com/OpenHands/OpenHands/pull/18372",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:54:17Z",
          "updated_at": "2026-10-14T04:31:29Z",
          "head_sha": "ac944fbc32ffe38b0a32b5d85b83d3a719a1ea61",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17945,
          "title": "fix(settings): preserve unsaved edits and keep save enabled on failed save",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/17945",
          "created_at": "2026-10-05T01:23:00Z",
          "updated_at": "2026-10-05T08:11:27Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3226edb27dc052c133697c17eeb6cc2c29fdafa4",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " button remains enabled.\n- Added a regression test in `__tests__/routes/app-settings.test.tsx` verifying that a failed save keeps user edits intact and leaves the submit button enabled for retry.\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/routes/app-settings.test.tsx\n```\n\nAll 6 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"app-settings-failed-save-keeps-edits\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17945"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18201,
          "title": "fix: preserve App Settings edits after save errors",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18201",
          "created_at": "2026-10-08T23:39:12Z",
          "updated_at": "2026-10-08T23:39:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "317e6e12b1a5172b343c195e059166c21e33a0ec",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "dirty state only after a successful save, not after errors\n- add regression coverage proving a rejected save keeps the edited switch checked, leaves Save enabled, and still raises the error toast\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/routes/app-settings.test.tsx\nnpx eslint src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\nnpx prettier --check src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\ngit diff --check\n```\n\nObserved locally: all 6 App Settings tests passed; ESLint, Prettier, and dif"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18201"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17945,
          "title": "fix(settings): preserve unsaved edits and keep save enabled on failed save",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/17945",
          "created_at": "2026-10-05T01:23:00Z",
          "updated_at": "2026-10-05T08:11:27Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3226edb27dc052c133697c17eeb6cc2c29fdafa4",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " button remains enabled.\n- Added a regression test in `__tests__/routes/app-settings.test.tsx` verifying that a failed save keeps user edits intact and leaves the submit button enabled for retry.\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/routes/app-settings.test.tsx\n```\n\nAll 6 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"app-settings-failed-save-keeps-edits\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17945"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18201,
          "title": "fix: preserve App Settings edits after save errors",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18201",
          "created_at": "2026-10-08T23:39:12Z",
          "updated_at": "2026-10-08T23:39:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "317e6e12b1a5172b343c195e059166c21e33a0ec",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "dirty state only after a successful save, not after errors\n- add regression coverage proving a rejected save keeps the edited switch checked, leaves Save enabled, and still raises the error toast\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/routes/app-settings.test.tsx\nnpx eslint src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\nnpx prettier --check src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\ngit diff --check\n```\n\nObserved locally: all 6 App Settings tests passed; ESLint, Prettier, and dif"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18201"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18372"
            ]
          },
          "number": 18372,
          "title": "fix(settings): preserve application edits after a failed save",
          "url": "https://github.com/OpenHands/OpenHands/pull/18372",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:54:17Z",
          "updated_at": "2026-10-14T04:31:29Z",
          "head_sha": "ac944fbc32ffe38b0a32b5d85b83d3a719a1ea61",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "put actions\" menu closes as soon as it opens at narrow widths, so the model cannot be switched\n- OpenHands/OpenHands#17926: Conversation draft typed within 500 ms of navigating away is lost; the older draft comes back\n- OpenHands/OpenHands#17927: A failed Save on Settings > Application discards the user's unsaved edits\n- OpenHands/OpenHands#17928: Confirmation Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows\n- OpenHands/OpenHands#17929: Add LLM Profile keeps the name derived from the initial model after the user picks a different model\n- OpenHands/OpenHan"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "h notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets and F13.acp-model-discovery\n  - F16.backend-switch\n  - F21.sa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 2,
      "open_pr_count": 3,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17945,
          "title": "fix(settings): preserve unsaved edits and keep save enabled on failed save",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/17945",
          "created_at": "2026-10-05T01:23:00Z",
          "updated_at": "2026-10-05T08:11:27Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3226edb27dc052c133697c17eeb6cc2c29fdafa4",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " button remains enabled.\n- Added a regression test in `__tests__/routes/app-settings.test.tsx` verifying that a failed save keeps user edits intact and leaves the submit button enabled for retry.\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/routes/app-settings.test.tsx\n```\n\nAll 6 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"app-settings-failed-save-keeps-edits\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17945"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18201,
          "title": "fix: preserve App Settings edits after save errors",
          "author": "Rohithmatham12",
          "author_url": "https://github.com/Rohithmatham12",
          "url": "https://github.com/OpenHands/OpenHands/pull/18201",
          "created_at": "2026-10-08T23:39:12Z",
          "updated_at": "2026-10-08T23:39:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "317e6e12b1a5172b343c195e059166c21e33a0ec",
          "scope": "Keeps App Settings edits and dirty state after a failed save.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "dirty state only after a successful save, not after errors\n- add regression coverage proving a rejected save keeps the edited switch checked, leaves Save enabled, and still raises the error toast\n\n## Issue Number\n\nFixes #17927\n\n## How to Test\n\nRun:\n\n```bash\nnpx vitest run __tests__/routes/app-settings.test.tsx\nnpx eslint src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\nnpx prettier --check src/routes/app-settings.tsx __tests__/routes/app-settings.test.tsx\ngit diff --check\n```\n\nObserved locally: all 6 App Settings tests passed; ESLint, Prettier, and dif"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18201"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18372"
            ]
          },
          "number": 18372,
          "title": "fix(settings): preserve application edits after a failed save",
          "url": "https://github.com/OpenHands/OpenHands/pull/18372",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:54:17Z",
          "updated_at": "2026-10-14T04:31:29Z",
          "head_sha": "ac944fbc32ffe38b0a32b5d85b83d3a719a1ea61",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17928,
      "title": "[Bug]: Confirmation Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17928",
      "created_at": "2026-10-05T01:13:57Z",
      "updated_at": "2026-10-11T18:03:39Z",
      "state": "closed",
      "closed_at": "2026-10-11T18:03:39Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18127,
          "title": "fix: accept Ctrl for confirmation shortcuts off macOS",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/18127",
          "created_at": "2026-10-07T16:28:09Z",
          "updated_at": "2026-10-12T15:07:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T18:03:37Z",
          "closed_at": "2026-10-11T18:03:38Z",
          "head_sha": "8032aa21bcb0418a8be7eb3b7c6af9330a147aba",
          "scope": "Accepts Ctrl confirmation shortcuts off Apple platforms and prevents repeated submissions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "↩` / `⇧⌘⌫`. This PR accepts Ctrl as well, renders the hint with the platform's modifier, and stops the shortcuts from firing again once a response has been sent.\n\nIt also folds in the review notes @enyst's agent left on #17928: the already-submitted guard, evidence from a working backend, and no `.pr/` files on the branch.\n\nLive evidence (videos below): real Agent Server 1.53.0 started by `bin/agent-canvas.mjs` through `control-openhands launch`, model `deepseek/deepseek-flash`, headless Chromium on Linux (`navigator.platform = 'Linux x86_64'`), Confirmation Mode on wit",
              "both `metaKey` and `ctrlKey` (near misses, held key, unmount); the already-submitted test now also presses the shortcut; a new case asserts the hint text for macOS, Linux and Windows user agents.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nReproduction (Linux or Windows): turn on Confirmation Mode under Settings > Verification with Security Analyzer `None`, ask the agent to run `echo qa-confirm-ok`, and when \"Do you want to continue with this action?\" appears press `Ctrl+Enter`.\n\n- Before (`main`): nothing happens; the conversation stays `waiting_for_confirmation` a"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18127"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18152,
          "title": "fix(confirmation): support Ctrl shortcuts and platform-aware hints",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18152",
          "created_at": "2026-10-08T11:46:55Z",
          "updated_at": "2026-10-11T18:07:06Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T18:07:06Z",
          "head_sha": "e4d8dffddbeebd44c50ace113765a983af1b9711",
          "scope": "Supports Ctrl confirmation shortcuts and platform-specific shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying platform-dependent tooltip hints.\n- Added unit tests in `conversation-confirmation-buttons.test.tsx` verifying `Ctrl+Enter` and `Shift+Ctrl+Backspace` behavior on non-Apple platforms.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/shared/action-tooltip.test.tsx __tests__/components/shared/buttons/conversation-confirmation-buttons.test.tsx\n```\n\nAll 12 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirmation-shortcuts-cross-platform\" src=\"https://github.com/user-attac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18152"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18127,
          "title": "fix: accept Ctrl for confirmation shortcuts off macOS",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/18127",
          "created_at": "2026-10-07T16:28:09Z",
          "updated_at": "2026-10-12T15:07:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T18:03:37Z",
          "closed_at": "2026-10-11T18:03:38Z",
          "head_sha": "8032aa21bcb0418a8be7eb3b7c6af9330a147aba",
          "scope": "Accepts Ctrl confirmation shortcuts off Apple platforms and prevents repeated submissions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "↩` / `⇧⌘⌫`. This PR accepts Ctrl as well, renders the hint with the platform's modifier, and stops the shortcuts from firing again once a response has been sent.\n\nIt also folds in the review notes @enyst's agent left on #17928: the already-submitted guard, evidence from a working backend, and no `.pr/` files on the branch.\n\nLive evidence (videos below): real Agent Server 1.53.0 started by `bin/agent-canvas.mjs` through `control-openhands launch`, model `deepseek/deepseek-flash`, headless Chromium on Linux (`navigator.platform = 'Linux x86_64'`), Confirmation Mode on wit",
              "both `metaKey` and `ctrlKey` (near misses, held key, unmount); the already-submitted test now also presses the shortcut; a new case asserts the hint text for macOS, Linux and Windows user agents.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nReproduction (Linux or Windows): turn on Confirmation Mode under Settings > Verification with Security Analyzer `None`, ask the agent to run `echo qa-confirm-ok`, and when \"Do you want to continue with this action?\" appears press `Ctrl+Enter`.\n\n- Before (`main`): nothing happens; the conversation stays `waiting_for_confirmation` a"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18127"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18152,
          "title": "fix(confirmation): support Ctrl shortcuts and platform-aware hints",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18152",
          "created_at": "2026-10-08T11:46:55Z",
          "updated_at": "2026-10-11T18:07:06Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T18:07:06Z",
          "head_sha": "e4d8dffddbeebd44c50ace113765a983af1b9711",
          "scope": "Supports Ctrl confirmation shortcuts and platform-specific shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying platform-dependent tooltip hints.\n- Added unit tests in `conversation-confirmation-buttons.test.tsx` verifying `Ctrl+Enter` and `Shift+Ctrl+Backspace` behavior on non-Apple platforms.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/shared/action-tooltip.test.tsx __tests__/components/shared/buttons/conversation-confirmation-buttons.test.tsx\n```\n\nAll 12 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirmation-shortcuts-cross-platform\" src=\"https://github.com/user-attac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18152"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nds/OpenHands#17926: Conversation draft typed within 500 ms of navigating away is lost; the older draft comes back\n- OpenHands/OpenHands#17927: A failed Save on Settings > Application discards the user's unsaved edits\n- OpenHands/OpenHands#17928: Confirmation Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows\n- OpenHands/OpenHands#17929: Add LLM Profile keeps the name derived from the initial model after the user picks a different model\n- OpenHands/OpenHands#17930: Installing a catalog STDIO MCP server twice leaves the second copy without its catalog identi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18292,
          "title": "feat(verify-openhands): hold keys with `browser key down|up|release-all`",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18292",
          "created_at": "2026-10-11T18:18:08Z",
          "updated_at": "2026-10-12T15:07:24Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T19:28:37Z",
          "closed_at": "2026-10-11T19:28:37Z",
          "head_sha": "390d7cacf549c65c02e28cbf95d2ee745f34182b",
          "scope": "Adds held-key commands to the verification harness for testing an existing shortcut fix.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n AI agent (Claude Code) helping Engel Nyst (@enyst) with project work.\n\n## Why\n\n`browser press` sends one keydown and one keyup, so the verify-openhands harness could not hold a key. While verifying #18127 (the fix for #17928), its guard against a held Ctrl+Enter sending a second confirmation could only be covered by unit tests. The same gap blocks recipes that need a modifier held across a click (Shift+click) or a long press. `browser eval` is read-only by the skill's rules, so synthetic key events are not an option either.\n\n## Summary\n\n- `browser key down <Key> [--re",
              "rences/mapping.md` points keyboard-shortcut recipes that read `event.repeat` or need a held modifier at the new commands.\n\n## Issue Number\n\nRefs #17568 (the verify-openhands skill). It came up while verifying #18127 for #17928.\n\n## How to Test\n\nUnit tests, no browser needed:\n\n```sh\nnpx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs\n# Test Files 1 passed · Tests 53 passed\n```\n\nThe new tests cover holding, repeating and releasing on a fake page (including a key held on another tab and one held on a closed tab), the flag checks, `help browser"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18292"
            ]
          },
          "direct_closer": false,
          "reason": "The Ctrl shortcut product fix is in #18127; this PR adds supporting test tooling and does not implement #17928 product behavior."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Verification-tooling PR merely notes the already-fixed confirmation shortcut as a stale map entry; it does not implement this product fix.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "pass/fail/blocked/not-run. Only `bug run` writes xfail/xpass, so the expected-failure result always comes from the marked assertion.\r\n- Unrelated stale note spotted: F06 still lists the Ctrl+Enter confirmation shortcut (#17928) as a Known failure, although #18127 fixed it on 2026-10-11. I left it for the next map pass.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\nhttps://claude.ai/code/session_01W1P7uFB21QM2G4nYaJzvb2\r\n\r\n---\r\n_Generated by [Claude Code](https://claude.ai/code/session_01W1P7uFB21QM2G4nYaJzvb2)_\r\n\r\n\r\n---\r\n_Generated by [Claude Code"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": false,
          "reason": "Verification-tooling PR merely notes the already-fixed confirmation shortcut as a stale map entry; it does not implement this product fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "ive; notes removed or rewritten:**\n  - #17915 (F04/F07 confirm-button test ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs d",
              "ds/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F06.confirmation-mode-after-reload.png)````\n- F06.confirmation-shortcuts: Ctrl hints on Linux (#17928 fixed).\n  ![F06 shortcuts](`````https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F06.confirmation-shortcuts-ctrl.png)`````"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18127,
          "title": "fix: accept Ctrl for confirmation shortcuts off macOS",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/18127",
          "created_at": "2026-10-07T16:28:09Z",
          "updated_at": "2026-10-12T15:07:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T18:03:37Z",
          "closed_at": "2026-10-11T18:03:38Z",
          "head_sha": "8032aa21bcb0418a8be7eb3b7c6af9330a147aba",
          "scope": "Accepts Ctrl confirmation shortcuts off Apple platforms and prevents repeated submissions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "↩` / `⇧⌘⌫`. This PR accepts Ctrl as well, renders the hint with the platform's modifier, and stops the shortcuts from firing again once a response has been sent.\n\nIt also folds in the review notes @enyst's agent left on #17928: the already-submitted guard, evidence from a working backend, and no `.pr/` files on the branch.\n\nLive evidence (videos below): real Agent Server 1.53.0 started by `bin/agent-canvas.mjs` through `control-openhands launch`, model `deepseek/deepseek-flash`, headless Chromium on Linux (`navigator.platform = 'Linux x86_64'`), Confirmation Mode on wit",
              "both `metaKey` and `ctrlKey` (near misses, held key, unmount); the already-submitted test now also presses the shortcut; a new case asserts the hint text for macOS, Linux and Windows user agents.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nReproduction (Linux or Windows): turn on Confirmation Mode under Settings > Verification with Security Analyzer `None`, ask the agent to run `echo qa-confirm-ok`, and when \"Do you want to continue with this action?\" appears press `Ctrl+Enter`.\n\n- Before (`main`): nothing happens; the conversation stays `waiting_for_confirmation` a"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18127"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18127,
          "title": "fix: accept Ctrl for confirmation shortcuts off macOS",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/18127",
          "created_at": "2026-10-07T16:28:09Z",
          "updated_at": "2026-10-12T15:07:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T18:03:37Z",
          "closed_at": "2026-10-11T18:03:38Z",
          "head_sha": "8032aa21bcb0418a8be7eb3b7c6af9330a147aba",
          "scope": "Accepts Ctrl confirmation shortcuts off Apple platforms and prevents repeated submissions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "↩` / `⇧⌘⌫`. This PR accepts Ctrl as well, renders the hint with the platform's modifier, and stops the shortcuts from firing again once a response has been sent.\n\nIt also folds in the review notes @enyst's agent left on #17928: the already-submitted guard, evidence from a working backend, and no `.pr/` files on the branch.\n\nLive evidence (videos below): real Agent Server 1.53.0 started by `bin/agent-canvas.mjs` through `control-openhands launch`, model `deepseek/deepseek-flash`, headless Chromium on Linux (`navigator.platform = 'Linux x86_64'`), Confirmation Mode on wit",
              "both `metaKey` and `ctrlKey` (near misses, held key, unmount); the already-submitted test now also presses the shortcut; a new case asserts the hint text for macOS, Linux and Windows user agents.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nReproduction (Linux or Windows): turn on Confirmation Mode under Settings > Verification with Security Analyzer `None`, ask the agent to run `echo qa-confirm-ok`, and when \"Do you want to continue with this action?\" appears press `Ctrl+Enter`.\n\n- Before (`main`): nothing happens; the conversation stays `waiting_for_confirmation` a"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18127"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18152,
          "title": "fix(confirmation): support Ctrl shortcuts and platform-aware hints",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18152",
          "created_at": "2026-10-08T11:46:55Z",
          "updated_at": "2026-10-11T18:07:06Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T18:07:06Z",
          "head_sha": "e4d8dffddbeebd44c50ace113765a983af1b9711",
          "scope": "Supports Ctrl confirmation shortcuts and platform-specific shortcut hints.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying platform-dependent tooltip hints.\n- Added unit tests in `conversation-confirmation-buttons.test.tsx` verifying `Ctrl+Enter` and `Shift+Ctrl+Backspace` behavior on non-Apple platforms.\n\n## Issue Number\n\nFixes #17928\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/shared/action-tooltip.test.tsx __tests__/components/shared/buttons/conversation-confirmation-buttons.test.tsx\n```\n\nAll 12 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"confirmation-shortcuts-cross-platform\" src=\"https://github.com/user-attac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18152"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18127; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17929,
      "title": "[Bug]: Add LLM Profile keeps the name derived from the initial model after the user picks a different model",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17929",
      "created_at": "2026-10-05T01:14:11Z",
      "updated_at": "2026-10-06T00:00:10Z",
      "state": "closed",
      "closed_at": "2026-10-06T00:00:10Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18017,
          "title": "fix(llm-profiles): keep the auto-filled profile name following the model",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18017",
          "created_at": "2026-10-05T20:40:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "closed_at": "2026-10-06T00:00:08Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Keeps an automatically generated new LLM profile name synchronized with model selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ofile.\r\n- Regression tests in `__tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx` (3 new tests that fail on main, plus an edit-mode assertion that the name is kept).\r\n\r\n## Issue Number\r\n\r\nFixes #17929\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/ __tests__/utils/derive-profile-name.test.ts __tests__/routes/llm-settings.test.tsx\r\n# 11 files, 217 tests passed (with the old component restored, the 3 new create-mode tests fail)\r\nnpx eslint src        # 0 errors (376 existing warning"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18017"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18017,
          "title": "fix(llm-profiles): keep the auto-filled profile name following the model",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18017",
          "created_at": "2026-10-05T20:40:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "closed_at": "2026-10-06T00:00:08Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Keeps an automatically generated new LLM profile name synchronized with model selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ofile.\r\n- Regression tests in `__tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx` (3 new tests that fail on main, plus an edit-mode assertion that the name is kept).\r\n\r\n## Issue Number\r\n\r\nFixes #17929\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/ __tests__/utils/derive-profile-name.test.ts __tests__/routes/llm-settings.test.tsx\r\n# 11 files, 217 tests passed (with the old component restored, the 3 new create-mode tests fail)\r\nnpx eslint src        # 0 errors (376 existing warning"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18017"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "s/OpenHands#17927: A failed Save on Settings > Application discards the user's unsaved edits\n- OpenHands/OpenHands#17928: Confirmation Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows\n- OpenHands/OpenHands#17929: Add LLM Profile keeps the name derived from the initial model after the user picks a different model\n- OpenHands/OpenHands#17930: Installing a catalog STDIO MCP server twice leaves the second copy without its catalog identity\n- OpenHands/OpenHands#17931: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real er"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18017,
          "title": "fix(llm-profiles): keep the auto-filled profile name following the model",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18017",
          "created_at": "2026-10-05T20:40:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "closed_at": "2026-10-06T00:00:08Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Keeps an automatically generated new LLM profile name synchronized with model selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ofile.\r\n- Regression tests in `__tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx` (3 new tests that fail on main, plus an edit-mode assertion that the name is kept).\r\n\r\n## Issue Number\r\n\r\nFixes #17929\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/ __tests__/utils/derive-profile-name.test.ts __tests__/routes/llm-settings.test.tsx\r\n# 11 files, 217 tests passed (with the old component restored, the 3 new create-mode tests fail)\r\nnpx eslint src        # 0 errors (376 existing warning"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18017"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18017,
          "title": "fix(llm-profiles): keep the auto-filled profile name following the model",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18017",
          "created_at": "2026-10-05T20:40:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "closed_at": "2026-10-06T00:00:08Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Keeps an automatically generated new LLM profile name synchronized with model selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ofile.\r\n- Regression tests in `__tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx` (3 new tests that fail on main, plus an edit-mode assertion that the name is kept).\r\n\r\n## Issue Number\r\n\r\nFixes #17929\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/ __tests__/utils/derive-profile-name.test.ts __tests__/routes/llm-settings.test.tsx\r\n# 11 files, 217 tests passed (with the old component restored, the 3 new create-mode tests fail)\r\nnpx eslint src        # 0 errors (376 existing warning"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18017"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18017; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17930,
      "title": "[Bug]: Installing a catalog STDIO MCP server twice leaves the second copy without its catalog identity",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17930",
      "created_at": "2026-10-05T01:14:26Z",
      "updated_at": "2026-10-06T05:19:12Z",
      "state": "closed",
      "closed_at": "2026-10-06T05:19:12Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18034,
          "title": "fix(mcp): keep catalog identity for repeated STDIO installs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18034",
          "created_at": "2026-10-05T21:24:14Z",
          "updated_at": "2026-10-08T20:38:14Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:19:11Z",
          "closed_at": "2026-10-06T05:19:11Z",
          "head_sha": "cb6fe2905138af7aa2218101db895c285ad4cb85",
          "scope": "Preserves catalog identity for repeated STDIO MCP installations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " no longer inherits it.\n- Remote (URL) matching, the add-only install flow, settings keys and the persistence schema are unchanged. Tests added in `__tests__/utils/mcp-marketplace-utils.test.ts`.\n\n## Issue Number\n\nFixes #17930\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/utils/mcp-marketplace-utils.test.ts __tests__/components/features/mcp-page __tests__/routes/mcp.test.tsx\nnpm run lint\nnpx prettier --check src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n- `mcp-marketplace-utils.test.ts`: 80/80 pass. With "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18034"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18034,
          "title": "fix(mcp): keep catalog identity for repeated STDIO installs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18034",
          "created_at": "2026-10-05T21:24:14Z",
          "updated_at": "2026-10-08T20:38:14Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:19:11Z",
          "closed_at": "2026-10-06T05:19:11Z",
          "head_sha": "cb6fe2905138af7aa2218101db895c285ad4cb85",
          "scope": "Preserves catalog identity for repeated STDIO MCP installations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " no longer inherits it.\n- Remote (URL) matching, the add-only install flow, settings keys and the persistence schema are unchanged. Tests added in `__tests__/utils/mcp-marketplace-utils.test.ts`.\n\n## Issue Number\n\nFixes #17930\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/utils/mcp-marketplace-utils.test.ts __tests__/components/features/mcp-page __tests__/routes/mcp.test.tsx\nnpm run lint\nnpx prettier --check src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n- `mcp-marketplace-utils.test.ts`: 80/80 pass. With "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18034"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "24, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > ",
              "tion Continue/Cancel shortcuts are ⌘-only; Ctrl+Enter does nothing on Linux and Windows\n- OpenHands/OpenHands#17929: Add LLM Profile keeps the name derived from the initial model after the user picks a different model\n- OpenHands/OpenHands#17930: Installing a catalog STDIO MCP server twice leaves the second copy without its catalog identity\n- OpenHands/OpenHands#17931: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real error\n- OpenHands/OpenHands#17932: Settings save retries a 422 validation error three times before showing it\n- OpenHands/OpenHands#"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18034,
          "title": "fix(mcp): keep catalog identity for repeated STDIO installs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18034",
          "created_at": "2026-10-05T21:24:14Z",
          "updated_at": "2026-10-08T20:38:14Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:19:11Z",
          "closed_at": "2026-10-06T05:19:11Z",
          "head_sha": "cb6fe2905138af7aa2218101db895c285ad4cb85",
          "scope": "Preserves catalog identity for repeated STDIO MCP installations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " no longer inherits it.\n- Remote (URL) matching, the add-only install flow, settings keys and the persistence schema are unchanged. Tests added in `__tests__/utils/mcp-marketplace-utils.test.ts`.\n\n## Issue Number\n\nFixes #17930\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/utils/mcp-marketplace-utils.test.ts __tests__/components/features/mcp-page __tests__/routes/mcp.test.tsx\nnpm run lint\nnpx prettier --check src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n- `mcp-marketplace-utils.test.ts`: 80/80 pass. With "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18034"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18034,
          "title": "fix(mcp): keep catalog identity for repeated STDIO installs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18034",
          "created_at": "2026-10-05T21:24:14Z",
          "updated_at": "2026-10-08T20:38:14Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:19:11Z",
          "closed_at": "2026-10-06T05:19:11Z",
          "head_sha": "cb6fe2905138af7aa2218101db895c285ad4cb85",
          "scope": "Preserves catalog identity for repeated STDIO MCP installations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " no longer inherits it.\n- Remote (URL) matching, the add-only install flow, settings keys and the persistence schema are unchanged. Tests added in `__tests__/utils/mcp-marketplace-utils.test.ts`.\n\n## Issue Number\n\nFixes #17930\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/utils/mcp-marketplace-utils.test.ts __tests__/components/features/mcp-page __tests__/routes/mcp.test.tsx\nnpm run lint\nnpx prettier --check src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n- `mcp-marketplace-utils.test.ts`: 80/80 pass. With "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18034"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18034; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17931,
      "title": "[Bug]: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real error",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17931",
      "created_at": "2026-10-05T01:14:40Z",
      "updated_at": "2026-10-06T01:01:22Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:01:22Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18018,
          "title": "fix(mcp): explain failed stdio connection tests without the URL hint",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18018",
          "created_at": "2026-10-05T20:41:19Z",
          "updated_at": "2026-10-08T20:39:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:21Z",
          "closed_at": "2026-10-06T01:01:21Z",
          "head_sha": "63d5e970dfbce639a525602d7fa370104c44a42e",
          "scope": "Uses STDIO-specific connection-test guidance and preserves the real failure reason.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h results are treated as remote, since OAuth only runs on remote servers).\r\n- Tests for the helper (real i18next with the English resource), the health card, the install modal and the editor.\r\n\r\n## Issue Number\r\n\r\nFixes #17931\r\n\r\n## How to Test\r\n\r\nAutomated (run in the frontend root):\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/mcp-test-error-message.test.ts __tests__/components/features/mcp-page/ __tests__/api/mcp-health __tests__/i18n\r\nnpm run make-i18n\r\nnpm run check-translation-completeness\r\nnpm run lint\r\n```\r\n\r\n- Vitest: 13 files, 103 tests passed (after rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18018"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18018,
          "title": "fix(mcp): explain failed stdio connection tests without the URL hint",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18018",
          "created_at": "2026-10-05T20:41:19Z",
          "updated_at": "2026-10-08T20:39:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:21Z",
          "closed_at": "2026-10-06T01:01:21Z",
          "head_sha": "63d5e970dfbce639a525602d7fa370104c44a42e",
          "scope": "Uses STDIO-specific connection-test guidance and preserves the real failure reason.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h results are treated as remote, since OAuth only runs on remote servers).\r\n- Tests for the helper (real i18next with the English resource), the health card, the install modal and the editor.\r\n\r\n## Issue Number\r\n\r\nFixes #17931\r\n\r\n## How to Test\r\n\r\nAutomated (run in the frontend root):\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/mcp-test-error-message.test.ts __tests__/components/features/mcp-page/ __tests__/api/mcp-health __tests__/i18n\r\nnpm run make-i18n\r\nnpm run check-translation-completeness\r\nnpm run lint\r\n```\r\n\r\n- Vitest: 13 files, 103 tests passed (after rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18018"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "Profile keeps the name derived from the initial model after the user picks a different model\n- OpenHands/OpenHands#17930: Installing a catalog STDIO MCP server twice leaves the second copy without its catalog identity\n- OpenHands/OpenHands#17931: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real error\n- OpenHands/OpenHands#17932: Settings save retries a 422 validation error three times before showing it\n- OpenHands/OpenHands#17933: Escape does not close several menus and popovers (sidebar card ⋮ menu, context-window popover, Overview ⋯ menu, comman"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18018,
          "title": "fix(mcp): explain failed stdio connection tests without the URL hint",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18018",
          "created_at": "2026-10-05T20:41:19Z",
          "updated_at": "2026-10-08T20:39:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:21Z",
          "closed_at": "2026-10-06T01:01:21Z",
          "head_sha": "63d5e970dfbce639a525602d7fa370104c44a42e",
          "scope": "Uses STDIO-specific connection-test guidance and preserves the real failure reason.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h results are treated as remote, since OAuth only runs on remote servers).\r\n- Tests for the helper (real i18next with the English resource), the health card, the install modal and the editor.\r\n\r\n## Issue Number\r\n\r\nFixes #17931\r\n\r\n## How to Test\r\n\r\nAutomated (run in the frontend root):\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/mcp-test-error-message.test.ts __tests__/components/features/mcp-page/ __tests__/api/mcp-health __tests__/i18n\r\nnpm run make-i18n\r\nnpm run check-translation-completeness\r\nnpm run lint\r\n```\r\n\r\n- Vitest: 13 files, 103 tests passed (after rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18018"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18018,
          "title": "fix(mcp): explain failed stdio connection tests without the URL hint",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18018",
          "created_at": "2026-10-05T20:41:19Z",
          "updated_at": "2026-10-08T20:39:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:21Z",
          "closed_at": "2026-10-06T01:01:21Z",
          "head_sha": "63d5e970dfbce639a525602d7fa370104c44a42e",
          "scope": "Uses STDIO-specific connection-test guidance and preserves the real failure reason.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "h results are treated as remote, since OAuth only runs on remote servers).\r\n- Tests for the helper (real i18next with the English resource), the health card, the install modal and the editor.\r\n\r\n## Issue Number\r\n\r\nFixes #17931\r\n\r\n## How to Test\r\n\r\nAutomated (run in the frontend root):\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/mcp-test-error-message.test.ts __tests__/components/features/mcp-page/ __tests__/api/mcp-health __tests__/i18n\r\nnpm run make-i18n\r\nnpm run check-translation-completeness\r\nnpm run lint\r\n```\r\n\r\n- Vitest: 13 files, 103 tests passed (after rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18018"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18018; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17932,
      "title": "[Bug]: Settings save retries a 422 validation error three times before showing it",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17932",
      "created_at": "2026-10-05T01:14:54Z",
      "updated_at": "2026-10-13T22:05:18Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [],
      "proposed_prs": [],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "alling a catalog STDIO MCP server twice leaves the second copy without its catalog identity\n- OpenHands/OpenHands#17931: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real error\n- OpenHands/OpenHands#17932: Settings save retries a 422 validation error three times before showing it\n- OpenHands/OpenHands#17933: Escape does not close several menus and popovers (sidebar card ⋮ menu, context-window popover, Overview ⋯ menu, command menu with an option focused)\n- OpenHands/OpenHands#17934: LLM profile row menu is not keyboard-operable: focus stays on the "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "\n| #18396 | F08: File discovery dialog wider than a phone | no (since #17869) | #18398 |\n\nLinked instead of filed: the MCP add and delete requests sent three times go on #17932 (same `withRetry` cause). The ACP auth banners at 1.10:1 and 1.26:1 in Light+ go on #18004. Clearing the time and saving midnight is a new path for #17948; open PR #18260 changes only the now-unused "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17933,
      "title": "[Bug]: Escape does not close several menus and popovers (sidebar card ⋮ menu, context-window popover, Overview ⋯ menu, command menu with an option focused)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17933",
      "created_at": "2026-10-05T01:15:18Z",
      "updated_at": "2026-10-06T04:31:35Z",
      "state": "closed",
      "closed_at": "2026-10-06T04:31:35Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds shared Escape dismissal and focus restoration for the menus and popovers listed in this issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r is open (new optional `isDisabled` pass-through on `StyledTooltip`), because HeroUI's tooltip handles Escape in the capture phase and would otherwise swallow it once focus returns to the meter.\n\n## Issue Number\n\nFixes #17933\n\n## How to Test\n\nUnit tests, lint and formatting (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/hooks/use-close-on-escape.test.tsx \\\n  __tests__/components/features/command-menu/ \\\n  __tests__/components/features/sidebar/ \\\n  __tests__/components/features/conversation-panel/ \\\n  __tests__/components/features/chat/components"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds shared Escape dismissal and focus restoration for the menus and popovers listed in this issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r is open (new optional `isDisabled` pass-through on `StyledTooltip`), because HeroUI's tooltip handles Escape in the capture phase and would otherwise swallow it once focus returns to the meter.\n\n## Issue Number\n\nFixes #17933\n\n## How to Test\n\nUnit tests, lint and formatting (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/hooks/use-close-on-escape.test.tsx \\\n  __tests__/components/features/command-menu/ \\\n  __tests__/components/features/sidebar/ \\\n  __tests__/components/features/conversation-panel/ \\\n  __tests__/components/features/chat/components"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purpose. software-agent-sdk#5531, whic",
              "OpenHands#17931: A failed STDIO MCP connection test says \"Check the URL and server type\" and hides the real error\n- OpenHands/OpenHands#17932: Settings save retries a 422 validation error three times before showing it\n- OpenHands/OpenHands#17933: Escape does not close several menus and popovers (sidebar card ⋮ menu, context-window popover, Overview ⋯ menu, command menu with an option focused)\n- OpenHands/OpenHands#17934: LLM profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at a disabled item\n- OpenHands/OpenHands#17935: Icon-only buttons in the co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Fits and dismisses the conversation header menu.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "int (no one-frame flash).\r\n- Out of scope: Tab does not move focus into the portaled menu, because the portal sits at the end of `body`. That belongs with #17934 and #15431. The Escape gaps in other menus are tracked in #17933.\r\n- Follow-up for #17961 (verify-openhands feature map): once this lands, update F07's Gotchas line about the \"⋯\" menu ignoring Escape and the 390px overflow note, and drop the \"fails today\" remark in the `F07.phone` recipe.\r\n- Non-blocking review remarks:\r\n  - The new clamp test's `getBoundingClientRect` spy is never restored. Adding `vi.restoreA"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly tracks Escape gaps in other menus separately under #17933."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "om older map rows: #18094, Escape does not close the composer `+` menu (F05), the status-dot menu (F07) or the drawer tabs menu (F08), which #18044 left out of its Escape fix. Those three rows now link it instead of the #17933 comment.\n- The screenshots are pinned to commit 67b6f7198, because the PR Artifacts workflow removes `.pr/` from the branch on approval.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:*"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18095,
          "title": "fix(a11y): close the tools, status and tabs menus on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18095",
          "created_at": "2026-10-07T00:09:21Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "closed_at": "2026-10-07T01:05:48Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Adds Escape handling for plus/status/tab menus omitted by the original fix.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "re the Escape stack from #18044, so one Escape closes only the most recently opened layer.\n\n## Why\n\n#18044 added `useCloseOnEscape`: one `document` listener and a stack of open layers. It registered the popups listed in #17933, but not these three menus, which closed only on an outside click, a second click on the trigger, or choosing an item:\n\n- Escape left each menu open, with focus still on the trigger or inside the menu.\n- Because the menus were not on the hook's stack, Escape skipped them even when they were on top. With the status menu opened by hover over the con"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18095"
            ]
          },
          "direct_closer": false,
          "reason": "These are separate follow-up menus filed as #18094; the reference explains prior #17933 work, not implementation of its original listed popups."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds shared Escape dismissal and focus restoration for the menus and popovers listed in this issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r is open (new optional `isDisabled` pass-through on `StyledTooltip`), because HeroUI's tooltip handles Escape in the capture phase and would otherwise swallow it once focus returns to the meter.\n\n## Issue Number\n\nFixes #17933\n\n## How to Test\n\nUnit tests, lint and formatting (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/hooks/use-close-on-escape.test.tsx \\\n  __tests__/components/features/command-menu/ \\\n  __tests__/components/features/sidebar/ \\\n  __tests__/components/features/conversation-panel/ \\\n  __tests__/components/features/chat/components"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18044,
          "title": "fix(a11y): close menus and popovers on Escape and return focus",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18044",
          "created_at": "2026-10-05T22:14:11Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "closed_at": "2026-10-06T04:31:34Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Adds shared Escape dismissal and focus restoration for the menus and popovers listed in this issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r is open (new optional `isDisabled` pass-through on `StyledTooltip`), because HeroUI's tooltip handles Escape in the capture phase and would otherwise swallow it once focus returns to the meter.\n\n## Issue Number\n\nFixes #17933\n\n## How to Test\n\nUnit tests, lint and formatting (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/hooks/use-close-on-escape.test.tsx \\\n  __tests__/components/features/command-menu/ \\\n  __tests__/components/features/sidebar/ \\\n  __tests__/components/features/conversation-panel/ \\\n  __tests__/components/features/chat/components"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18044"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18044; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17934,
      "title": "[Bug]: LLM profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at a disabled item",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17934",
      "created_at": "2026-10-05T01:15:39Z",
      "updated_at": "2026-10-06T00:56:15Z",
      "state": "closed",
      "closed_at": "2026-10-06T00:56:15Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18019,
          "title": "fix(settings): make the LLM profile row menu keyboard-operable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18019",
          "created_at": "2026-10-05T20:46:01Z",
          "updated_at": "2026-10-08T20:39:10Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:56:13Z",
          "closed_at": "2026-10-06T00:56:13Z",
          "head_sha": "58b3930d580807c7e801ad9cef774f50e5a1d23e",
          "scope": "Makes LLM profile row menu focus and enabled-item keyboard navigation work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ocus to the row's ⋮ button before closing. Without this, Tab from the portaled menu (rendered at the end of `<body>`) would jump to the top of the page. Tab now continues to the next control.\r\n\r\n## Issue Number\r\n\r\nFixes #17934\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/profile-actions-menu.test.tsx\r\nnpx vitest run __tests__/components/settings/llm-profiles\r\nnpx eslint src\r\n```\r\n\r\n- `profile-actions-menu.test.tsx`: 29/29 pass. With the old component restored, 4 of the new tests fail: skipping the disabl",
              "\r\n\r\n## Notes\r\n\r\n- Scope follows the triage: only `profile-actions-menu.tsx` changes. The shared `MenuItem` is untouched, so the agent-profile, provider-connection and meta-profile menus behave as before. The comments on #17934 note that the agent-profile and provider-connection menus have the same problems. Those are good follow-ups, possibly with a shared helper.\r\n- Not covered here (from review, non-blocking): when an item is chosen with the keyboard (for example Enter on \"Set as default\"), the menu unmounts and focus falls to `<body>`. This is not a regression, since"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18019"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18019,
          "title": "fix(settings): make the LLM profile row menu keyboard-operable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18019",
          "created_at": "2026-10-05T20:46:01Z",
          "updated_at": "2026-10-08T20:39:10Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:56:13Z",
          "closed_at": "2026-10-06T00:56:13Z",
          "head_sha": "58b3930d580807c7e801ad9cef774f50e5a1d23e",
          "scope": "Makes LLM profile row menu focus and enabled-item keyboard navigation work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ocus to the row's ⋮ button before closing. Without this, Tab from the portaled menu (rendered at the end of `<body>`) would jump to the top of the page. Tab now continues to the next control.\r\n\r\n## Issue Number\r\n\r\nFixes #17934\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/profile-actions-menu.test.tsx\r\nnpx vitest run __tests__/components/settings/llm-profiles\r\nnpx eslint src\r\n```\r\n\r\n- `profile-actions-menu.test.tsx`: 29/29 pass. With the old component restored, 4 of the new tests fail: skipping the disabl",
              "\r\n\r\n## Notes\r\n\r\n- Scope follows the triage: only `profile-actions-menu.tsx` changes. The shared `MenuItem` is untouched, so the agent-profile, provider-connection and meta-profile menus behave as before. The comments on #17934 note that the agent-profile and provider-connection menus have the same problems. Those are good follow-ups, possibly with a shared helper.\r\n- Not covered here (from review, non-blocking): when an item is chosen with the keyboard (for example Enter on \"Set as default\"), the menu unmounts and focus falls to `<body>`. This is not a regression, since"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18019"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ion error three times before showing it\n- OpenHands/OpenHands#17933: Escape does not close several menus and popovers (sidebar card ⋮ menu, context-window popover, Overview ⋯ menu, command menu with an option focused)\n- OpenHands/OpenHands#17934: LLM profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at a disabled item\n- OpenHands/OpenHands#17935: Icon-only buttons in the composer and conversation drawer have no accessible name\n- OpenHands/OpenHands#17936: A failed conversation launch from Home shows duplicated error toasts and clears the typed prom"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18028,
          "title": "fix(conversation): keep the header \"⋯\" menu on screen and close it on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18028",
          "created_at": "2026-10-05T21:13:25Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "closed_at": "2026-10-06T01:16:32Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Fits and dismisses the conversation header menu.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "tAnimationFrame` re-run, so the clamp applies before the first paint (no one-frame flash).\r\n- Out of scope: Tab does not move focus into the portaled menu, because the portal sits at the end of `body`. That belongs with #17934 and #15431. The Escape gaps in other menus are tracked in #17933.\r\n- Follow-up for #17961 (verify-openhands feature map): once this lands, update F07's Gotchas line about the \"⋯\" menu ignoring Escape and the 390px overflow note, and drop the \"fails today\" remark in the `F07.phone` recipe.\r\n- Non-blocking review remarks:\r\n  - The new clamp test's `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18028"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves keyboard portal/focus work out of scope under #17934 and #15431."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18019,
          "title": "fix(settings): make the LLM profile row menu keyboard-operable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18019",
          "created_at": "2026-10-05T20:46:01Z",
          "updated_at": "2026-10-08T20:39:10Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:56:13Z",
          "closed_at": "2026-10-06T00:56:13Z",
          "head_sha": "58b3930d580807c7e801ad9cef774f50e5a1d23e",
          "scope": "Makes LLM profile row menu focus and enabled-item keyboard navigation work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ocus to the row's ⋮ button before closing. Without this, Tab from the portaled menu (rendered at the end of `<body>`) would jump to the top of the page. Tab now continues to the next control.\r\n\r\n## Issue Number\r\n\r\nFixes #17934\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/profile-actions-menu.test.tsx\r\nnpx vitest run __tests__/components/settings/llm-profiles\r\nnpx eslint src\r\n```\r\n\r\n- `profile-actions-menu.test.tsx`: 29/29 pass. With the old component restored, 4 of the new tests fail: skipping the disabl",
              "\r\n\r\n## Notes\r\n\r\n- Scope follows the triage: only `profile-actions-menu.tsx` changes. The shared `MenuItem` is untouched, so the agent-profile, provider-connection and meta-profile menus behave as before. The comments on #17934 note that the agent-profile and provider-connection menus have the same problems. Those are good follow-ups, possibly with a shared helper.\r\n- Not covered here (from review, non-blocking): when an item is chosen with the keyboard (for example Enter on \"Set as default\"), the menu unmounts and focus falls to `<body>`. This is not a regression, since"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18019"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18019,
          "title": "fix(settings): make the LLM profile row menu keyboard-operable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18019",
          "created_at": "2026-10-05T20:46:01Z",
          "updated_at": "2026-10-08T20:39:10Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:56:13Z",
          "closed_at": "2026-10-06T00:56:13Z",
          "head_sha": "58b3930d580807c7e801ad9cef774f50e5a1d23e",
          "scope": "Makes LLM profile row menu focus and enabled-item keyboard navigation work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ocus to the row's ⋮ button before closing. Without this, Tab from the portaled menu (rendered at the end of `<body>`) would jump to the top of the page. Tab now continues to the next control.\r\n\r\n## Issue Number\r\n\r\nFixes #17934\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/components/settings/llm-profiles/profile-actions-menu.test.tsx\r\nnpx vitest run __tests__/components/settings/llm-profiles\r\nnpx eslint src\r\n```\r\n\r\n- `profile-actions-menu.test.tsx`: 29/29 pass. With the old component restored, 4 of the new tests fail: skipping the disabl",
              "\r\n\r\n## Notes\r\n\r\n- Scope follows the triage: only `profile-actions-menu.tsx` changes. The shared `MenuItem` is untouched, so the agent-profile, provider-connection and meta-profile menus behave as before. The comments on #17934 note that the agent-profile and provider-connection menus have the same problems. Those are good follow-ups, possibly with a shared helper.\r\n- Not covered here (from review, non-blocking): when an item is chosen with the keyboard (for example Enter on \"Set as default\"), the menu unmounts and focus falls to `<body>`. This is not a regression, since"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18019"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18019; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17935,
      "title": "[Bug]: Icon-only buttons in the composer and conversation drawer have no accessible name",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17935",
      "created_at": "2026-10-05T01:15:58Z",
      "updated_at": "2026-10-06T05:17:14Z",
      "state": "closed",
      "closed_at": "2026-10-06T05:17:14Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18033,
          "title": "fix(a11y): name the icon-only composer and diff viewer buttons",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18033",
          "created_at": "2026-10-05T21:22:07Z",
          "updated_at": "2026-10-08T20:38:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:17:12Z",
          "closed_at": "2026-10-06T05:17:12Z",
          "head_sha": "682a6830b738fd70d6858c47d77c26aad295ae7b",
          "scope": "Adds accessible names to icon-only composer and conversation/diff controls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lapsed and \"Collapse\" while expanded.\n- **Tests and translations:** focused tests render the real components and query each button by role and name. All new keys are translated into every locale.\n\n## Issue Number\n\nFixes #17935\n\n## How to Test\n\n**Unit tests and checks:**\n```bash\nnpx vitest run __tests__/components/features/chat/remove-file-button.test.tsx \\\n  __tests__/components/features/diff-viewer/ \\\n  __tests__/components/features/conversation/agent-status.test.tsx \\\n  __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run make-i18n && node"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18033"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18033,
          "title": "fix(a11y): name the icon-only composer and diff viewer buttons",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18033",
          "created_at": "2026-10-05T21:22:07Z",
          "updated_at": "2026-10-08T20:38:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:17:12Z",
          "closed_at": "2026-10-06T05:17:12Z",
          "head_sha": "682a6830b738fd70d6858c47d77c26aad295ae7b",
          "scope": "Adds accessible names to icon-only composer and conversation/diff controls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lapsed and \"Collapse\" while expanded.\n- **Tests and translations:** focused tests render the real components and query each button by role and name. All new keys are translated into every locale.\n\n## Issue Number\n\nFixes #17935\n\n## How to Test\n\n**Unit tests and checks:**\n```bash\nnpx vitest run __tests__/components/features/chat/remove-file-button.test.tsx \\\n  __tests__/components/features/diff-viewer/ \\\n  __tests__/components/features/conversation/agent-status.test.tsx \\\n  __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run make-i18n && node"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18033"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "8019, #18021–#18024, #18027, #18028, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind sta",
              "text-window popover, Overview ⋯ menu, command menu with an option focused)\n- OpenHands/OpenHands#17934: LLM profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at a disabled item\n- OpenHands/OpenHands#17935: Icon-only buttons in the composer and conversation drawer have no accessible name\n- OpenHands/OpenHands#17936: A failed conversation launch from Home shows duplicated error toasts and clears the typed prompt\n- OpenHands/OpenHands#17937: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename\n- OpenHands/OpenHa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18033,
          "title": "fix(a11y): name the icon-only composer and diff viewer buttons",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18033",
          "created_at": "2026-10-05T21:22:07Z",
          "updated_at": "2026-10-08T20:38:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:17:12Z",
          "closed_at": "2026-10-06T05:17:12Z",
          "head_sha": "682a6830b738fd70d6858c47d77c26aad295ae7b",
          "scope": "Adds accessible names to icon-only composer and conversation/diff controls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lapsed and \"Collapse\" while expanded.\n- **Tests and translations:** focused tests render the real components and query each button by role and name. All new keys are translated into every locale.\n\n## Issue Number\n\nFixes #17935\n\n## How to Test\n\n**Unit tests and checks:**\n```bash\nnpx vitest run __tests__/components/features/chat/remove-file-button.test.tsx \\\n  __tests__/components/features/diff-viewer/ \\\n  __tests__/components/features/conversation/agent-status.test.tsx \\\n  __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run make-i18n && node"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18033"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18033,
          "title": "fix(a11y): name the icon-only composer and diff viewer buttons",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18033",
          "created_at": "2026-10-05T21:22:07Z",
          "updated_at": "2026-10-08T20:38:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:17:12Z",
          "closed_at": "2026-10-06T05:17:12Z",
          "head_sha": "682a6830b738fd70d6858c47d77c26aad295ae7b",
          "scope": "Adds accessible names to icon-only composer and conversation/diff controls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lapsed and \"Collapse\" while expanded.\n- **Tests and translations:** focused tests render the real components and query each button by role and name. All new keys are translated into every locale.\n\n## Issue Number\n\nFixes #17935\n\n## How to Test\n\n**Unit tests and checks:**\n```bash\nnpx vitest run __tests__/components/features/chat/remove-file-button.test.tsx \\\n  __tests__/components/features/diff-viewer/ \\\n  __tests__/components/features/conversation/agent-status.test.tsx \\\n  __tests__/components/features/chat/components/chat-input-actions.test.tsx\nnpm run make-i18n && node"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18033"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18033; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17936,
      "title": "[Bug]: A failed conversation launch from Home shows duplicated error toasts and clears the typed prompt",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17936",
      "created_at": "2026-10-05T01:16:26Z",
      "updated_at": "2026-10-08T10:57:36Z",
      "state": "closed",
      "closed_at": "2026-10-08T10:57:36Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17985,
          "title": "fix(home): show one error toast and keep the prompt when a launch fails",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17985",
          "created_at": "2026-10-05T12:06:41Z",
          "updated_at": "2026-10-08T20:37:02Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T10:57:34Z",
          "closed_at": "2026-10-08T10:57:34Z",
          "head_sha": "abcc5717c574e5ac961d571b5b28201594d2cd3a",
          "scope": "Reports a failed Home conversation launch once and retains the typed prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "onversation composer.\n\nNo new toast path, no change to the Agent Server's 422, and the MCP settings\npage (deleting a server that a profile still references) is untouched, as\nscoped in the triage.\n\n## Issue Number\n\nFixes #17936\n\n## How to Test\n\nAutomated (the new suite runs the real composer, conversation store, toast\nhandlers and `createAgentServerQueryClient()`; only the network-facing services\nare mocked):\n\n```\nnpm run lint\nnpx vitest run __tests__/components/features/home __tests__/utils/api-error-message.test.ts\n```\n\n`home-chat-launcher-failed-launch.test.tsx` fails"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17985"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17985,
          "title": "fix(home): show one error toast and keep the prompt when a launch fails",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17985",
          "created_at": "2026-10-05T12:06:41Z",
          "updated_at": "2026-10-08T20:37:02Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T10:57:34Z",
          "closed_at": "2026-10-08T10:57:34Z",
          "head_sha": "abcc5717c574e5ac961d571b5b28201594d2cd3a",
          "scope": "Reports a failed Home conversation launch once and retains the typed prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "onversation composer.\n\nNo new toast path, no change to the Agent Server's 422, and the MCP settings\npage (deleting a server that a profile still references) is untouched, as\nscoped in the triage.\n\n## Issue Number\n\nFixes #17936\n\n## How to Test\n\nAutomated (the new suite runs the real composer, conversation store, toast\nhandlers and `createAgentServerQueryClient()`; only the network-facing services\nare mocked):\n\n```\nnpm run lint\nnpx vitest run __tests__/components/features/home __tests__/utils/api-error-message.test.ts\n```\n\n`home-chat-launcher-failed-launch.test.tsx` fails"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17985"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "file row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at a disabled item\n- OpenHands/OpenHands#17935: Icon-only buttons in the composer and conversation drawer have no accessible name\n- OpenHands/OpenHands#17936: A failed conversation launch from Home shows duplicated error toasts and clears the typed prompt\n- OpenHands/OpenHands#17937: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename\n- OpenHands/OpenHands#17938: LLM and agent profile editors silently disable Save for a duplicate name, with no message\n- OpenHand"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17985,
          "title": "fix(home): show one error toast and keep the prompt when a launch fails",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17985",
          "created_at": "2026-10-05T12:06:41Z",
          "updated_at": "2026-10-08T20:37:02Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T10:57:34Z",
          "closed_at": "2026-10-08T10:57:34Z",
          "head_sha": "abcc5717c574e5ac961d571b5b28201594d2cd3a",
          "scope": "Reports a failed Home conversation launch once and retains the typed prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "onversation composer.\n\nNo new toast path, no change to the Agent Server's 422, and the MCP settings\npage (deleting a server that a profile still references) is untouched, as\nscoped in the triage.\n\n## Issue Number\n\nFixes #17936\n\n## How to Test\n\nAutomated (the new suite runs the real composer, conversation store, toast\nhandlers and `createAgentServerQueryClient()`; only the network-facing services\nare mocked):\n\n```\nnpm run lint\nnpx vitest run __tests__/components/features/home __tests__/utils/api-error-message.test.ts\n```\n\n`home-chat-launcher-failed-launch.test.tsx` fails"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17985"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17985,
          "title": "fix(home): show one error toast and keep the prompt when a launch fails",
          "author": "errmakov",
          "author_url": "https://github.com/errmakov",
          "url": "https://github.com/OpenHands/OpenHands/pull/17985",
          "created_at": "2026-10-05T12:06:41Z",
          "updated_at": "2026-10-08T20:37:02Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T10:57:34Z",
          "closed_at": "2026-10-08T10:57:34Z",
          "head_sha": "abcc5717c574e5ac961d571b5b28201594d2cd3a",
          "scope": "Reports a failed Home conversation launch once and retains the typed prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "onversation composer.\n\nNo new toast path, no change to the Agent Server's 422, and the MCP settings\npage (deleting a server that a profile still references) is untouched, as\nscoped in the triage.\n\n## Issue Number\n\nFixes #17936\n\n## How to Test\n\nAutomated (the new suite runs the real composer, conversation store, toast\nhandlers and `createAgentServerQueryClient()`; only the network-facing services\nare mocked):\n\n```\nnpm run lint\nnpx vitest run __tests__/components/features/home __tests__/utils/api-error-message.test.ts\n```\n\n`home-chat-launcher-failed-launch.test.tsx` fails"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17985"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17985; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17937,
      "title": "[Bug]: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17937",
      "created_at": "2026-10-05T01:16:52Z",
      "updated_at": "2026-10-06T01:01:29Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:01:29Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18030,
          "title": "fix(settings): show the server's message instead of raw HttpError text in profile error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18030",
          "created_at": "2026-10-05T21:15:20Z",
          "updated_at": "2026-10-08T20:39:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:27Z",
          "closed_at": "2026-10-06T01:01:28Z",
          "head_sha": "72ee3e483084dd368d04c26179a6dae08a7b0f76",
          "scope": "Shows server messages instead of raw SDK HTTP transport text in model/profile error toasts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ugh `getApiErrorMessage`, and `isSdkHttpError` moved into a leaf module, `src/utils/sdk-http-error.ts`. It is still re-exported from `agent-server-compatibility.ts`, so existing imports work.\r\n\r\n## Issue Number\r\n\r\nFixes #17937\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/api-error-message.test.ts \\\r\n  __tests__/hooks/mutation/use-switch-llm-profile.test.tsx \\\r\n  __tests__/components/settings/llm-profiles/\r\nnpm run lint\r\n```\r\n\r\n- On this branch, rebased onto `main` at `53ad0012f`: the tests above plus the agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18030"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18030,
          "title": "fix(settings): show the server's message instead of raw HttpError text in profile error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18030",
          "created_at": "2026-10-05T21:15:20Z",
          "updated_at": "2026-10-08T20:39:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:27Z",
          "closed_at": "2026-10-06T01:01:28Z",
          "head_sha": "72ee3e483084dd368d04c26179a6dae08a7b0f76",
          "scope": "Shows server messages instead of raw SDK HTTP transport text in model/profile error toasts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ugh `getApiErrorMessage`, and `isSdkHttpError` moved into a leaf module, `src/utils/sdk-http-error.ts`. It is still re-exported from `agent-server-compatibility.ts`, so existing imports work.\r\n\r\n## Issue Number\r\n\r\nFixes #17937\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/api-error-message.test.ts \\\r\n  __tests__/hooks/mutation/use-switch-llm-profile.test.tsx \\\r\n  __tests__/components/settings/llm-profiles/\r\nnpm run lint\r\n```\r\n\r\n- On this branch, rebased onto `main` at `53ad0012f`: the tests above plus the agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18030"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ds#17935: Icon-only buttons in the composer and conversation drawer have no accessible name\n- OpenHands/OpenHands#17936: A failed conversation launch from Home shows duplicated error toasts and clears the typed prompt\n- OpenHands/OpenHands#17937: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename\n- OpenHands/OpenHands#17938: LLM and agent profile editors silently disable Save for a duplicate name, with no message\n- OpenHands/OpenHands#17939: UI copy errors: raw schema text and reStructuredText, untranslated labels, a literal \\n, wrong labels and a"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18025,
          "title": "fix(plugins,apps): show the server's reason once for failed installs and updates",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18025",
          "created_at": "2026-10-05T21:03:12Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "closed_at": "2026-10-06T20:36:08Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Fixes plugin/App installation error messages.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ". `displayErrorToast` still reclassifies raw strings for its other callers, many of which rely on that to catch real \"Failed to fetch\" TypeErrors. The global MutationCache/QueryCache raw \"HTTP request failed\" wording is #17937's scope.\n- Behind the Canvas ingress, a stopped Agent Server answers 502 with a plain-text body \"Bad Gateway: connect ECONNREFUSED …\". Since #18030, an `HttpError` without a usable JSON body shows the localized fallback, so the plugin hooks now show \"An error occurred\" once (on main, the raw \"HTTP request failed (502 Bad Gateway): …\" text showed t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18025"
            ]
          },
          "direct_closer": false,
          "reason": "The PR leaves generic/global raw HTTP-error wording to separate #17937 work."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18030,
          "title": "fix(settings): show the server's message instead of raw HttpError text in profile error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18030",
          "created_at": "2026-10-05T21:15:20Z",
          "updated_at": "2026-10-08T20:39:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:27Z",
          "closed_at": "2026-10-06T01:01:28Z",
          "head_sha": "72ee3e483084dd368d04c26179a6dae08a7b0f76",
          "scope": "Shows server messages instead of raw SDK HTTP transport text in model/profile error toasts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ugh `getApiErrorMessage`, and `isSdkHttpError` moved into a leaf module, `src/utils/sdk-http-error.ts`. It is still re-exported from `agent-server-compatibility.ts`, so existing imports work.\r\n\r\n## Issue Number\r\n\r\nFixes #17937\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/api-error-message.test.ts \\\r\n  __tests__/hooks/mutation/use-switch-llm-profile.test.tsx \\\r\n  __tests__/components/settings/llm-profiles/\r\nnpm run lint\r\n```\r\n\r\n- On this branch, rebased onto `main` at `53ad0012f`: the tests above plus the agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18030"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18030,
          "title": "fix(settings): show the server's message instead of raw HttpError text in profile error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18030",
          "created_at": "2026-10-05T21:15:20Z",
          "updated_at": "2026-10-08T20:39:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:27Z",
          "closed_at": "2026-10-06T01:01:28Z",
          "head_sha": "72ee3e483084dd368d04c26179a6dae08a7b0f76",
          "scope": "Shows server messages instead of raw SDK HTTP transport text in model/profile error toasts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ugh `getApiErrorMessage`, and `isSdkHttpError` moved into a leaf module, `src/utils/sdk-http-error.ts`. It is still re-exported from `agent-server-compatibility.ts`, so existing imports work.\r\n\r\n## Issue Number\r\n\r\nFixes #17937\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/api-error-message.test.ts \\\r\n  __tests__/hooks/mutation/use-switch-llm-profile.test.tsx \\\r\n  __tests__/components/settings/llm-profiles/\r\nnpm run lint\r\n```\r\n\r\n- On this branch, rebased onto `main` at `53ad0012f`: the tests above plus the agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18030"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18030; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17938,
      "title": "[Bug]: LLM and agent profile editors silently disable Save for a duplicate name, with no message",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17938",
      "created_at": "2026-10-05T01:17:10Z",
      "updated_at": "2026-10-11T03:01:47Z",
      "state": "closed",
      "closed_at": "2026-10-11T03:01:47Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18144,
          "title": "fix(settings): flag taken names in the LLM and agent profile editors",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18144",
          "created_at": "2026-10-08T08:16:45Z",
          "updated_at": "2026-10-12T15:07:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:01:46Z",
          "closed_at": "2026-10-11T03:01:46Z",
          "head_sha": "cd9b0044458b8164c5ba038d3e3d0e37bf27cd37",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " format-valid name matches another profile. Edit mode still accepts the profile's own name, and Save stays disabled as before.\r\n- New tests in both view test files cover create and edit mode.\r\n\r\n## Issue Number\r\n\r\nFixes #17938\r\n\r\n## How to Test\r\n\r\n1. Start a local stack (I used `control-openhands launch`) and add an LLM profile named `deepseek-pro`.\r\n2. Open Settings > LLM > Add LLM Profile and type `deepseek-pro`, then Settings > Agents > Add agent profile and type `default`.\r\n3. On main Save is disabled and nothing else changes. With this change the field is marked in"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18144"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18245,
          "title": "fix(settings): surface duplicate name error in profile editors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18245",
          "created_at": "2026-10-09T15:31:52Z",
          "updated_at": "2026-10-11T23:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:55Z",
          "head_sha": "e74028337aa994657d44ae9de6e761ed0b872a9a",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " name that already belongs to an existing profile silently disabled the Save button with no feedback. The name input remained marked valid (`aria-invalid=\"false\"`), and no message explained why saving was blocked (issue #17938).\n\n`ProfileNameInput` computed `isValid` and its error styling solely based on the structural format check (`isProfileNameValid`). Both `LlmSettingsLocalView` and `AgentProfilesLocalView` checked for duplicate names inside their local `isNameValid` memo, but neither passed any duplicate or error state to `ProfileNameInput`. Consequently, duplicate",
              "create mode duplicate error and edit mode own-name allowance.\n  - Added tests in `__tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx` for create mode duplicate error.\n\n## Issue Number\n\nFixes #17938\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/settings/llm-profiles/profile-name-input.test.tsx __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx __tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx\n```\n\nAll 75 tests pass cleanly:\n```text\n Test Files  3 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18245"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18144,
          "title": "fix(settings): flag taken names in the LLM and agent profile editors",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18144",
          "created_at": "2026-10-08T08:16:45Z",
          "updated_at": "2026-10-12T15:07:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:01:46Z",
          "closed_at": "2026-10-11T03:01:46Z",
          "head_sha": "cd9b0044458b8164c5ba038d3e3d0e37bf27cd37",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " format-valid name matches another profile. Edit mode still accepts the profile's own name, and Save stays disabled as before.\r\n- New tests in both view test files cover create and edit mode.\r\n\r\n## Issue Number\r\n\r\nFixes #17938\r\n\r\n## How to Test\r\n\r\n1. Start a local stack (I used `control-openhands launch`) and add an LLM profile named `deepseek-pro`.\r\n2. Open Settings > LLM > Add LLM Profile and type `deepseek-pro`, then Settings > Agents > Add agent profile and type `default`.\r\n3. On main Save is disabled and nothing else changes. With this change the field is marked in"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18144"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18245,
          "title": "fix(settings): surface duplicate name error in profile editors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18245",
          "created_at": "2026-10-09T15:31:52Z",
          "updated_at": "2026-10-11T23:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:55Z",
          "head_sha": "e74028337aa994657d44ae9de6e761ed0b872a9a",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " name that already belongs to an existing profile silently disabled the Save button with no feedback. The name input remained marked valid (`aria-invalid=\"false\"`), and no message explained why saving was blocked (issue #17938).\n\n`ProfileNameInput` computed `isValid` and its error styling solely based on the structural format check (`isProfileNameValid`). Both `LlmSettingsLocalView` and `AgentProfilesLocalView` checked for duplicate names inside their local `isNameValid` memo, but neither passed any duplicate or error state to `ProfileNameInput`. Consequently, duplicate",
              "create mode duplicate error and edit mode own-name allowance.\n  - Added tests in `__tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx` for create mode duplicate error.\n\n## Issue Number\n\nFixes #17938\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/settings/llm-profiles/profile-name-input.test.tsx __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx __tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx\n```\n\nAll 75 tests pass cleanly:\n```text\n Test Files  3 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18245"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " failed conversation launch from Home shows duplicated error toasts and clears the typed prompt\n- OpenHands/OpenHands#17937: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename\n- OpenHands/OpenHands#17938: LLM and agent profile editors silently disable Save for a duplicate name, with no message\n- OpenHands/OpenHands#17939: UI copy errors: raw schema text and reStructuredText, untranslated labels, a literal \\n, wrong labels and a dead example link\n- OpenHands/OpenHands#17940: Conversation drawer at phone width: agent and file-link tab opens do nothi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "**\n  - #17915 (F04/F07 confirm-button test ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18144,
          "title": "fix(settings): flag taken names in the LLM and agent profile editors",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18144",
          "created_at": "2026-10-08T08:16:45Z",
          "updated_at": "2026-10-12T15:07:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:01:46Z",
          "closed_at": "2026-10-11T03:01:46Z",
          "head_sha": "cd9b0044458b8164c5ba038d3e3d0e37bf27cd37",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " format-valid name matches another profile. Edit mode still accepts the profile's own name, and Save stays disabled as before.\r\n- New tests in both view test files cover create and edit mode.\r\n\r\n## Issue Number\r\n\r\nFixes #17938\r\n\r\n## How to Test\r\n\r\n1. Start a local stack (I used `control-openhands launch`) and add an LLM profile named `deepseek-pro`.\r\n2. Open Settings > LLM > Add LLM Profile and type `deepseek-pro`, then Settings > Agents > Add agent profile and type `default`.\r\n3. On main Save is disabled and nothing else changes. With this change the field is marked in"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18144"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18144,
          "title": "fix(settings): flag taken names in the LLM and agent profile editors",
          "author": "awss1i",
          "author_url": "https://github.com/awss1i",
          "url": "https://github.com/OpenHands/OpenHands/pull/18144",
          "created_at": "2026-10-08T08:16:45Z",
          "updated_at": "2026-10-12T15:07:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:01:46Z",
          "closed_at": "2026-10-11T03:01:46Z",
          "head_sha": "cd9b0044458b8164c5ba038d3e3d0e37bf27cd37",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " format-valid name matches another profile. Edit mode still accepts the profile's own name, and Save stays disabled as before.\r\n- New tests in both view test files cover create and edit mode.\r\n\r\n## Issue Number\r\n\r\nFixes #17938\r\n\r\n## How to Test\r\n\r\n1. Start a local stack (I used `control-openhands launch`) and add an LLM profile named `deepseek-pro`.\r\n2. Open Settings > LLM > Add LLM Profile and type `deepseek-pro`, then Settings > Agents > Add agent profile and type `default`.\r\n3. On main Save is disabled and nothing else changes. With this change the field is marked in"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18144"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18245,
          "title": "fix(settings): surface duplicate name error in profile editors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18245",
          "created_at": "2026-10-09T15:31:52Z",
          "updated_at": "2026-10-11T23:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:55Z",
          "head_sha": "e74028337aa994657d44ae9de6e761ed0b872a9a",
          "scope": "Shows a duplicate-name error in LLM and agent profile editors.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " name that already belongs to an existing profile silently disabled the Save button with no feedback. The name input remained marked valid (`aria-invalid=\"false\"`), and no message explained why saving was blocked (issue #17938).\n\n`ProfileNameInput` computed `isValid` and its error styling solely based on the structural format check (`isProfileNameValid`). Both `LlmSettingsLocalView` and `AgentProfilesLocalView` checked for duplicate names inside their local `isNameValid` memo, but neither passed any duplicate or error state to `ProfileNameInput`. Consequently, duplicate",
              "create mode duplicate error and edit mode own-name allowance.\n  - Added tests in `__tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx` for create mode duplicate error.\n\n## Issue Number\n\nFixes #17938\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/settings/llm-profiles/profile-name-input.test.tsx __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx __tests__/components/settings/agent-profiles/agent-profiles-local-view.test.tsx\n```\n\nAll 75 tests pass cleanly:\n```text\n Test Files  3 "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18245"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18144; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17939,
      "title": "[Bug]: UI copy errors: raw schema text and reStructuredText, untranslated labels, a literal \\n, wrong labels and a dead example link",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17939",
      "created_at": "2026-10-05T01:17:50Z",
      "updated_at": "2026-10-06T05:23:09Z",
      "state": "closed",
      "closed_at": "2026-10-06T05:23:09Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18035,
          "title": "fix(settings): correct UI copy on settings, MCP and skills pages",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18035",
          "created_at": "2026-10-05T21:32:10Z",
          "updated_at": "2026-10-08T20:38:11Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:23:07Z",
          "closed_at": "2026-10-06T05:23:07Z",
          "head_sha": "cde254eb4cc87f0b89faf7706e922224cce68e5a",
          "scope": "Corrects the reported schema/copy/i18n/accessibility/link mistakes on settings, MCP and Skills pages.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ne of the results.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the seven UI copy defects in #17939 across the settings, MCP and Skills pages: a literal `\\n`, raw SDK schema text and reStructuredText, missing translations, a reused LLM hint, a wrong accessible name, a dead example link and an outdated page description.\n\n## Why\n\nUsers saw developer text and mistakes in the UI:\n- The Model Router \"Model table\" placeholder showed a literal `\\n`.\n- ",
              "tion of every pinned-server schema field and choice with no warnings, the agent editor hint, the MCP accessible name, the example skill existing in the bundled catalog, and the Skills modal text.\n\n## Issue Number\n\nFixes #17939\n\n## How to Test\n\nUnit tests and checks (from the repo root):\n\n```bash\nnpm run make-i18n\nnode scripts/check-translation-completeness.cjs\nnpx vitest run src/utils/sdk-settings-field-metadata.test.ts __tests__/i18n/ __tests__/routes/mcp-page.test.tsx __tests__/components/settings/agent-profiles/ __tests__/components/features/skills/ __tests__/routes/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18035"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18035,
          "title": "fix(settings): correct UI copy on settings, MCP and skills pages",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18035",
          "created_at": "2026-10-05T21:32:10Z",
          "updated_at": "2026-10-08T20:38:11Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:23:07Z",
          "closed_at": "2026-10-06T05:23:07Z",
          "head_sha": "cde254eb4cc87f0b89faf7706e922224cce68e5a",
          "scope": "Corrects the reported schema/copy/i18n/accessibility/link mistakes on settings, MCP and Skills pages.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ne of the results.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the seven UI copy defects in #17939 across the settings, MCP and Skills pages: a literal `\\n`, raw SDK schema text and reStructuredText, missing translations, a reused LLM hint, a wrong accessible name, a dead example link and an outdated page description.\n\n## Why\n\nUsers saw developer text and mistakes in the UI:\n- The Model Router \"Model table\" placeholder showed a literal `\\n`.\n- ",
              "tion of every pinned-server schema field and choice with no warnings, the agent editor hint, the MCP accessible name, the example skill existing in the bundled catalog, and the Skills modal text.\n\n## Issue Number\n\nFixes #17939\n\n## How to Test\n\nUnit tests and checks (from the repo root):\n\n```bash\nnpm run make-i18n\nnode scripts/check-translation-completeness.cjs\nnpx vitest run src/utils/sdk-settings-field-metadata.test.ts __tests__/i18n/ __tests__/routes/mcp-page.test.tsx __tests__/components/settings/agent-profiles/ __tests__/components/features/skills/ __tests__/routes/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18035"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "8, #18030 and #17971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps i",
              "7937: Error toasts show raw \"HTTP request failed (4xx): {json}\" text for /model and profile rename\n- OpenHands/OpenHands#17938: LLM and agent profile editors silently disable Save for a duplicate name, with no message\n- OpenHands/OpenHands#17939: UI copy errors: raw schema text and reStructuredText, untranslated labels, a literal \\n, wrong labels and a dead example link\n- OpenHands/OpenHands#17940: Conversation drawer at phone width: agent and file-link tab opens do nothing, Planner hides the tab row, and agent-chosen tabs are not persisted\n- OpenHands/OpenHands#17941: Skill and MCP card "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Changes plugin/App wording and busy switches.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` are unchanged. `ToggleSwitch` only gains the optional `disabled` prop.\n- **Out of scope:** no `/extensions` route or redirect is added; the docs are corrected instead. The bare 404 page (#17904) and the copy errors in #17939 are left alone.\n- **Reviewer note (non-blocking), focus after a keyboard toggle:** toggling an app's switch with the keyboard now drops focus to `<body>`. The switch's own `setEnabled` makes the card busy, and native `disabled` removes focus. The issue requires that a busy switch cannot take focus, so this meets it, but a keyboard user has to Tab "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves the #17939 copy errors untouched."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18035,
          "title": "fix(settings): correct UI copy on settings, MCP and skills pages",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18035",
          "created_at": "2026-10-05T21:32:10Z",
          "updated_at": "2026-10-08T20:38:11Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:23:07Z",
          "closed_at": "2026-10-06T05:23:07Z",
          "head_sha": "cde254eb4cc87f0b89faf7706e922224cce68e5a",
          "scope": "Corrects the reported schema/copy/i18n/accessibility/link mistakes on settings, MCP and Skills pages.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ne of the results.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the seven UI copy defects in #17939 across the settings, MCP and Skills pages: a literal `\\n`, raw SDK schema text and reStructuredText, missing translations, a reused LLM hint, a wrong accessible name, a dead example link and an outdated page description.\n\n## Why\n\nUsers saw developer text and mistakes in the UI:\n- The Model Router \"Model table\" placeholder showed a literal `\\n`.\n- ",
              "tion of every pinned-server schema field and choice with no warnings, the agent editor hint, the MCP accessible name, the example skill existing in the bundled catalog, and the Skills modal text.\n\n## Issue Number\n\nFixes #17939\n\n## How to Test\n\nUnit tests and checks (from the repo root):\n\n```bash\nnpm run make-i18n\nnode scripts/check-translation-completeness.cjs\nnpx vitest run src/utils/sdk-settings-field-metadata.test.ts __tests__/i18n/ __tests__/routes/mcp-page.test.tsx __tests__/components/settings/agent-profiles/ __tests__/components/features/skills/ __tests__/routes/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18035"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18035,
          "title": "fix(settings): correct UI copy on settings, MCP and skills pages",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18035",
          "created_at": "2026-10-05T21:32:10Z",
          "updated_at": "2026-10-08T20:38:11Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:23:07Z",
          "closed_at": "2026-10-06T05:23:07Z",
          "head_sha": "cde254eb4cc87f0b89faf7706e922224cce68e5a",
          "scope": "Corrects the reported schema/copy/i18n/accessibility/link mistakes on settings, MCP and Skills pages.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ne of the results.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the seven UI copy defects in #17939 across the settings, MCP and Skills pages: a literal `\\n`, raw SDK schema text and reStructuredText, missing translations, a reused LLM hint, a wrong accessible name, a dead example link and an outdated page description.\n\n## Why\n\nUsers saw developer text and mistakes in the UI:\n- The Model Router \"Model table\" placeholder showed a literal `\\n`.\n- ",
              "tion of every pinned-server schema field and choice with no warnings, the agent editor hint, the MCP accessible name, the example skill existing in the bundled catalog, and the Skills modal text.\n\n## Issue Number\n\nFixes #17939\n\n## How to Test\n\nUnit tests and checks (from the repo root):\n\n```bash\nnpm run make-i18n\nnode scripts/check-translation-completeness.cjs\nnpx vitest run src/utils/sdk-settings-field-metadata.test.ts __tests__/i18n/ __tests__/routes/mcp-page.test.tsx __tests__/components/settings/agent-profiles/ __tests__/components/features/skills/ __tests__/routes/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18035"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18035; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17940,
      "title": "[Bug]: Conversation drawer at phone width: agent and file-link tab opens do nothing, Planner hides the tab row, and agent-chosen tabs are not persisted",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17940",
      "created_at": "2026-10-05T01:18:28Z",
      "updated_at": "2026-10-06T04:29:58Z",
      "state": "closed",
      "closed_at": "2026-10-06T04:29:58Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18045,
          "title": "fix(conversation): open the drawer at phone width for agent and file-link tab requests",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18045",
          "created_at": "2026-10-06T00:01:36Z",
          "updated_at": "2026-10-08T20:38:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:29:57Z",
          "closed_at": "2026-10-06T04:29:57Z",
          "head_sha": "f55e2f9d4333e93e73137b82429f5965d135394b",
          "scope": "Opens and persists the conversation drawer correctly for phone-width tab requests.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t this, opening the panel while the chat was still connecting left a \"Loading...\" overlay stuck over the tab content. That already happened on main, and an early agent `open_tab` makes it common.\n\n## Issue Number\n\nFixes #17940\n\n## How to Test\n\nUnit tests (on the old code, the new and changed tests failed; on this branch, all pass):\n\n```\nnpx vitest run __tests__/services/canvas-ui.test.ts __tests__/hooks/use-conversation-panel-route.test.tsx __tests__/components/features/conversation/conversation-tabs.test.tsx __tests__/components/features/conversation/conversation-mobil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18045"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18045,
          "title": "fix(conversation): open the drawer at phone width for agent and file-link tab requests",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18045",
          "created_at": "2026-10-06T00:01:36Z",
          "updated_at": "2026-10-08T20:38:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:29:57Z",
          "closed_at": "2026-10-06T04:29:57Z",
          "head_sha": "f55e2f9d4333e93e73137b82429f5965d135394b",
          "scope": "Opens and persists the conversation drawer correctly for phone-width tab requests.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t this, opening the panel while the chat was still connecting left a \"Loading...\" overlay stuck over the tab content. That already happened on main, and an early agent `open_tab` makes it common.\n\n## Issue Number\n\nFixes #17940\n\n## How to Test\n\nUnit tests (on the old code, the new and changed tests failed; on this branch, all pass):\n\n```\nnpx vitest run __tests__/services/canvas-ui.test.ts __tests__/hooks/use-conversation-panel-route.test.tsx __tests__/components/features/conversation/conversation-tabs.test.tsx __tests__/components/features/conversation/conversation-mobil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18045"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nd #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purpose. software-agent-sdk#5531, which would have removed",
              "rs silently disable Save for a duplicate name, with no message\n- OpenHands/OpenHands#17939: UI copy errors: raw schema text and reStructuredText, untranslated labels, a literal \\n, wrong labels and a dead example link\n- OpenHands/OpenHands#17940: Conversation drawer at phone width: agent and file-link tab opens do nothing, Planner hides the tab row, and agent-chosen tabs are not persisted\n- OpenHands/OpenHands#17941: Skill and MCP card toggles can swallow the first click, and keep the new state after a failed save\n- OpenHands/OpenHands#17942: Slash command feedback: bare /btw is silently "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18045,
          "title": "fix(conversation): open the drawer at phone width for agent and file-link tab requests",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18045",
          "created_at": "2026-10-06T00:01:36Z",
          "updated_at": "2026-10-08T20:38:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:29:57Z",
          "closed_at": "2026-10-06T04:29:57Z",
          "head_sha": "f55e2f9d4333e93e73137b82429f5965d135394b",
          "scope": "Opens and persists the conversation drawer correctly for phone-width tab requests.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t this, opening the panel while the chat was still connecting left a \"Loading...\" overlay stuck over the tab content. That already happened on main, and an early agent `open_tab` makes it common.\n\n## Issue Number\n\nFixes #17940\n\n## How to Test\n\nUnit tests (on the old code, the new and changed tests failed; on this branch, all pass):\n\n```\nnpx vitest run __tests__/services/canvas-ui.test.ts __tests__/hooks/use-conversation-panel-route.test.tsx __tests__/components/features/conversation/conversation-tabs.test.tsx __tests__/components/features/conversation/conversation-mobil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18045"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18045,
          "title": "fix(conversation): open the drawer at phone width for agent and file-link tab requests",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18045",
          "created_at": "2026-10-06T00:01:36Z",
          "updated_at": "2026-10-08T20:38:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:29:57Z",
          "closed_at": "2026-10-06T04:29:57Z",
          "head_sha": "f55e2f9d4333e93e73137b82429f5965d135394b",
          "scope": "Opens and persists the conversation drawer correctly for phone-width tab requests.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t this, opening the panel while the chat was still connecting left a \"Loading...\" overlay stuck over the tab content. That already happened on main, and an early agent `open_tab` makes it common.\n\n## Issue Number\n\nFixes #17940\n\n## How to Test\n\nUnit tests (on the old code, the new and changed tests failed; on this branch, all pass):\n\n```\nnpx vitest run __tests__/services/canvas-ui.test.ts __tests__/hooks/use-conversation-panel-route.test.tsx __tests__/components/features/conversation/conversation-tabs.test.tsx __tests__/components/features/conversation/conversation-mobil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18045"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18045; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17941,
      "title": "[Bug]: Skill and MCP card toggles can swallow the first click, and keep the new state after a failed save",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17941",
      "created_at": "2026-10-05T01:18:48Z",
      "updated_at": "2026-10-12T05:05:39Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17970,
          "title": "fix: preserve toggle click targets and roll back failed skill saves",
          "author": "LittleMIKUya",
          "author_url": "https://github.com/LittleMIKUya",
          "url": "https://github.com/OpenHands/OpenHands/pull/17970",
          "created_at": "2026-10-05T07:48:01Z",
          "updated_at": "2026-10-14T01:40:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a6dc5b17c33385f5cb94e9d365823dddc3c530c2",
          "scope": "Keeps toggle click targets mounted and proposes rollback for failed skill saves; this is a fix proposal despite independent review finding a regression.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix: preserve toggle click targets and roll back failed skill saves\nHUMAN:\r\nI reviewed the before/after recordings and test results for #17941.\r\nAGENT:\r\nVerified in the real frontend against `openhands-agent-server==1.50.1`, with `VITE_MOCK_API=false` and no model execution. [Reproduction commands, measurements, and logs](https://github.com/LittleMIKUya/OpenHands/blob/19780786a2acb6f391701530967c5c75c7dbb0a8/.pr/evidence/README.md) are on a separate evidence branch.\r\n\r\nFollow-up review: ",
              "ttings hydration from successful overlapping writes.\r\n- Skip saving the preceding state during settings hydration; add regression tests using the real settings hooks and mocked service calls.\r\n\r\n## Issue Number\r\n\r\nFixes #17941\r\n\r\n## How to Test\r\n\r\n1. Run `npm ci`, then the focused suite:\r\n   ```sh\r\n   npx vitest run --maxWorkers=2 __tests__/components/buttons/circle-plus-check-toggle.test.tsx __tests__/hooks/use-skill-enablement.test.tsx __tests__/utils/skill-enablement.test.ts __tests__/hooks/mutation/use-save-settings.test.ts src/api/no-direct-agent-server-calls.test."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17970"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17970,
          "title": "fix: preserve toggle click targets and roll back failed skill saves",
          "author": "LittleMIKUya",
          "author_url": "https://github.com/LittleMIKUya",
          "url": "https://github.com/OpenHands/OpenHands/pull/17970",
          "created_at": "2026-10-05T07:48:01Z",
          "updated_at": "2026-10-14T01:40:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a6dc5b17c33385f5cb94e9d365823dddc3c530c2",
          "scope": "Keeps toggle click targets mounted and proposes rollback for failed skill saves; this is a fix proposal despite independent review finding a regression.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix: preserve toggle click targets and roll back failed skill saves\nHUMAN:\r\nI reviewed the before/after recordings and test results for #17941.\r\nAGENT:\r\nVerified in the real frontend against `openhands-agent-server==1.50.1`, with `VITE_MOCK_API=false` and no model execution. [Reproduction commands, measurements, and logs](https://github.com/LittleMIKUya/OpenHands/blob/19780786a2acb6f391701530967c5c75c7dbb0a8/.pr/evidence/README.md) are on a separate evidence branch.\r\n\r\nFollow-up review: ",
              "ttings hydration from successful overlapping writes.\r\n- Skip saving the preceding state during settings hydration; add regression tests using the real settings hooks and mocked service calls.\r\n\r\n## Issue Number\r\n\r\nFixes #17941\r\n\r\n## How to Test\r\n\r\n1. Run `npm ci`, then the focused suite:\r\n   ```sh\r\n   npx vitest run --maxWorkers=2 __tests__/components/buttons/circle-plus-check-toggle.test.tsx __tests__/hooks/use-skill-enablement.test.tsx __tests__/utils/skill-enablement.test.ts __tests__/hooks/mutation/use-save-settings.test.ts src/api/no-direct-agent-server-calls.test."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17970"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "al \\n, wrong labels and a dead example link\n- OpenHands/OpenHands#17940: Conversation drawer at phone width: agent and file-link tab opens do nothing, Planner hides the tab row, and agent-chosen tabs are not persisted\n- OpenHands/OpenHands#17941: Skill and MCP card toggles can swallow the first click, and keep the new state after a failed save\n- OpenHands/OpenHands#17942: Slash command feedback: bare /btw is silently discarded, and superseded /goal rows keep offering Resume\n- OpenHands/OpenHands#17943: Sidebar conversation list: misleading download error, and the default layout matches no"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17970,
          "title": "fix: preserve toggle click targets and roll back failed skill saves",
          "author": "LittleMIKUya",
          "author_url": "https://github.com/LittleMIKUya",
          "url": "https://github.com/OpenHands/OpenHands/pull/17970",
          "created_at": "2026-10-05T07:48:01Z",
          "updated_at": "2026-10-14T01:40:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a6dc5b17c33385f5cb94e9d365823dddc3c530c2",
          "scope": "Keeps toggle click targets mounted and proposes rollback for failed skill saves; this is a fix proposal despite independent review finding a regression.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix: preserve toggle click targets and roll back failed skill saves\nHUMAN:\r\nI reviewed the before/after recordings and test results for #17941.\r\nAGENT:\r\nVerified in the real frontend against `openhands-agent-server==1.50.1`, with `VITE_MOCK_API=false` and no model execution. [Reproduction commands, measurements, and logs](https://github.com/LittleMIKUya/OpenHands/blob/19780786a2acb6f391701530967c5c75c7dbb0a8/.pr/evidence/README.md) are on a separate evidence branch.\r\n\r\nFollow-up review: ",
              "ttings hydration from successful overlapping writes.\r\n- Skip saving the preceding state during settings hydration; add regression tests using the real settings hooks and mocked service calls.\r\n\r\n## Issue Number\r\n\r\nFixes #17941\r\n\r\n## How to Test\r\n\r\n1. Run `npm ci`, then the focused suite:\r\n   ```sh\r\n   npx vitest run --maxWorkers=2 __tests__/components/buttons/circle-plus-check-toggle.test.tsx __tests__/hooks/use-skill-enablement.test.tsx __tests__/utils/skill-enablement.test.ts __tests__/hooks/mutation/use-save-settings.test.ts src/api/no-direct-agent-server-calls.test."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17970"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17942,
      "title": "[Bug]: Slash command feedback: bare /btw is silently discarded, and superseded /goal rows keep offering Resume",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17942",
      "created_at": "2026-10-05T01:19:08Z",
      "updated_at": "2026-10-06T05:14:20Z",
      "state": "closed",
      "closed_at": "2026-10-06T05:14:20Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18036,
          "title": "fix(chat): toast on bare /btw and offer Resume only on the latest goal status",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18036",
          "created_at": "2026-10-05T21:36:40Z",
          "updated_at": "2026-10-08T20:38:18Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:14:18Z",
          "closed_at": "2026-10-06T05:14:18Z",
          "head_sha": "25a784f9369a33cd97fd3740c5afc0b75cd790df",
          "scope": "Provides bare /btw feedback and limits Resume to the latest goal-status row.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " REST history and live events, and no loop is active. The live goal banner passes no id and is unchanged.\n- Unit tests for both behaviors. They were written first and fail on `main` (7 failures).\n\n## Issue Number\n\nFixes #17942\n\n## How to Test\n\nUnit tests, i18n and lint (this branch is rebased on current `main`):\n\n```bash\nnpx vitest run __tests__/hooks/chat/use-btw-interceptor.test.ts __tests__/components/features/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-banner.test.tsx src/hooks/chat/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18036"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18036,
          "title": "fix(chat): toast on bare /btw and offer Resume only on the latest goal status",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18036",
          "created_at": "2026-10-05T21:36:40Z",
          "updated_at": "2026-10-08T20:38:18Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:14:18Z",
          "closed_at": "2026-10-06T05:14:18Z",
          "head_sha": "25a784f9369a33cd97fd3740c5afc0b75cd790df",
          "scope": "Provides bare /btw feedback and limits Resume to the latest goal-status row.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " REST history and live events, and no loop is active. The live goal banner passes no id and is unchanged.\n- Unit tests for both behaviors. They were written first and fail on `main` (7 failures).\n\n## Issue Number\n\nFixes #17942\n\n## How to Test\n\nUnit tests, i18n and lint (this branch is rebased on current `main`):\n\n```bash\nnpx vitest run __tests__/hooks/chat/use-btw-interceptor.test.ts __tests__/components/features/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-banner.test.tsx src/hooks/chat/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18036"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "971.\n  - e388c1afc: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind",
              " tab opens do nothing, Planner hides the tab row, and agent-chosen tabs are not persisted\n- OpenHands/OpenHands#17941: Skill and MCP card toggles can swallow the first click, and keep the new state after a failed save\n- OpenHands/OpenHands#17942: Slash command feedback: bare /btw is silently discarded, and superseded /goal rows keep offering Resume\n- OpenHands/OpenHands#17943: Sidebar conversation list: misleading download error, and the default layout matches no View preset\n- OpenHands/OpenHands#17944: Workspace picker: folder names are invisible at phone width, and the empty state never"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18036,
          "title": "fix(chat): toast on bare /btw and offer Resume only on the latest goal status",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18036",
          "created_at": "2026-10-05T21:36:40Z",
          "updated_at": "2026-10-08T20:38:18Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:14:18Z",
          "closed_at": "2026-10-06T05:14:18Z",
          "head_sha": "25a784f9369a33cd97fd3740c5afc0b75cd790df",
          "scope": "Provides bare /btw feedback and limits Resume to the latest goal-status row.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " REST history and live events, and no loop is active. The live goal banner passes no id and is unchanged.\n- Unit tests for both behaviors. They were written first and fail on `main` (7 failures).\n\n## Issue Number\n\nFixes #17942\n\n## How to Test\n\nUnit tests, i18n and lint (this branch is rebased on current `main`):\n\n```bash\nnpx vitest run __tests__/hooks/chat/use-btw-interceptor.test.ts __tests__/components/features/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-banner.test.tsx src/hooks/chat/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18036"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18036,
          "title": "fix(chat): toast on bare /btw and offer Resume only on the latest goal status",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18036",
          "created_at": "2026-10-05T21:36:40Z",
          "updated_at": "2026-10-08T20:38:18Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:14:18Z",
          "closed_at": "2026-10-06T05:14:18Z",
          "head_sha": "25a784f9369a33cd97fd3740c5afc0b75cd790df",
          "scope": "Provides bare /btw feedback and limits Resume to the latest goal-status row.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " REST history and live events, and no loop is active. The live goal banner passes no id and is unchanged.\n- Unit tests for both behaviors. They were written first and fail on `main` (7 failures).\n\n## Issue Number\n\nFixes #17942\n\n## How to Test\n\nUnit tests, i18n and lint (this branch is rebased on current `main`):\n\n```bash\nnpx vitest run __tests__/hooks/chat/use-btw-interceptor.test.ts __tests__/components/features/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-content.test.tsx __tests__/components/chat/goal-status-banner.test.tsx src/hooks/chat/u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18036"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18036; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17943,
      "title": "[Bug]: Sidebar conversation list: misleading download error, and the default layout matches no View preset",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17943",
      "created_at": "2026-10-05T01:19:27Z",
      "updated_at": "2026-10-06T00:59:29Z",
      "state": "closed",
      "closed_at": "2026-10-06T00:59:29Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18021,
          "title": "fix(conversation-panel): report download failures once and select Recent by default",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18021",
          "created_at": "2026-10-05T20:53:23Z",
          "updated_at": "2026-10-08T20:39:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:59:27Z",
          "closed_at": "2026-10-06T00:59:27Z",
          "head_sha": "0c1c3b7f59e1d1ac16f6e40df0fe5a52475d894d",
          "scope": "Reports conversation download failures once and makes the default sidebar layout match Recent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "error toast and close the menu, and makes the default sidebar layout match the Recent preset so the View menu no longer reads \"Custom\" on an untouched profile.\r\n\r\n## Why\r\n\r\nTwo problems in the sidebar conversation list (#17943):\r\n\r\n- **Download failure.** When downloading a conversation failed (for example the agent server was unreachable), the user saw two toasts: \"ConversationId unknown, cannot download trajectory\", which is wrong because the id is known, plus the raw 502 from the global handler. The context menu also stayed open, and the rejection escaped as an uncau",
              "ection and close the menu, as on success.\r\n- The Recent preset is now exactly `DEFAULT_LAYOUT_SETTINGS`, so a fresh profile shows Recent checked; changing any layout field still reads Custom.\r\n\r\n## Issue Number\r\n\r\nFixes #17943\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (each new test fails on `main` and passes here):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/ \\\r\n  __tests__/stores/conversation-panel-preferences-store.test.ts \\\r\n  __tests__/hooks/use-conversation-name-context-menu.test.tsx \\\r\n  __tests__/hooks/use-download-conversation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18021"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18021,
          "title": "fix(conversation-panel): report download failures once and select Recent by default",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18021",
          "created_at": "2026-10-05T20:53:23Z",
          "updated_at": "2026-10-08T20:39:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:59:27Z",
          "closed_at": "2026-10-06T00:59:27Z",
          "head_sha": "0c1c3b7f59e1d1ac16f6e40df0fe5a52475d894d",
          "scope": "Reports conversation download failures once and makes the default sidebar layout match Recent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "error toast and close the menu, and makes the default sidebar layout match the Recent preset so the View menu no longer reads \"Custom\" on an untouched profile.\r\n\r\n## Why\r\n\r\nTwo problems in the sidebar conversation list (#17943):\r\n\r\n- **Download failure.** When downloading a conversation failed (for example the agent server was unreachable), the user saw two toasts: \"ConversationId unknown, cannot download trajectory\", which is wrong because the id is known, plus the raw 502 from the global handler. The context menu also stayed open, and the rejection escaped as an uncau",
              "ection and close the menu, as on success.\r\n- The Recent preset is now exactly `DEFAULT_LAYOUT_SETTINGS`, so a fresh profile shows Recent checked; changing any layout field still reads Custom.\r\n\r\n## Issue Number\r\n\r\nFixes #17943\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (each new test fails on `main` and passes here):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/ \\\r\n  __tests__/stores/conversation-panel-preferences-store.test.ts \\\r\n  __tests__/hooks/use-conversation-name-context-menu.test.tsx \\\r\n  __tests__/hooks/use-download-conversation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18021"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "card toggles can swallow the first click, and keep the new state after a failed save\n- OpenHands/OpenHands#17942: Slash command feedback: bare /btw is silently discarded, and superseded /goal rows keep offering Resume\n- OpenHands/OpenHands#17943: Sidebar conversation list: misleading download error, and the default layout matches no View preset\n- OpenHands/OpenHands#17944: Workspace picker: folder names are invisible at phone width, and the empty state never shows\n- OpenHands/OpenHands#17946: Launcher never creates TMUX_TMPDIR, so local Agent Canvas instances share one tmux server and res"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18021,
          "title": "fix(conversation-panel): report download failures once and select Recent by default",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18021",
          "created_at": "2026-10-05T20:53:23Z",
          "updated_at": "2026-10-08T20:39:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:59:27Z",
          "closed_at": "2026-10-06T00:59:27Z",
          "head_sha": "0c1c3b7f59e1d1ac16f6e40df0fe5a52475d894d",
          "scope": "Reports conversation download failures once and makes the default sidebar layout match Recent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "error toast and close the menu, and makes the default sidebar layout match the Recent preset so the View menu no longer reads \"Custom\" on an untouched profile.\r\n\r\n## Why\r\n\r\nTwo problems in the sidebar conversation list (#17943):\r\n\r\n- **Download failure.** When downloading a conversation failed (for example the agent server was unreachable), the user saw two toasts: \"ConversationId unknown, cannot download trajectory\", which is wrong because the id is known, plus the raw 502 from the global handler. The context menu also stayed open, and the rejection escaped as an uncau",
              "ection and close the menu, as on success.\r\n- The Recent preset is now exactly `DEFAULT_LAYOUT_SETTINGS`, so a fresh profile shows Recent checked; changing any layout field still reads Custom.\r\n\r\n## Issue Number\r\n\r\nFixes #17943\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (each new test fails on `main` and passes here):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/ \\\r\n  __tests__/stores/conversation-panel-preferences-store.test.ts \\\r\n  __tests__/hooks/use-conversation-name-context-menu.test.tsx \\\r\n  __tests__/hooks/use-download-conversation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18021"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18021,
          "title": "fix(conversation-panel): report download failures once and select Recent by default",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18021",
          "created_at": "2026-10-05T20:53:23Z",
          "updated_at": "2026-10-08T20:39:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:59:27Z",
          "closed_at": "2026-10-06T00:59:27Z",
          "head_sha": "0c1c3b7f59e1d1ac16f6e40df0fe5a52475d894d",
          "scope": "Reports conversation download failures once and makes the default sidebar layout match Recent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "error toast and close the menu, and makes the default sidebar layout match the Recent preset so the View menu no longer reads \"Custom\" on an untouched profile.\r\n\r\n## Why\r\n\r\nTwo problems in the sidebar conversation list (#17943):\r\n\r\n- **Download failure.** When downloading a conversation failed (for example the agent server was unreachable), the user saw two toasts: \"ConversationId unknown, cannot download trajectory\", which is wrong because the id is known, plus the raw 502 from the global handler. The context menu also stayed open, and the rejection escaped as an uncau",
              "ection and close the menu, as on success.\r\n- The Recent preset is now exactly `DEFAULT_LAYOUT_SETTINGS`, so a fresh profile shows Recent checked; changing any layout field still reads Custom.\r\n\r\n## Issue Number\r\n\r\nFixes #17943\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (each new test fails on `main` and passes here):\r\n\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/ \\\r\n  __tests__/stores/conversation-panel-preferences-store.test.ts \\\r\n  __tests__/hooks/use-conversation-name-context-menu.test.tsx \\\r\n  __tests__/hooks/use-download-conversation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18021"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18021; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17944,
      "title": "[Bug]: Workspace picker: folder names are invisible at phone width, and the empty state never shows",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17944",
      "created_at": "2026-10-05T01:19:47Z",
      "updated_at": "2026-10-06T04:43:16Z",
      "state": "closed",
      "closed_at": "2026-10-06T04:43:16Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18037,
          "title": "fix(home): show folder names at phone width and the workspace empty state",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18037",
          "created_at": "2026-10-05T21:40:21Z",
          "updated_at": "2026-10-08T20:38:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:43:14Z",
          "closed_at": "2026-10-06T04:43:15Z",
          "head_sha": "874cb87c7b056782c711e3eb77a17c0ddec97ee3",
          "scope": "Shows phone-width workspace folder names and reachable empty states.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "Added tests: the generic empty state with a sticky footer, workspace empty and no-match cases, and a phone-layout class contract for the folder browser opened through the real Add Workspace flow.\n\n## Issue Number\n\nFixes #17944\n\n## How to Test\n\nUnit tests and lint (the new tests fail on `main` and pass here):\n\n```bash\nnpx vitest run __tests__/components/features/home/ __tests__/components/features/conversation-panel/local-new-conversation-menu.test.tsx\n# 17 files, 192 tests passed\nnpm run lint\n```\n\nBefore the rebase, `npm run lint` passed with 0 errors. After rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18037"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18037,
          "title": "fix(home): show folder names at phone width and the workspace empty state",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18037",
          "created_at": "2026-10-05T21:40:21Z",
          "updated_at": "2026-10-08T20:38:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:43:14Z",
          "closed_at": "2026-10-06T04:43:15Z",
          "head_sha": "874cb87c7b056782c711e3eb77a17c0ddec97ee3",
          "scope": "Shows phone-width workspace folder names and reachable empty states.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "Added tests: the generic empty state with a sticky footer, workspace empty and no-match cases, and a phone-layout class contract for the folder browser opened through the real Add Workspace flow.\n\n## Issue Number\n\nFixes #17944\n\n## How to Test\n\nUnit tests and lint (the new tests fail on `main` and pass here):\n\n```bash\nnpx vitest run __tests__/components/features/home/ __tests__/components/features/conversation-panel/local-new-conversation-menu.test.tsx\n# 17 files, 192 tests passed\nnpm run lint\n```\n\nBefore the rebase, `npm run lint` passed with 0 errors. After rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18037"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "c: #18010 (#17901), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purp",
              "eedback: bare /btw is silently discarded, and superseded /goal rows keep offering Resume\n- OpenHands/OpenHands#17943: Sidebar conversation list: misleading download error, and the default layout matches no View preset\n- OpenHands/OpenHands#17944: Workspace picker: folder names are invisible at phone width, and the empty state never shows\n- OpenHands/OpenHands#17946: Launcher never creates TMUX_TMPDIR, so local Agent Canvas instances share one tmux server and reset each other's terminals\n- OpenHands/OpenHands#17947: Automation \"View logs\" shows \"(no output)\" for runs that created a convers"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18037,
          "title": "fix(home): show folder names at phone width and the workspace empty state",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18037",
          "created_at": "2026-10-05T21:40:21Z",
          "updated_at": "2026-10-08T20:38:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:43:14Z",
          "closed_at": "2026-10-06T04:43:15Z",
          "head_sha": "874cb87c7b056782c711e3eb77a17c0ddec97ee3",
          "scope": "Shows phone-width workspace folder names and reachable empty states.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "Added tests: the generic empty state with a sticky footer, workspace empty and no-match cases, and a phone-layout class contract for the folder browser opened through the real Add Workspace flow.\n\n## Issue Number\n\nFixes #17944\n\n## How to Test\n\nUnit tests and lint (the new tests fail on `main` and pass here):\n\n```bash\nnpx vitest run __tests__/components/features/home/ __tests__/components/features/conversation-panel/local-new-conversation-menu.test.tsx\n# 17 files, 192 tests passed\nnpm run lint\n```\n\nBefore the rebase, `npm run lint` passed with 0 errors. After rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18037"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18037,
          "title": "fix(home): show folder names at phone width and the workspace empty state",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18037",
          "created_at": "2026-10-05T21:40:21Z",
          "updated_at": "2026-10-08T20:38:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:43:14Z",
          "closed_at": "2026-10-06T04:43:15Z",
          "head_sha": "874cb87c7b056782c711e3eb77a17c0ddec97ee3",
          "scope": "Shows phone-width workspace folder names and reachable empty states.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "Added tests: the generic empty state with a sticky footer, workspace empty and no-match cases, and a phone-layout class contract for the folder browser opened through the real Add Workspace flow.\n\n## Issue Number\n\nFixes #17944\n\n## How to Test\n\nUnit tests and lint (the new tests fail on `main` and pass here):\n\n```bash\nnpx vitest run __tests__/components/features/home/ __tests__/components/features/conversation-panel/local-new-conversation-menu.test.tsx\n# 17 files, 192 tests passed\nnpm run lint\n```\n\nBefore the rebase, `npm run lint` passed with 0 errors. After rebasing on"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18037"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18037; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17946,
      "title": "[Bug]: Launcher never creates TMUX_TMPDIR, so local Agent Canvas instances share one tmux server and reset each other's terminals",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17946",
      "created_at": "2026-10-05T01:37:16Z",
      "updated_at": "2026-10-13T06:14:49Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18368"
            ]
          },
          "number": 18368,
          "title": "fix(launcher): create the resolved terminal socket directory",
          "url": "https://github.com/OpenHands/OpenHands/pull/18368",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:04Z",
          "updated_at": "2026-10-14T05:02:00Z",
          "head_sha": "9aa9e1fc0c0a27b208a0b7245fd25fd538e661f7",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18368"
            ]
          },
          "number": 18368,
          "title": "fix(launcher): create the resolved terminal socket directory",
          "url": "https://github.com/OpenHands/OpenHands/pull/18368",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:04Z",
          "updated_at": "2026-10-14T05:02:00Z",
          "head_sha": "9aa9e1fc0c0a27b208a0b7245fd25fd538e661f7",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "bar conversation list: misleading download error, and the default layout matches no View preset\n- OpenHands/OpenHands#17944: Workspace picker: folder names are invisible at phone width, and the empty state never shows\n- OpenHands/OpenHands#17946: Launcher never creates TMUX_TMPDIR, so local Agent Canvas instances share one tmux server and reset each other's terminals\n- OpenHands/OpenHands#17947: Automation \"View logs\" shows \"(no output)\" for runs that created a conversation (local backend)\n- OpenHands/OpenHands#17948: Automation detail and edit: schedule edit silently dropped, wrong run l"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18368"
            ]
          },
          "number": 18368,
          "title": "fix(launcher): create the resolved terminal socket directory",
          "url": "https://github.com/OpenHands/OpenHands/pull/18368",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:04Z",
          "updated_at": "2026-10-14T05:02:00Z",
          "head_sha": "9aa9e1fc0c0a27b208a0b7245fd25fd538e661f7",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17947,
      "title": "[Bug]: Automation \"View logs\" shows \"(no output)\" for runs that created a conversation (local backend)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17947",
      "created_at": "2026-10-05T01:56:28Z",
      "updated_at": "2026-10-06T01:02:18Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:02:18Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18022,
          "title": "fix(automations): read local run logs from the server-level bash events",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18022",
          "created_at": "2026-10-05T21:00:04Z",
          "updated_at": "2026-10-08T20:39:00Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:02:17Z",
          "closed_at": "2026-10-06T01:02:17Z",
          "head_sha": "8e82c5d6e42932cf31bc335484ed22b31ca6c80c",
          "scope": "Reads local automation logs from the server-level bash events endpoint.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ions` and real `BashClient` against a spied `fetch` and asserts the server-level request path. On `main` it fails with `[\"/server_info\", \"/api/conversations/conv-1/bash/bash_events/search\"]`.\r\n\r\n## Issue Number\r\n\r\nFixes #17947\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/bash-service.test.ts __tests__/hooks/query/use-bash-command-logs.test.tsx __tests__/hooks/query/use-bash-command-logs-enabled.test.tsx __tests__/components/automations/detail/run-logs-modal.test.tsx src/api/no-direct-agent-server-calls.test.ts\r\n# 5 files, 58 tests p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18022"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18022,
          "title": "fix(automations): read local run logs from the server-level bash events",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18022",
          "created_at": "2026-10-05T21:00:04Z",
          "updated_at": "2026-10-08T20:39:00Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:02:17Z",
          "closed_at": "2026-10-06T01:02:17Z",
          "head_sha": "8e82c5d6e42932cf31bc335484ed22b31ca6c80c",
          "scope": "Reads local automation logs from the server-level bash events endpoint.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ions` and real `BashClient` against a spied `fetch` and asserts the server-level request path. On `main` it fails with `[\"/server_info\", \"/api/conversations/conv-1/bash/bash_events/search\"]`.\r\n\r\n## Issue Number\r\n\r\nFixes #17947\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/bash-service.test.ts __tests__/hooks/query/use-bash-command-logs.test.tsx __tests__/hooks/query/use-bash-command-logs-enabled.test.tsx __tests__/components/automations/detail/run-logs-modal.test.tsx src/api/no-direct-agent-server-calls.test.ts\r\n# 5 files, 58 tests p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18022"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "mes are invisible at phone width, and the empty state never shows\n- OpenHands/OpenHands#17946: Launcher never creates TMUX_TMPDIR, so local Agent Canvas instances share one tmux server and reset each other's terminals\n- OpenHands/OpenHands#17947: Automation \"View logs\" shows \"(no output)\" for runs that created a conversation (local backend)\n- OpenHands/OpenHands#17948: Automation detail and edit: schedule edit silently dropped, wrong run label, slow not-found page, tarball saved as .tar\n- OpenHands/OpenHands#17949: Launcher: --allow-lan-session-key is ignored, the port-in-use error prints"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18022,
          "title": "fix(automations): read local run logs from the server-level bash events",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18022",
          "created_at": "2026-10-05T21:00:04Z",
          "updated_at": "2026-10-08T20:39:00Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:02:17Z",
          "closed_at": "2026-10-06T01:02:17Z",
          "head_sha": "8e82c5d6e42932cf31bc335484ed22b31ca6c80c",
          "scope": "Reads local automation logs from the server-level bash events endpoint.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ions` and real `BashClient` against a spied `fetch` and asserts the server-level request path. On `main` it fails with `[\"/server_info\", \"/api/conversations/conv-1/bash/bash_events/search\"]`.\r\n\r\n## Issue Number\r\n\r\nFixes #17947\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/bash-service.test.ts __tests__/hooks/query/use-bash-command-logs.test.tsx __tests__/hooks/query/use-bash-command-logs-enabled.test.tsx __tests__/components/automations/detail/run-logs-modal.test.tsx src/api/no-direct-agent-server-calls.test.ts\r\n# 5 files, 58 tests p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18022"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18022,
          "title": "fix(automations): read local run logs from the server-level bash events",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18022",
          "created_at": "2026-10-05T21:00:04Z",
          "updated_at": "2026-10-08T20:39:00Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:02:17Z",
          "closed_at": "2026-10-06T01:02:17Z",
          "head_sha": "8e82c5d6e42932cf31bc335484ed22b31ca6c80c",
          "scope": "Reads local automation logs from the server-level bash events endpoint.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ions` and real `BashClient` against a spied `fetch` and asserts the server-level request path. On `main` it fails with `[\"/server_info\", \"/api/conversations/conv-1/bash/bash_events/search\"]`.\r\n\r\n## Issue Number\r\n\r\nFixes #17947\r\n\r\n## How to Test\r\n\r\nUnit tests and lint:\r\n\r\n```bash\r\nnpx vitest run __tests__/api/bash-service.test.ts __tests__/hooks/query/use-bash-command-logs.test.tsx __tests__/hooks/query/use-bash-command-logs-enabled.test.tsx __tests__/components/automations/detail/run-logs-modal.test.tsx src/api/no-direct-agent-server-calls.test.ts\r\n# 5 files, 58 tests p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18022"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18022; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17948,
      "title": "[Bug]: Automation detail and edit: schedule edit silently dropped, wrong run label, slow not-found page, tarball saved as .tar",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17948",
      "created_at": "2026-10-05T01:57:23Z",
      "updated_at": "2026-10-13T10:44:04Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18260,
          "title": "fix(automations): validate a cleared time of day before saving",
          "author": "gold-beyond",
          "author_url": "https://github.com/gold-beyond",
          "url": "https://github.com/OpenHands/OpenHands/pull/18260",
          "created_at": "2026-10-10T05:54:38Z",
          "updated_at": "2026-10-13T10:44:12Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "0f812ac68902d2c71896568311bffb8aa6f216a6",
          "scope": "Validates a cleared time-of-day schedule before saving; explicitly addresses only item 1 of this four-part issue.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix(automations): validate a cleared time of day before saving\nHUMAN:\r\n\r\nThis was reproduced on a local mock Canvas while working through item 1 of #17948, and I've reviewed the fix and the before/after evidence above. With Time of day cleared, Save now keeps the dialog open with an inline required-field error and sends no request; re-entering a time saves the rebuilt cron. The automation detail tests pass (26/26). Opening this as the item-1 fix.\r\n\r\n\r\nAGENT:\r\n\r\n**What changed** — the Edit automation",
              "and an empty value fell through silently. When another field had also changed, Save PATCHed just that field and toasted \"Automation updated\", so nothing told the user the schedule edit was lost.\r\n\r\nReported as item 1 of #17948 and documented as `F23.edit-time-cleared` in `.agents/skills/verify-openhands/references/feature-map/F23-automation-detail.md` (\"Expected: an inline message and the dialog stays open\").\r\n\r\n## Summary\r\n\r\n- `handleSubmit` validates the time like the name and timeout fields: an empty or malformed value sets the schedule error and returns before any P",
              "me case asserts the field-bound error, no PATCH, no success toast and no close; a second test covers recovery (re-enter a time → the retry PATCHes the rebuilt schedule).\r\n\r\n## Issue Number\r\n\r\nAddresses the first item of #17948 (the issue's other three items are untouched by this PR).\r\n\r\n## How to Test\r\n\r\n1. `npm run dev:mock`, open an automation's detail page, then **Automation actions → Edit**.\r\n2. Clear **Time of day** and click **Save**.\r\n   - Before: the dialog closes with no request and no message; reopening Edit shows the old time.\r\n   - After: the dialog stays op",
              "this size of change.\r\n\r\n## Type\r\n\r\n- [x] Bug fix\r\n- [ ] Feature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\n- Draft on purpose: the `HUMAN:` note above belongs to the human contributor, and #17948 still needs `ready-for-dev` from a maintainer — the triage there asked for per-item reproduction evidence, and the item-1 screenshots are now posted in the issue thread.\r\n- Copy choice: the error reuses the existing, fully translated `ERROR$REQUIRED_FIELD` (\"This field is required\") instead of adding a new `AUTOMATIONS$*` key. Happy to switch to f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18260"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18260,
          "title": "fix(automations): validate a cleared time of day before saving",
          "author": "gold-beyond",
          "author_url": "https://github.com/gold-beyond",
          "url": "https://github.com/OpenHands/OpenHands/pull/18260",
          "created_at": "2026-10-10T05:54:38Z",
          "updated_at": "2026-10-13T10:44:12Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "0f812ac68902d2c71896568311bffb8aa6f216a6",
          "scope": "Validates a cleared time-of-day schedule before saving; explicitly addresses only item 1 of this four-part issue.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix(automations): validate a cleared time of day before saving\nHUMAN:\r\n\r\nThis was reproduced on a local mock Canvas while working through item 1 of #17948, and I've reviewed the fix and the before/after evidence above. With Time of day cleared, Save now keeps the dialog open with an inline required-field error and sends no request; re-entering a time saves the rebuilt cron. The automation detail tests pass (26/26). Opening this as the item-1 fix.\r\n\r\n\r\nAGENT:\r\n\r\n**What changed** — the Edit automation",
              "and an empty value fell through silently. When another field had also changed, Save PATCHed just that field and toasted \"Automation updated\", so nothing told the user the schedule edit was lost.\r\n\r\nReported as item 1 of #17948 and documented as `F23.edit-time-cleared` in `.agents/skills/verify-openhands/references/feature-map/F23-automation-detail.md` (\"Expected: an inline message and the dialog stays open\").\r\n\r\n## Summary\r\n\r\n- `handleSubmit` validates the time like the name and timeout fields: an empty or malformed value sets the schedule error and returns before any P",
              "me case asserts the field-bound error, no PATCH, no success toast and no close; a second test covers recovery (re-enter a time → the retry PATCHes the rebuilt schedule).\r\n\r\n## Issue Number\r\n\r\nAddresses the first item of #17948 (the issue's other three items are untouched by this PR).\r\n\r\n## How to Test\r\n\r\n1. `npm run dev:mock`, open an automation's detail page, then **Automation actions → Edit**.\r\n2. Clear **Time of day** and click **Save**.\r\n   - Before: the dialog closes with no request and no message; reopening Edit shows the old time.\r\n   - After: the dialog stays op",
              "this size of change.\r\n\r\n## Type\r\n\r\n- [x] Bug fix\r\n- [ ] Feature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\n- Draft on purpose: the `HUMAN:` note above belongs to the human contributor, and #17948 still needs `ready-for-dev` from a maintainer — the triage there asked for per-item reproduction evidence, and the item-1 screenshots are now posted in the issue thread.\r\n- Copy choice: the error reuses the existing, fully translated `ERROR$REQUIRED_FIELD` (\"This field is required\") instead of adding a new `AUTOMATIONS$*` key. Happy to switch to f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18260"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "PDIR, so local Agent Canvas instances share one tmux server and reset each other's terminals\n- OpenHands/OpenHands#17947: Automation \"View logs\" shows \"(no output)\" for runs that created a conversation (local backend)\n- OpenHands/OpenHands#17948: Automation detail and edit: schedule edit silently dropped, wrong run label, slow not-found page, tarball saved as .tar\n- OpenHands/OpenHands#17949: Launcher: --allow-lan-session-key is ignored, the port-in-use error prints twice with a stack trace, and backend-only runtime_services lists a frontend\n- OpenHands/OpenHands#17950: Git Sync page show"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18073,
          "title": "fix(automations): refetch automations when Run now finds the automation deleted",
          "author": "pucedoteth",
          "author_url": "https://github.com/pucedoteth",
          "url": "https://github.com/OpenHands/OpenHands/pull/18073",
          "created_at": "2026-10-06T13:20:42Z",
          "updated_at": "2026-10-08T18:00:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "9a831278b5fd79bfdd7646db33bb81f824beadc8",
          "scope": "Refetches deleted automation data after dispatch 404.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "\nI could not drive the home page and detail page separately. They read the same invalidated queries, and the detail page reaches its existing not-found state once its refetch 404s (the slow 404 retries are out of scope, #17948).\n\n## Video/Screenshots\n\nBefore (`main`): after the failed Run now, **PR Triage Digest** is still on the dashboard and the tile says 7 automations / 5 active.\n\n![Dashboard on main after the failed Run now](https://raw.githubusercontent.com/pucedoteth/OpenHands/7f56bbf540501babaf79dccf552867e18a308695/.pr/18062-before-main.png)\n\nAfter (this branch)"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18073"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves slow detail-page 404 retries under #17948 out of scope."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18264,
          "title": "docs(verify-openhands): map maintenance 2026-10-10",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18264",
          "created_at": "2026-10-10T07:53:03Z",
          "updated_at": "2026-10-12T15:07:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T23:58:55Z",
          "closed_at": "2026-10-10T23:58:55Z",
          "head_sha": "da4c2924d67fe68b1fa49ba59c379e6860a9c347",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "GET. These are scoped entry checks rather than complete-ID or full-family passes.\n\nCurrent failures are #18263 (genuine desktop prompt and phone plugin draft Test stays Pending after backend COMPLETED; reload recovers), #17948's failed-prompt-as-script label on desktop/phone, and F22's credential-free #17959/#18061 findings. Ordinary final-automation Run now polling passes. The remaining model block requires a genuine legacy/custom-schema finish producer, including an actual failed run carrying a finish summary. Cloud/account, ACP, native/Docker/embedded and other unexe",
              "eports: identify verified setup paths, remaining prerequisites and current results, preserving stable IDs/counts and BASE.\n\n## Issue Number\n\nRefs #17568 (ready-for-dev), with independently reproduced #18263 and existing #17948, #17959 and #18061 linked from the map. Product fixes are tracked by their owning issues.\n\n## How to Test\n\nInstall locked dependencies with `npm ci --ignore-scripts` and put `.agents/skills/verify-openhands/scripts` on PATH. Run:\n\n```sh\ncontrol-openhands map check\ncontrol-openhands map coverage\ncontrol-openhands map testids\ncontrol-openhands map b"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18264"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "ee times go on #17932 (same `withRetry` cause). The ACP auth banners at 1.10:1 and 1.26:1 in Light+ go on #18004. Clearing the time and saving midnight is a new path for #17948; open PR #18260 changes only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #183"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18260,
          "title": "fix(automations): validate a cleared time of day before saving",
          "author": "gold-beyond",
          "author_url": "https://github.com/gold-beyond",
          "url": "https://github.com/OpenHands/OpenHands/pull/18260",
          "created_at": "2026-10-10T05:54:38Z",
          "updated_at": "2026-10-13T10:44:12Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "0f812ac68902d2c71896568311bffb8aa6f216a6",
          "scope": "Validates a cleared time-of-day schedule before saving; explicitly addresses only item 1 of this four-part issue.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fix(automations): validate a cleared time of day before saving\nHUMAN:\r\n\r\nThis was reproduced on a local mock Canvas while working through item 1 of #17948, and I've reviewed the fix and the before/after evidence above. With Time of day cleared, Save now keeps the dialog open with an inline required-field error and sends no request; re-entering a time saves the rebuilt cron. The automation detail tests pass (26/26). Opening this as the item-1 fix.\r\n\r\n\r\nAGENT:\r\n\r\n**What changed** — the Edit automation",
              "and an empty value fell through silently. When another field had also changed, Save PATCHed just that field and toasted \"Automation updated\", so nothing told the user the schedule edit was lost.\r\n\r\nReported as item 1 of #17948 and documented as `F23.edit-time-cleared` in `.agents/skills/verify-openhands/references/feature-map/F23-automation-detail.md` (\"Expected: an inline message and the dialog stays open\").\r\n\r\n## Summary\r\n\r\n- `handleSubmit` validates the time like the name and timeout fields: an empty or malformed value sets the schedule error and returns before any P",
              "me case asserts the field-bound error, no PATCH, no success toast and no close; a second test covers recovery (re-enter a time → the retry PATCHes the rebuilt schedule).\r\n\r\n## Issue Number\r\n\r\nAddresses the first item of #17948 (the issue's other three items are untouched by this PR).\r\n\r\n## How to Test\r\n\r\n1. `npm run dev:mock`, open an automation's detail page, then **Automation actions → Edit**.\r\n2. Clear **Time of day** and click **Save**.\r\n   - Before: the dialog closes with no request and no message; reopening Edit shows the old time.\r\n   - After: the dialog stays op",
              "this size of change.\r\n\r\n## Type\r\n\r\n- [x] Bug fix\r\n- [ ] Feature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\n- Draft on purpose: the `HUMAN:` note above belongs to the human contributor, and #17948 still needs `ready-for-dev` from a maintainer — the triage there asked for per-item reproduction evidence, and the item-1 screenshots are now posted in the issue thread.\r\n- Copy choice: the error reuses the existing, fully translated `ERROR$REQUIRED_FIELD` (\"This field is required\") instead of adding a new `AUTOMATIONS$*` key. Happy to switch to f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18260"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17949,
      "title": "[Bug]: Launcher: --allow-lan-session-key is ignored, the port-in-use error prints twice with a stack trace, and backend-only runtime_services lists a frontend",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17949",
      "created_at": "2026-10-05T01:58:18Z",
      "updated_at": "2026-10-12T05:05:36Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18363"
            ]
          },
          "number": 18363,
          "title": "fix(launcher): honor LAN opt-in and correct startup diagnostics",
          "url": "https://github.com/OpenHands/OpenHands/pull/18363",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:05:12Z",
          "updated_at": "2026-10-14T04:31:56Z",
          "head_sha": "9b6ebf3ee434f9cedcc6cae2b6198fbcd9bfc632",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17964,
          "title": "fix(agent-canvas): honor launcher runtime flags",
          "author": "FanouZeng-TT",
          "author_url": "https://github.com/FanouZeng-TT",
          "url": "https://github.com/OpenHands/OpenHands/pull/17964",
          "created_at": "2026-10-05T03:31:46Z",
          "updated_at": "2026-10-08T02:55:51Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T02:55:51Z",
          "head_sha": "378889f6a5746fdb45d0fc87a260a02971787315",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "th also printed busy-port errors twice because it emitted both the message and a stack whose first line repeated that message. Finally, backend-only runtime metadata described a frontend route that did not exist.\n\nFixes #17949\n\n## Summary\n\n- Parse and forward `--allow-lan-session-key` through the npm, Vite, and static launcher paths while preserving the key-free off-loopback default and rejecting the option in `--public` mode.\n- Render busy-port failures once, without an internal stack, and show both `--port <other>` and `PORT=<other>` alternatives; unexpected failures ",
              "ices actually launched, so backend-only mode no longer advertises a frontend fallback.\n- Add child-process, policy, parser, and runtime-metadata regressions covering the three reported behaviors.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nEnvironment: Node 24.21.0, installed dependencies from the lockfile with `npm ci`.\n\n1. Focused launcher regression suite:\n\n   ```bash\n   npm test -- --run \\\n     __tests__/bin/agent-canvas.test.ts \\\n     __tests__/scripts/bind-host.test.ts \\\n     __tests__/scripts/dev-static.test.ts \\\n     __tests__/scripts/dev-with-automation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17964"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18156,
          "title": "fix(launcher): honor --allow-lan-session-key, clean up port-in-use error, and align backend-only ingress description",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18156",
          "created_at": "2026-10-08T12:52:34Z",
          "updated_at": "2026-10-13T17:37:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "33b95c0abe9a404d284ab26d8df563378e083819",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "as in `--backend-only` mode).\n- Extended test coverage across `agent-canvas.test.ts`, `dev-safe.test.ts`, `dev-static.test.ts`, `dev-with-automation.test.ts`, and `runtime-services-info.test.ts`.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nRun the launcher test suites:\n```bash\nnpx vitest run __tests__/bin/agent-canvas.test.ts __tests__/scripts/bind-host.test.ts __tests__/scripts/dev-static.test.ts __tests__/scripts/dev-with-automation.test.ts __tests__/scripts/runtime-services-info.test.ts __tests__/scripts/dev-safe.test.ts\n```\n\nAll 156 tests pass.\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18156"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17964,
          "title": "fix(agent-canvas): honor launcher runtime flags",
          "author": "FanouZeng-TT",
          "author_url": "https://github.com/FanouZeng-TT",
          "url": "https://github.com/OpenHands/OpenHands/pull/17964",
          "created_at": "2026-10-05T03:31:46Z",
          "updated_at": "2026-10-08T02:55:51Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T02:55:51Z",
          "head_sha": "378889f6a5746fdb45d0fc87a260a02971787315",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "th also printed busy-port errors twice because it emitted both the message and a stack whose first line repeated that message. Finally, backend-only runtime metadata described a frontend route that did not exist.\n\nFixes #17949\n\n## Summary\n\n- Parse and forward `--allow-lan-session-key` through the npm, Vite, and static launcher paths while preserving the key-free off-loopback default and rejecting the option in `--public` mode.\n- Render busy-port failures once, without an internal stack, and show both `--port <other>` and `PORT=<other>` alternatives; unexpected failures ",
              "ices actually launched, so backend-only mode no longer advertises a frontend fallback.\n- Add child-process, policy, parser, and runtime-metadata regressions covering the three reported behaviors.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nEnvironment: Node 24.21.0, installed dependencies from the lockfile with `npm ci`.\n\n1. Focused launcher regression suite:\n\n   ```bash\n   npm test -- --run \\\n     __tests__/bin/agent-canvas.test.ts \\\n     __tests__/scripts/bind-host.test.ts \\\n     __tests__/scripts/dev-static.test.ts \\\n     __tests__/scripts/dev-with-automation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17964"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18156,
          "title": "fix(launcher): honor --allow-lan-session-key, clean up port-in-use error, and align backend-only ingress description",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18156",
          "created_at": "2026-10-08T12:52:34Z",
          "updated_at": "2026-10-13T17:37:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "33b95c0abe9a404d284ab26d8df563378e083819",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "as in `--backend-only` mode).\n- Extended test coverage across `agent-canvas.test.ts`, `dev-safe.test.ts`, `dev-static.test.ts`, `dev-with-automation.test.ts`, and `runtime-services-info.test.ts`.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nRun the launcher test suites:\n```bash\nnpx vitest run __tests__/bin/agent-canvas.test.ts __tests__/scripts/bind-host.test.ts __tests__/scripts/dev-static.test.ts __tests__/scripts/dev-with-automation.test.ts __tests__/scripts/runtime-services-info.test.ts __tests__/scripts/dev-safe.test.ts\n```\n\nAll 156 tests pass.\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18156"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18363"
            ]
          },
          "number": 18363,
          "title": "fix(launcher): honor LAN opt-in and correct startup diagnostics",
          "url": "https://github.com/OpenHands/OpenHands/pull/18363",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:05:12Z",
          "updated_at": "2026-10-14T04:31:56Z",
          "head_sha": "9b6ebf3ee434f9cedcc6cae2b6198fbcd9bfc632",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "s \"(no output)\" for runs that created a conversation (local backend)\n- OpenHands/OpenHands#17948: Automation detail and edit: schedule edit silently dropped, wrong run label, slow not-found page, tarball saved as .tar\n- OpenHands/OpenHands#17949: Launcher: --allow-lan-session-key is ignored, the port-in-use error prints twice with a stack trace, and backend-only runtime_services lists a frontend\n- OpenHands/OpenHands#17950: Git Sync page shows credentials embedded in the repository URL, and its Enable help text is outdated\n- OpenHands/OpenHands#17951: Switching backend from a Manage backe"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "p/test` returns the 401 as `error_kind` `unknown`, so only the SDK can classify it | filed: OpenHands/software-agent-sdk#5607 |\n| `--allow-lan-session-key` ignored by the npm launcher | confirmed 2/2 | already item 1 of #17949; the map row links it |\n| First activation of a new backend from `/conversations/<id>` asks the new backend for the old conversation id (`?ids=`) | not reproduced: 0 of 17 first activations, clean and failed-then-clean, under CPU load and human-paced | watch item, noted in the F25 Gotcha |\n| A stdio MCP server that exits before the handshake is re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18156,
          "title": "fix(launcher): honor --allow-lan-session-key, clean up port-in-use error, and align backend-only ingress description",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18156",
          "created_at": "2026-10-08T12:52:34Z",
          "updated_at": "2026-10-13T17:37:28Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "33b95c0abe9a404d284ab26d8df563378e083819",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "as in `--backend-only` mode).\n- Extended test coverage across `agent-canvas.test.ts`, `dev-safe.test.ts`, `dev-static.test.ts`, `dev-with-automation.test.ts`, and `runtime-services-info.test.ts`.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nRun the launcher test suites:\n```bash\nnpx vitest run __tests__/bin/agent-canvas.test.ts __tests__/scripts/bind-host.test.ts __tests__/scripts/dev-static.test.ts __tests__/scripts/dev-with-automation.test.ts __tests__/scripts/runtime-services-info.test.ts __tests__/scripts/dev-safe.test.ts\n```\n\nAll 156 tests pass.\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18156"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18363"
            ]
          },
          "number": 18363,
          "title": "fix(launcher): honor LAN opt-in and correct startup diagnostics",
          "url": "https://github.com/OpenHands/OpenHands/pull/18363",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:05:12Z",
          "updated_at": "2026-10-14T04:31:56Z",
          "head_sha": "9b6ebf3ee434f9cedcc6cae2b6198fbcd9bfc632",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17964,
          "title": "fix(agent-canvas): honor launcher runtime flags",
          "author": "FanouZeng-TT",
          "author_url": "https://github.com/FanouZeng-TT",
          "url": "https://github.com/OpenHands/OpenHands/pull/17964",
          "created_at": "2026-10-05T03:31:46Z",
          "updated_at": "2026-10-08T02:55:51Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-08T02:55:51Z",
          "head_sha": "378889f6a5746fdb45d0fc87a260a02971787315",
          "scope": "Honors the LAN session-key option, cleans busy-port errors and corrects backend-only runtime metadata.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "th also printed busy-port errors twice because it emitted both the message and a stack whose first line repeated that message. Finally, backend-only runtime metadata described a frontend route that did not exist.\n\nFixes #17949\n\n## Summary\n\n- Parse and forward `--allow-lan-session-key` through the npm, Vite, and static launcher paths while preserving the key-free off-loopback default and rejecting the option in `--public` mode.\n- Render busy-port failures once, without an internal stack, and show both `--port <other>` and `PORT=<other>` alternatives; unexpected failures ",
              "ices actually launched, so backend-only mode no longer advertises a frontend fallback.\n- Add child-process, policy, parser, and runtime-metadata regressions covering the three reported behaviors.\n\n## Issue Number\n\nFixes #17949\n\n## How to Test\n\nEnvironment: Node 24.21.0, installed dependencies from the lockfile with `npm ci`.\n\n1. Focused launcher regression suite:\n\n   ```bash\n   npm test -- --run \\\n     __tests__/bin/agent-canvas.test.ts \\\n     __tests__/scripts/bind-host.test.ts \\\n     __tests__/scripts/dev-static.test.ts \\\n     __tests__/scripts/dev-with-automation.tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17964"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17950,
      "title": "[Bug]: Git Sync page shows credentials embedded in the repository URL, and its Enable help text is outdated",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17950",
      "created_at": "2026-10-05T01:58:39Z",
      "updated_at": "2026-10-06T20:29:35Z",
      "state": "closed",
      "closed_at": "2026-10-06T20:29:35Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18039,
          "title": "fix(automations): hide repository credentials on the Git Sync status card",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18039",
          "created_at": "2026-10-05T21:47:11Z",
          "updated_at": "2026-10-08T20:37:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:29:34Z",
          "closed_at": "2026-10-06T20:29:34Z",
          "head_sha": "849252a419b38100916aa3471fc1c6a8f00bf624",
          "scope": "Redacts repository credentials in the Git Sync card and updates Enable help copy.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "this off to pause syncing without losing the configuration.\"\n- Removed three unused keys from every locale: `AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR`, `NOT_LOCAL_TITLE` and `NOT_LOCAL_MESSAGE`.\n\n## Issue Number\n\nFixes #17950\n\n## How to Test\n\nUnit tests and checks (the 4 new cases failed on main and pass on this branch):\n\n```bash\nnpx vitest run src/components/features/automations/git-sync/ __tests__/routes/automation-git-sync.test.tsx __tests__/hooks/query/use-git-sync.test.tsx   # 5 files, 63 tests passed\nnpm run make-i18n && npm run check-translation-completeness    "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18039"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18039,
          "title": "fix(automations): hide repository credentials on the Git Sync status card",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18039",
          "created_at": "2026-10-05T21:47:11Z",
          "updated_at": "2026-10-08T20:37:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:29:34Z",
          "closed_at": "2026-10-06T20:29:34Z",
          "head_sha": "849252a419b38100916aa3471fc1c6a8f00bf624",
          "scope": "Redacts repository credentials in the Git Sync card and updates Enable help copy.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "this off to pause syncing without losing the configuration.\"\n- Removed three unused keys from every locale: `AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR`, `NOT_LOCAL_TITLE` and `NOT_LOCAL_MESSAGE`.\n\n## Issue Number\n\nFixes #17950\n\n## How to Test\n\nUnit tests and checks (the 4 new cases failed on main and pass on this branch):\n\n```bash\nnpx vitest run src/components/features/automations/git-sync/ __tests__/routes/automation-git-sync.test.tsx __tests__/hooks/query/use-git-sync.test.tsx   # 5 files, 63 tests passed\nnpm run make-i18n && npm run check-translation-completeness    "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18039"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ot-found page, tarball saved as .tar\n- OpenHands/OpenHands#17949: Launcher: --allow-lan-session-key is ignored, the port-in-use error prints twice with a stack trace, and backend-only runtime_services lists a frontend\n- OpenHands/OpenHands#17950: Git Sync page shows credentials embedded in the repository URL, and its Enable help text is outdated\n- OpenHands/OpenHands#17951: Switching backend from a Manage backends row leaves a blank conversation page instead of redirecting\n- OpenHands/OpenHands#17952: Automation detail page never shows Repositories, Plugins or Notification for automations"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "icate plugin install's `force=true` toast (#18090).\n- **#18031** (#17924), F07: the Available Hooks dialog lists the workspace's `hooks.json` (read on first open and on Refresh, then cached for 5 minutes).\n- **#18039** (#17950), F24: the Git Sync card hides repository credentials, and the switch's help text is current.\n- **#18041** (#17952), F23: Repositories and Plugins render from `preset_metadata`, and Export keeps them.\n- Smaller fixes: F23.run-now-error re-reads the toast history after the not-found state, since a late second toast would otherwise be missed (found "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18039,
          "title": "fix(automations): hide repository credentials on the Git Sync status card",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18039",
          "created_at": "2026-10-05T21:47:11Z",
          "updated_at": "2026-10-08T20:37:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:29:34Z",
          "closed_at": "2026-10-06T20:29:34Z",
          "head_sha": "849252a419b38100916aa3471fc1c6a8f00bf624",
          "scope": "Redacts repository credentials in the Git Sync card and updates Enable help copy.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "this off to pause syncing without losing the configuration.\"\n- Removed three unused keys from every locale: `AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR`, `NOT_LOCAL_TITLE` and `NOT_LOCAL_MESSAGE`.\n\n## Issue Number\n\nFixes #17950\n\n## How to Test\n\nUnit tests and checks (the 4 new cases failed on main and pass on this branch):\n\n```bash\nnpx vitest run src/components/features/automations/git-sync/ __tests__/routes/automation-git-sync.test.tsx __tests__/hooks/query/use-git-sync.test.tsx   # 5 files, 63 tests passed\nnpm run make-i18n && npm run check-translation-completeness    "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18039"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18039,
          "title": "fix(automations): hide repository credentials on the Git Sync status card",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18039",
          "created_at": "2026-10-05T21:47:11Z",
          "updated_at": "2026-10-08T20:37:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:29:34Z",
          "closed_at": "2026-10-06T20:29:34Z",
          "head_sha": "849252a419b38100916aa3471fc1c6a8f00bf624",
          "scope": "Redacts repository credentials in the Git Sync card and updates Enable help copy.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "this off to pause syncing without losing the configuration.\"\n- Removed three unused keys from every locale: `AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR`, `NOT_LOCAL_TITLE` and `NOT_LOCAL_MESSAGE`.\n\n## Issue Number\n\nFixes #17950\n\n## How to Test\n\nUnit tests and checks (the 4 new cases failed on main and pass on this branch):\n\n```bash\nnpx vitest run src/components/features/automations/git-sync/ __tests__/routes/automation-git-sync.test.tsx __tests__/hooks/query/use-git-sync.test.tsx   # 5 files, 63 tests passed\nnpm run make-i18n && npm run check-translation-completeness    "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18039"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18039; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17951,
      "title": "[Bug]: Switching backend from a Manage backends row leaves a blank conversation page instead of redirecting",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17951",
      "created_at": "2026-10-05T02:02:31Z",
      "updated_at": "2026-10-06T01:16:44Z",
      "state": "closed",
      "closed_at": "2026-10-06T01:16:44Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18024,
          "title": "fix(backends): redirect off detail pages when switching from Manage backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18024",
          "created_at": "2026-10-05T21:01:38Z",
          "updated_at": "2026-10-08T20:38:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:42Z",
          "closed_at": "2026-10-06T01:16:42Z",
          "head_sha": "5ffa474465546f5d258ce670edb5df3939d15f78",
          "scope": "Redirects away from detail pages after switching backend through Manage backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e backend still only closes the modal, and pages that are not detail pages are not redirected.\r\n- `BackendFormModal` uses the shared hook in place of its private copy, with the same behavior.\r\n\r\n## Issue Number\r\n\r\nFixes #17951\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (run from the repo root, after rebasing onto `53ad0012f`):\r\n\r\n- `npx vitest run __tests__/components/backends/ src/components/features/backends/ src/root.test.tsx`: 11 files, 149 tests passed.\r\n- `npx vitest run __tests__/components/features/sidebar/sidebar.test.tsx __tests__/components/features/sidebar/sid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18024"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18024,
          "title": "fix(backends): redirect off detail pages when switching from Manage backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18024",
          "created_at": "2026-10-05T21:01:38Z",
          "updated_at": "2026-10-08T20:38:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:42Z",
          "closed_at": "2026-10-06T01:16:42Z",
          "head_sha": "5ffa474465546f5d258ce670edb5df3939d15f78",
          "scope": "Redirects away from detail pages after switching backend through Manage backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e backend still only closes the modal, and pages that are not detail pages are not redirected.\r\n- `BackendFormModal` uses the shared hook in place of its private copy, with the same behavior.\r\n\r\n## Issue Number\r\n\r\nFixes #17951\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (run from the repo root, after rebasing onto `53ad0012f`):\r\n\r\n- `npx vitest run __tests__/components/backends/ src/components/features/backends/ src/root.test.tsx`: 11 files, 149 tests passed.\r\n- `npx vitest run __tests__/components/features/sidebar/sidebar.test.tsx __tests__/components/features/sidebar/sid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18024"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ror prints twice with a stack trace, and backend-only runtime_services lists a frontend\n- OpenHands/OpenHands#17950: Git Sync page shows credentials embedded in the repository URL, and its Enable help text is outdated\n- OpenHands/OpenHands#17951: Switching backend from a Manage backends row leaves a blank conversation page instead of redirecting\n- OpenHands/OpenHands#17952: Automation detail page never shows Repositories, Plugins or Notification for automations that have them\n- OpenHands/OpenHands#17953: Backends and Cloud sign-in: Escape closes the whole Manage backends stack, raw 404 to"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18024,
          "title": "fix(backends): redirect off detail pages when switching from Manage backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18024",
          "created_at": "2026-10-05T21:01:38Z",
          "updated_at": "2026-10-08T20:38:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:42Z",
          "closed_at": "2026-10-06T01:16:42Z",
          "head_sha": "5ffa474465546f5d258ce670edb5df3939d15f78",
          "scope": "Redirects away from detail pages after switching backend through Manage backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e backend still only closes the modal, and pages that are not detail pages are not redirected.\r\n- `BackendFormModal` uses the shared hook in place of its private copy, with the same behavior.\r\n\r\n## Issue Number\r\n\r\nFixes #17951\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (run from the repo root, after rebasing onto `53ad0012f`):\r\n\r\n- `npx vitest run __tests__/components/backends/ src/components/features/backends/ src/root.test.tsx`: 11 files, 149 tests passed.\r\n- `npx vitest run __tests__/components/features/sidebar/sidebar.test.tsx __tests__/components/features/sidebar/sid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18024"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18024,
          "title": "fix(backends): redirect off detail pages when switching from Manage backends",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18024",
          "created_at": "2026-10-05T21:01:38Z",
          "updated_at": "2026-10-08T20:38:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:42Z",
          "closed_at": "2026-10-06T01:16:42Z",
          "head_sha": "5ffa474465546f5d258ce670edb5df3939d15f78",
          "scope": "Redirects away from detail pages after switching backend through Manage backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e backend still only closes the modal, and pages that are not detail pages are not redirected.\r\n- `BackendFormModal` uses the shared hook in place of its private copy, with the same behavior.\r\n\r\n## Issue Number\r\n\r\nFixes #17951\r\n\r\n## How to Test\r\n\r\nUnit tests and lint (run from the repo root, after rebasing onto `53ad0012f`):\r\n\r\n- `npx vitest run __tests__/components/backends/ src/components/features/backends/ src/root.test.tsx`: 11 files, 149 tests passed.\r\n- `npx vitest run __tests__/components/features/sidebar/sidebar.test.tsx __tests__/components/features/sidebar/sid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18024"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18024; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17952,
      "title": "[Bug]: Automation detail page never shows Repositories, Plugins or Notification for automations that have them",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17952",
      "created_at": "2026-10-05T02:03:39Z",
      "updated_at": "2026-10-06T20:27:00Z",
      "state": "closed",
      "closed_at": "2026-10-06T20:27:00Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18041,
          "title": "fix(automations): show repositories and plugins stored in preset_metadata",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18041",
          "created_at": "2026-10-05T21:55:31Z",
          "updated_at": "2026-10-08T20:37:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:26:59Z",
          "closed_at": "2026-10-06T20:26:59Z",
          "head_sha": "9308a4def1e266d96100b10ea2e6a563abdb8524",
          "scope": "Shows preset repositories/plugins on automation details and preserves them on export.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ETAIL$REPOSITORIES` / `PLUGINS` keys are reused.\n- Export writes the first repository's URL and ref as `spec.repository` / `branch`, plus the plugin sources, so export then import recreates them.\n\n## Issue Number\n\nFixes #17952\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/api/automation-service.test.ts __tests__/components/automations/detail/configuration-section.test.tsx __tests__/routes/automation-detail.test.tsx src/utils/automation-export.test.ts\nnpm run lint\n```\n\n- The 4 test files pass (63/63 after rebasing on current main). The 9 new tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18041"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18041,
          "title": "fix(automations): show repositories and plugins stored in preset_metadata",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18041",
          "created_at": "2026-10-05T21:55:31Z",
          "updated_at": "2026-10-08T20:37:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:26:59Z",
          "closed_at": "2026-10-06T20:26:59Z",
          "head_sha": "9308a4def1e266d96100b10ea2e6a563abdb8524",
          "scope": "Shows preset repositories/plugins on automation details and preserves them on export.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ETAIL$REPOSITORIES` / `PLUGINS` keys are reused.\n- Export writes the first repository's URL and ref as `spec.repository` / `branch`, plus the plugin sources, so export then import recreates them.\n\n## Issue Number\n\nFixes #17952\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/api/automation-service.test.ts __tests__/components/automations/detail/configuration-section.test.tsx __tests__/routes/automation-detail.test.tsx src/utils/automation-export.test.ts\nnpm run lint\n```\n\n- The 4 test files pass (63/63 after rebasing on current main). The 9 new tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18041"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " shows credentials embedded in the repository URL, and its Enable help text is outdated\n- OpenHands/OpenHands#17951: Switching backend from a Manage backends row leaves a blank conversation page instead of redirecting\n- OpenHands/OpenHands#17952: Automation detail page never shows Repositories, Plugins or Notification for automations that have them\n- OpenHands/OpenHands#17953: Backends and Cloud sign-in: Escape closes the whole Manage backends stack, raw 404 toast on shared pages, stray about:blank pop-ups\n- OpenHands/OpenHands#17954: Plugins and Apps: install/update errors say \"Disconnec"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "e workspace's `hooks.json` (read on first open and on Refresh, then cached for 5 minutes).\n- **#18039** (#17950), F24: the Git Sync card hides repository credentials, and the switch's help text is current.\n- **#18041** (#17952), F23: Repositories and Plugins render from `preset_metadata`, and Export keeps them.\n- Smaller fixes: F23.run-now-error re-reads the toast history after the not-found state, since a late second toast would otherwise be missed (found while reviewing #18073). F23 lists `automation-preset-sources.ts` as a source, and the README's F24 row names the r"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18041,
          "title": "fix(automations): show repositories and plugins stored in preset_metadata",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18041",
          "created_at": "2026-10-05T21:55:31Z",
          "updated_at": "2026-10-08T20:37:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:26:59Z",
          "closed_at": "2026-10-06T20:26:59Z",
          "head_sha": "9308a4def1e266d96100b10ea2e6a563abdb8524",
          "scope": "Shows preset repositories/plugins on automation details and preserves them on export.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ETAIL$REPOSITORIES` / `PLUGINS` keys are reused.\n- Export writes the first repository's URL and ref as `spec.repository` / `branch`, plus the plugin sources, so export then import recreates them.\n\n## Issue Number\n\nFixes #17952\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/api/automation-service.test.ts __tests__/components/automations/detail/configuration-section.test.tsx __tests__/routes/automation-detail.test.tsx src/utils/automation-export.test.ts\nnpm run lint\n```\n\n- The 4 test files pass (63/63 after rebasing on current main). The 9 new tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18041"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18041,
          "title": "fix(automations): show repositories and plugins stored in preset_metadata",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18041",
          "created_at": "2026-10-05T21:55:31Z",
          "updated_at": "2026-10-08T20:37:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:26:59Z",
          "closed_at": "2026-10-06T20:26:59Z",
          "head_sha": "9308a4def1e266d96100b10ea2e6a563abdb8524",
          "scope": "Shows preset repositories/plugins on automation details and preserves them on export.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ETAIL$REPOSITORIES` / `PLUGINS` keys are reused.\n- Export writes the first repository's URL and ref as `spec.repository` / `branch`, plus the plugin sources, so export then import recreates them.\n\n## Issue Number\n\nFixes #17952\n\n## How to Test\n\nUnit tests and lint:\n\n```bash\nnpx vitest run __tests__/api/automation-service.test.ts __tests__/components/automations/detail/configuration-section.test.tsx __tests__/routes/automation-detail.test.tsx src/utils/automation-export.test.ts\nnpm run lint\n```\n\n- The 4 test files pass (63/63 after rebasing on current main). The 9 new tes"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18041"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18041; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17953,
      "title": "[Bug]: Backends and Cloud sign-in: Escape closes the whole Manage backends stack, raw 404 toast on shared pages, stray about:blank pop-ups",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17953",
      "created_at": "2026-10-05T02:04:03Z",
      "updated_at": "2026-10-14T03:52:32Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18423"
            ]
          },
          "number": 18423,
          "title": "fix(backends): keep stacked backend forms on Escape, drop the shared 404 toast, close failed login popups",
          "url": "https://github.com/OpenHands/OpenHands/pull/18423",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:20:34Z",
          "updated_at": "2026-10-14T04:34:22Z",
          "head_sha": "90af5b96830c00c1bbbd2d43be40ed0665c84547",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18423"
            ]
          },
          "number": 18423,
          "title": "fix(backends): keep stacked backend forms on Escape, drop the shared 404 toast, close failed login popups",
          "url": "https://github.com/OpenHands/OpenHands/pull/18423",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:20:34Z",
          "updated_at": "2026-10-14T04:34:22Z",
          "head_sha": "90af5b96830c00c1bbbd2d43be40ed0665c84547",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "d from a Manage backends row leaves a blank conversation page instead of redirecting\n- OpenHands/OpenHands#17952: Automation detail page never shows Repositories, Plugins or Notification for automations that have them\n- OpenHands/OpenHands#17953: Backends and Cloud sign-in: Escape closes the whole Manage backends stack, raw 404 toast on shared pages, stray about:blank pop-ups\n- OpenHands/OpenHands#17954: Plugins and Apps: install/update errors say \"Disconnected (check URL or network)\" instead of the server's reason, and plugin errors toast twice\n- OpenHands/OpenHands#17955: Add LLM Profil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              ": #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets and F13.acp-model-discovery\n  - F16.backend-switch\n  - F21.saved-drafts\n  - F"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18423"
            ]
          },
          "number": 18423,
          "title": "fix(backends): keep stacked backend forms on Escape, drop the shared 404 toast, close failed login popups",
          "url": "https://github.com/OpenHands/OpenHands/pull/18423",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-14T03:20:34Z",
          "updated_at": "2026-10-14T04:34:22Z",
          "head_sha": "90af5b96830c00c1bbbd2d43be40ed0665c84547",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17954,
      "title": "[Bug]: Plugins and Apps: install/update errors say \"Disconnected (check URL or network)\" instead of the server's reason, and plugin errors toast twice",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17954",
      "created_at": "2026-10-05T02:04:31Z",
      "updated_at": "2026-10-06T20:36:09Z",
      "state": "closed",
      "closed_at": "2026-10-06T20:36:09Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18025,
          "title": "fix(plugins,apps): show the server's reason once for failed installs and updates",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18025",
          "created_at": "2026-10-05T21:03:12Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "closed_at": "2026-10-06T20:36:08Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Shows the backend reason once for plugin/App install and update failures.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " the new localized `SETTINGS$APPS_ALREADY_INSTALLED`: \"This app is already installed. Use Update or Uninstall on its card.\" (all 15 locales, using each locale's existing Update/Uninstall labels).\n\n## Issue Number\n\nFixes #17954\n\n## How to Test\n\nUnit tests (the new and changed ones fail on main, except these guards, which main also satisfies: a specific `detail` still wins over `exception`, the generic `detail` is returned when there is no `exception`, and the Apps toast keeps the shared disconnect wording when the request never lands; the hook tests use the app's real `c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18025"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18025,
          "title": "fix(plugins,apps): show the server's reason once for failed installs and updates",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18025",
          "created_at": "2026-10-05T21:03:12Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "closed_at": "2026-10-06T20:36:08Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Shows the backend reason once for plugin/App install and update failures.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " the new localized `SETTINGS$APPS_ALREADY_INSTALLED`: \"This app is already installed. Use Update or Uninstall on its card.\" (all 15 locales, using each locale's existing Update/Uninstall labels).\n\n## Issue Number\n\nFixes #17954\n\n## How to Test\n\nUnit tests (the new and changed ones fail on main, except these guards, which main also satisfies: a specific `detail` still wins over `exception`, the generic `detail` is returned when there is no `exception`, and the Apps toast keeps the shared disconnect wording when the request never lands; the hook tests use the app's real `c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18025"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ", Plugins or Notification for automations that have them\n- OpenHands/OpenHands#17953: Backends and Cloud sign-in: Escape closes the whole Manage backends stack, raw 404 toast on shared pages, stray about:blank pop-ups\n- OpenHands/OpenHands#17954: Plugins and Apps: install/update errors say \"Disconnected (check URL or network)\" instead of the server's reason, and plugin errors toast twice\n- OpenHands/OpenHands#17955: Add LLM Profile shows the agent's current LLM options (such as temperature) but saves the new profile without them\n- OpenHands/OpenHands#17956: Plugins and Apps UI: \"Launch La"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18051,
          "title": "fix(errors): show the server's message instead of raw HttpError text in generic error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18051",
          "created_at": "2026-10-06T04:34:51Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "closed_at": "2026-10-06T21:53:28Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Formats generic SDK HTTP errors through the shared helper.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ork error\" as \"Disconnected\". #18025 handles that for plugins and apps, and moves the plugin hooks off this helper.\r\n- The duplicate toasts in flow 2 come from a hook's `onError` plus the global `MutationCache` handler. #17954 item 3 has the same cause, and #18025 fixes it for the plugin hooks. It is out of scope here.\r\n- I checked all 25 calls to the helper on this branch: the 2 global ones and 23 in 20 other files. (`main` has a 26th, in `getApiOrConnectionErrorMessage`, which this branch replaces.) None compares the result to the raw text. The one text comparison, in"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18051"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly says the plugin/App duplicate-toast issue is out of scope and fixed separately in #18025."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ged on 2026-10-06, after the feature map's last refresh in #17961. Their map rows still described the old, broken behavior, so a verification run would have reported fixed features as failing.\n\n## Summary\n\n- **#18025** (#17954), F19 and F20: plugin and App install and update errors now show one toast with the server's reason, and a duplicate App install points to Update or Uninstall. Still broken, kept as Known failures: the catalog-source rewrite (OpenHands/software-agent-sdk#5496, narrowed) and the duplicate plugin install's `force=true` toast (#18090).\n- **#18031** ("
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18025,
          "title": "fix(plugins,apps): show the server's reason once for failed installs and updates",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18025",
          "created_at": "2026-10-05T21:03:12Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "closed_at": "2026-10-06T20:36:08Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Shows the backend reason once for plugin/App install and update failures.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " the new localized `SETTINGS$APPS_ALREADY_INSTALLED`: \"This app is already installed. Use Update or Uninstall on its card.\" (all 15 locales, using each locale's existing Update/Uninstall labels).\n\n## Issue Number\n\nFixes #17954\n\n## How to Test\n\nUnit tests (the new and changed ones fail on main, except these guards, which main also satisfies: a specific `detail` still wins over `exception`, the generic `detail` is returned when there is no `exception`, and the Apps toast keeps the shared disconnect wording when the request never lands; the hook tests use the app's real `c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18025"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18025,
          "title": "fix(plugins,apps): show the server's reason once for failed installs and updates",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18025",
          "created_at": "2026-10-05T21:03:12Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "closed_at": "2026-10-06T20:36:08Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Shows the backend reason once for plugin/App install and update failures.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " the new localized `SETTINGS$APPS_ALREADY_INSTALLED`: \"This app is already installed. Use Update or Uninstall on its card.\" (all 15 locales, using each locale's existing Update/Uninstall labels).\n\n## Issue Number\n\nFixes #17954\n\n## How to Test\n\nUnit tests (the new and changed ones fail on main, except these guards, which main also satisfies: a specific `detail` still wins over `exception`, the generic `detail` is returned when there is no `exception`, and the Apps toast keeps the shared disconnect wording when the request never lands; the hook tests use the app's real `c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18025"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18025; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17955,
      "title": "[Bug]: Add LLM Profile shows the agent's current LLM options (such as temperature) but saves the new profile without them",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17955",
      "created_at": "2026-10-05T02:04:48Z",
      "updated_at": "2026-10-14T04:15:52Z",
      "state": "closed",
      "closed_at": "2026-10-14T04:15:52Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "GitHub identifies this merged PR as the issue’s closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18422"
            ]
          },
          "number": 18422,
          "title": "fix(settings): preserve the new LLM profile form values",
          "url": "https://github.com/OpenHands/OpenHands/pull/18422",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-14T04:15:50Z",
          "closed_at": "2026-10-14T04:15:51Z",
          "created_at": "2026-10-14T02:28:55Z",
          "updated_at": "2026-10-14T04:16:24Z",
          "head_sha": "28ec0d0b1c09c5f58cd23dea3c6c681268928560",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17965,
          "title": "fix(settings): persist displayed active llm settings when creating profile",
          "author": "Rustaman1280",
          "author_url": "https://github.com/Rustaman1280",
          "url": "https://github.com/OpenHands/OpenHands/pull/17965",
          "created_at": "2026-10-05T03:55:12Z",
          "updated_at": "2026-10-05T08:51:56Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "feffce0c4a4a6e3950b9550ea66f5b770e09eb72",
          "scope": "Persists the inherited LLM options displayed when creating a new profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "hes.\n- Added unit tests in `llm-settings-local-view.test.tsx` to verify that unedited settings displayed during profile creation are persisted, and that newly edited values still take precedence.\n\n## Issue Number\n\nFixes #17955\n\n## How to Test\n\n1. Run `npx vitest run __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx`\n2. Run `npm run typecheck`\n3. Launch UI -> Settings -> LLM -> Add LLM Profile. Ensure fields shown in the All tab (e.g. Temperature) are preserved after saving a new profile without manually typing into them.\n\n## Type\n\n- [x] Bug fix"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17965"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18377"
            ]
          },
          "number": 18377,
          "title": "fix(settings): preserve non-credential agent LLM options when creating profile",
          "url": "https://github.com/OpenHands/OpenHands/pull/18377",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:55:59Z",
          "updated_at": "2026-10-13T09:09:52Z",
          "head_sha": "536c4126c7c1e4eba178874ce155d414782fc331",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17965,
          "title": "fix(settings): persist displayed active llm settings when creating profile",
          "author": "Rustaman1280",
          "author_url": "https://github.com/Rustaman1280",
          "url": "https://github.com/OpenHands/OpenHands/pull/17965",
          "created_at": "2026-10-05T03:55:12Z",
          "updated_at": "2026-10-05T08:51:56Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "feffce0c4a4a6e3950b9550ea66f5b770e09eb72",
          "scope": "Persists the inherited LLM options displayed when creating a new profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "hes.\n- Added unit tests in `llm-settings-local-view.test.tsx` to verify that unedited settings displayed during profile creation are persisted, and that newly edited values still take precedence.\n\n## Issue Number\n\nFixes #17955\n\n## How to Test\n\n1. Run `npx vitest run __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx`\n2. Run `npm run typecheck`\n3. Launch UI -> Settings -> LLM -> Add LLM Profile. Ensure fields shown in the All tab (e.g. Temperature) are preserved after saving a new profile without manually typing into them.\n\n## Type\n\n- [x] Bug fix"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17965"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18377"
            ]
          },
          "number": 18377,
          "title": "fix(settings): preserve non-credential agent LLM options when creating profile",
          "url": "https://github.com/OpenHands/OpenHands/pull/18377",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:55:59Z",
          "updated_at": "2026-10-13T09:09:52Z",
          "head_sha": "536c4126c7c1e4eba178874ce155d414782fc331",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        },
        {
          "scope": "GitHub identifies this merged PR as the issue’s closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18422"
            ]
          },
          "number": 18422,
          "title": "fix(settings): preserve the new LLM profile form values",
          "url": "https://github.com/OpenHands/OpenHands/pull/18422",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-14T04:15:50Z",
          "closed_at": "2026-10-14T04:15:51Z",
          "created_at": "2026-10-14T02:28:55Z",
          "updated_at": "2026-10-14T04:16:24Z",
          "head_sha": "28ec0d0b1c09c5f58cd23dea3c6c681268928560",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "t on shared pages, stray about:blank pop-ups\n- OpenHands/OpenHands#17954: Plugins and Apps: install/update errors say \"Disconnected (check URL or network)\" instead of the server's reason, and plugin errors toast twice\n- OpenHands/OpenHands#17955: Add LLM Profile shows the agent's current LLM options (such as temperature) but saves the new profile without them\n- OpenHands/OpenHands#17956: Plugins and Apps UI: \"Launch Launch Plugin\" title, \"skill\" wording on plugin controls, app switch usable while busy, docs point to /extensions\n- OpenHands/OpenHands#17957: Skill detail modal ignores Escap"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18017,
          "title": "fix(llm-profiles): keep the auto-filled profile name following the model",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18017",
          "created_at": "2026-10-05T20:40:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "closed_at": "2026-10-06T00:00:08Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Synchronizes auto-generated profile names with model selection.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "mes after clear\" test goes through one extra refill. The final assertions still pin the observable behaviour.\r\n- A provider change that empties the model leaves the name as it is until a model is picked.\r\n- Not touched: #17955 (inherited LLM options dropped on create).\r\n- Follow-up: the F10 feature-map entry in #17961 still describes this bug (\"today it stays gpt-5.6-sol\" and a Gotcha); update it once this merges.\r\n\r\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/agent-ca"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18017"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states inherited LLM-option persistence under #17955 is not touched."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              ". Clearing the time and saving midnight is a new path for #17948; open PR #18260 changes only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "scope": "GitHub identifies this merged PR as the issue’s closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18422"
            ]
          },
          "number": 18422,
          "title": "fix(settings): preserve the new LLM profile form values",
          "url": "https://github.com/OpenHands/OpenHands/pull/18422",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-14T04:15:50Z",
          "closed_at": "2026-10-14T04:15:51Z",
          "created_at": "2026-10-14T02:28:55Z",
          "updated_at": "2026-10-14T04:16:24Z",
          "head_sha": "28ec0d0b1c09c5f58cd23dea3c6c681268928560",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 2,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17965,
          "title": "fix(settings): persist displayed active llm settings when creating profile",
          "author": "Rustaman1280",
          "author_url": "https://github.com/Rustaman1280",
          "url": "https://github.com/OpenHands/OpenHands/pull/17965",
          "created_at": "2026-10-05T03:55:12Z",
          "updated_at": "2026-10-05T08:51:56Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "feffce0c4a4a6e3950b9550ea66f5b770e09eb72",
          "scope": "Persists the inherited LLM options displayed when creating a new profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "hes.\n- Added unit tests in `llm-settings-local-view.test.tsx` to verify that unedited settings displayed during profile creation are persisted, and that newly edited values still take precedence.\n\n## Issue Number\n\nFixes #17955\n\n## How to Test\n\n1. Run `npx vitest run __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx`\n2. Run `npm run typecheck`\n3. Launch UI -> Settings -> LLM -> Add LLM Profile. Ensure fields shown in the All tab (e.g. Temperature) are preserved after saving a new profile without manually typing into them.\n\n## Type\n\n- [x] Bug fix"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17965"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18377"
            ]
          },
          "number": 18377,
          "title": "fix(settings): preserve non-credential agent LLM options when creating profile",
          "url": "https://github.com/OpenHands/OpenHands/pull/18377",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T08:55:59Z",
          "updated_at": "2026-10-13T09:09:52Z",
          "head_sha": "536c4126c7c1e4eba178874ce155d414782fc331",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "scope": "GitHub identifies this merged PR as the issue’s closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18422"
            ]
          },
          "number": 18422,
          "title": "fix(settings): preserve the new LLM profile form values",
          "url": "https://github.com/OpenHands/OpenHands/pull/18422",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-14T04:15:50Z",
          "closed_at": "2026-10-14T04:15:51Z",
          "created_at": "2026-10-14T02:28:55Z",
          "updated_at": "2026-10-14T04:16:24Z",
          "head_sha": "28ec0d0b1c09c5f58cd23dea3c6c681268928560",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18422; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17956,
      "title": "[Bug]: Plugins and Apps UI: \"Launch Launch Plugin\" title, \"skill\" wording on plugin controls, app switch usable while busy, docs point to /extensions",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17956",
      "created_at": "2026-10-05T02:05:00Z",
      "updated_at": "2026-10-06T04:27:46Z",
      "state": "closed",
      "closed_at": "2026-10-06T04:27:46Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Corrects plugin wording/title/docs and disables busy App switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lts.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the four Plugins and Apps UI problems from #17956: the doubled \"Launch Launch Plugin\" heading, \"skill\" wording on plugin controls, an Apps switch that still reacts to the keyboard while its card is busy, and docs that still point to `/extensions`.\n\n## Why\n\n- **\"Launch Launch Plugin\":** the plugin launch modal rendered `{t(LAUNCH$MODAL_TITLE)} {modalTitle}`. With more than one plugin, `modalTitle`",
              "d app\"). The spec drops the \"/extensions is the inventory\" and \"no Refresh action\" claims and describes the card's Update action, which re-installs with `force: true` and keeps the enabled state.\n\n## Issue Number\n\nFixes #17956\n\n## How to Test\n\nUnit tests, i18n and lint (run on this branch after rebasing onto `main` at e7048e74c):\n\n```bash\nnpm run make-i18n\nnpx vitest run __tests__/routes/canvas-extensions.test.tsx \\\n  __tests__/components/automations/toggle-switch.test.tsx \\\n  __tests__/routes/plugins-page.test.tsx __tests__/routes/launch.test.tsx \\\n  __tests__/componen",
              "ally shows \"Hello from an extension\". This is the separate `nav_label` issue and is left for that follow-up.\n- **Follow-up in another PR:** the verify-openhands feature map in #17961 (F20 busy-lock, and the \"Known issue #17956\" gotcha) describes the old behavior and should be updated once this merges.\n- **Unrelated files:** `.pr/` also contains files from other PRs that are already on `main`. Only the `before-*` and `after-*` files belong to this PR.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Corrects plugin wording/title/docs and disables busy App switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lts.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the four Plugins and Apps UI problems from #17956: the doubled \"Launch Launch Plugin\" heading, \"skill\" wording on plugin controls, an Apps switch that still reacts to the keyboard while its card is busy, and docs that still point to `/extensions`.\n\n## Why\n\n- **\"Launch Launch Plugin\":** the plugin launch modal rendered `{t(LAUNCH$MODAL_TITLE)} {modalTitle}`. With more than one plugin, `modalTitle`",
              "d app\"). The spec drops the \"/extensions is the inventory\" and \"no Refresh action\" claims and describes the card's Update action, which re-installs with `force: true` and keeps the enabled state.\n\n## Issue Number\n\nFixes #17956\n\n## How to Test\n\nUnit tests, i18n and lint (run on this branch after rebasing onto `main` at e7048e74c):\n\n```bash\nnpm run make-i18n\nnpx vitest run __tests__/routes/canvas-extensions.test.tsx \\\n  __tests__/components/automations/toggle-switch.test.tsx \\\n  __tests__/routes/plugins-page.test.tsx __tests__/routes/launch.test.tsx \\\n  __tests__/componen",
              "ally shows \"Hello from an extension\". This is the separate `nav_label` issue and is left for that follow-up.\n- **Follow-up in another PR:** the verify-openhands feature map in #17961 (F20 busy-lock, and the \"Known issue #17956\" gotcha) describes the old behavior and should be updated once this merges.\n- **Unrelated files:** `.pr/` also contains files from other PRs that are already on `main`. Only the `before-*` and `after-*` files belong to this PR.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "), #18043 (#17906), #17910 (#17896) and #17660 (drawer VS Code link removed).\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purpose. software-age",
              "r network)\" instead of the server's reason, and plugin errors toast twice\n- OpenHands/OpenHands#17955: Add LLM Profile shows the agent's current LLM options (such as temperature) but saves the new profile without them\n- OpenHands/OpenHands#17956: Plugins and Apps UI: \"Launch Launch Plugin\" title, \"skill\" wording on plugin controls, app switch usable while busy, docs point to /extensions\n- OpenHands/OpenHands#17957: Skill detail modal ignores Escape while its '+N' tag popover trigger has focus\n- OpenHands/OpenHands#17958: Custom MCP server editor reports a malformed header as an environmen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Corrects plugin wording/title/docs and disables busy App switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lts.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the four Plugins and Apps UI problems from #17956: the doubled \"Launch Launch Plugin\" heading, \"skill\" wording on plugin controls, an Apps switch that still reacts to the keyboard while its card is busy, and docs that still point to `/extensions`.\n\n## Why\n\n- **\"Launch Launch Plugin\":** the plugin launch modal rendered `{t(LAUNCH$MODAL_TITLE)} {modalTitle}`. With more than one plugin, `modalTitle`",
              "d app\"). The spec drops the \"/extensions is the inventory\" and \"no Refresh action\" claims and describes the card's Update action, which re-installs with `force: true` and keeps the enabled state.\n\n## Issue Number\n\nFixes #17956\n\n## How to Test\n\nUnit tests, i18n and lint (run on this branch after rebasing onto `main` at e7048e74c):\n\n```bash\nnpm run make-i18n\nnpx vitest run __tests__/routes/canvas-extensions.test.tsx \\\n  __tests__/components/automations/toggle-switch.test.tsx \\\n  __tests__/routes/plugins-page.test.tsx __tests__/routes/launch.test.tsx \\\n  __tests__/componen",
              "ally shows \"Hello from an extension\". This is the separate `nav_label` issue and is left for that follow-up.\n- **Follow-up in another PR:** the verify-openhands feature map in #17961 (F20 busy-lock, and the \"Known issue #17956\" gotcha) describes the old behavior and should be updated once this merges.\n- **Unrelated files:** `.pr/` also contains files from other PRs that are already on `main`. Only the `before-*` and `after-*` files belong to this PR.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18040,
          "title": "fix(plugins): say \"plugin\" on plugin controls and keep busy app switches inert",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18040",
          "created_at": "2026-10-05T21:53:28Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "closed_at": "2026-10-06T04:27:45Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Corrects plugin wording/title/docs and disables busy App switches.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "lts.\n\n<!-- Human contributors: add a short note about your testing. -->\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work. This PR fixes the four Plugins and Apps UI problems from #17956: the doubled \"Launch Launch Plugin\" heading, \"skill\" wording on plugin controls, an Apps switch that still reacts to the keyboard while its card is busy, and docs that still point to `/extensions`.\n\n## Why\n\n- **\"Launch Launch Plugin\":** the plugin launch modal rendered `{t(LAUNCH$MODAL_TITLE)} {modalTitle}`. With more than one plugin, `modalTitle`",
              "d app\"). The spec drops the \"/extensions is the inventory\" and \"no Refresh action\" claims and describes the card's Update action, which re-installs with `force: true` and keeps the enabled state.\n\n## Issue Number\n\nFixes #17956\n\n## How to Test\n\nUnit tests, i18n and lint (run on this branch after rebasing onto `main` at e7048e74c):\n\n```bash\nnpm run make-i18n\nnpx vitest run __tests__/routes/canvas-extensions.test.tsx \\\n  __tests__/components/automations/toggle-switch.test.tsx \\\n  __tests__/routes/plugins-page.test.tsx __tests__/routes/launch.test.tsx \\\n  __tests__/componen",
              "ally shows \"Hello from an extension\". This is the separate `nav_label` issue and is left for that follow-up.\n- **Follow-up in another PR:** the verify-openhands feature map in #17961 (F20 busy-lock, and the \"Known issue #17956\" gotcha) describes the old behavior and should be updated once this merges.\n- **Unrelated files:** `.pr/` also contains files from other PRs that are already on `main`. Only the `before-*` and `after-*` files belong to this PR.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18040"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18040; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17957,
      "title": "[Bug]: Skill detail modal ignores Escape while its '+N' tag popover trigger has focus",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17957",
      "created_at": "2026-10-05T02:05:03Z",
      "updated_at": "2026-10-11T04:02:42Z",
      "state": "closed",
      "closed_at": "2026-10-11T04:02:42Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17967,
          "title": "fix: close skill tag popover before modal on Escape",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17967",
          "created_at": "2026-10-05T06:22:52Z",
          "updated_at": "2026-10-12T15:07:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:02:41Z",
          "closed_at": "2026-10-11T04:02:41Z",
          "head_sha": "78a77d4e6629f4e0dc933027cbae7eca48d9d09e",
          "scope": "Closes the skill tag popover before its containing modal on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e activation scoped to the `+N` trigger so they do not activate a containing skill card.\n- Add component-level regression coverage for the popover, card activation, and two-stage modal dismissal.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/skills/skill-card-pill-row.test.tsx __tests__/components/features/skills/skill-detail-modal.test.tsx` — 2 files, 10 tests passed.\n- `npm run lint` — passed (typecheck, eslint, and Prettier; existing warnings only).\n- `npm run build:app` — passed.\n- `npm run check-translation-complete"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17967"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18249,
          "title": "fix(skills): allow Escape to close +N pills popover and unblock modal dismissal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18249",
          "created_at": "2026-10-09T18:30:04Z",
          "updated_at": "2026-10-11T23:05:40Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:40Z",
          "head_sha": "e0c264261b7e66e3942fd91e024773a3549bb5e3",
          "scope": "Lets Escape close the skill tag popover and subsequently dismiss the containing modal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " dismissal inside modals.\n\n---\n\nAGENT:\n\n## Why\n\nIn Settings > Skills and any page rendering `SkillCardPillRow`, extra triggers or tool pills are collapsed into a `+N` overflow button that opens a floating popover (issue #17957).\nKeyboard interactions had two issues:\n1. The trigger button unconditionally intercepted all keydown events with `onKeyDown={stopCardActivation}` (`event.stopPropagation()`). Because the popover's escape listener was on `document`, pressing Escape while focus remained on the trigger button never reached the document listener, leaving the popover ",
              "s/skill-card-pill-row.test.tsx` verifying Escape closes the popover inside a modal without closing the modal, a second Escape closes the modal, and Escape closes the popover on a standalone card.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\nRun the skills test suites:\n```bash\nnpm test -- __tests__/components/features/skills/skill-card-pill-row.test.tsx\nnpm test -- __tests__/components/features/skills/\n```\n\nVerify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"skill-modal-pill-overflow-escape\" src=\"https://raw.github"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18249"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17967,
          "title": "fix: close skill tag popover before modal on Escape",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17967",
          "created_at": "2026-10-05T06:22:52Z",
          "updated_at": "2026-10-12T15:07:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:02:41Z",
          "closed_at": "2026-10-11T04:02:41Z",
          "head_sha": "78a77d4e6629f4e0dc933027cbae7eca48d9d09e",
          "scope": "Closes the skill tag popover before its containing modal on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e activation scoped to the `+N` trigger so they do not activate a containing skill card.\n- Add component-level regression coverage for the popover, card activation, and two-stage modal dismissal.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/skills/skill-card-pill-row.test.tsx __tests__/components/features/skills/skill-detail-modal.test.tsx` — 2 files, 10 tests passed.\n- `npm run lint` — passed (typecheck, eslint, and Prettier; existing warnings only).\n- `npm run build:app` — passed.\n- `npm run check-translation-complete"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17967"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18249,
          "title": "fix(skills): allow Escape to close +N pills popover and unblock modal dismissal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18249",
          "created_at": "2026-10-09T18:30:04Z",
          "updated_at": "2026-10-11T23:05:40Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:40Z",
          "head_sha": "e0c264261b7e66e3942fd91e024773a3549bb5e3",
          "scope": "Lets Escape close the skill tag popover and subsequently dismiss the containing modal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " dismissal inside modals.\n\n---\n\nAGENT:\n\n## Why\n\nIn Settings > Skills and any page rendering `SkillCardPillRow`, extra triggers or tool pills are collapsed into a `+N` overflow button that opens a floating popover (issue #17957).\nKeyboard interactions had two issues:\n1. The trigger button unconditionally intercepted all keydown events with `onKeyDown={stopCardActivation}` (`event.stopPropagation()`). Because the popover's escape listener was on `document`, pressing Escape while focus remained on the trigger button never reached the document listener, leaving the popover ",
              "s/skill-card-pill-row.test.tsx` verifying Escape closes the popover inside a modal without closing the modal, a second Escape closes the modal, and Escape closes the popover on a standalone card.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\nRun the skills test suites:\n```bash\nnpm test -- __tests__/components/features/skills/skill-card-pill-row.test.tsx\nnpm test -- __tests__/components/features/skills/\n```\n\nVerify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"skill-modal-pill-overflow-escape\" src=\"https://raw.github"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18249"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ature) but saves the new profile without them\n- OpenHands/OpenHands#17956: Plugins and Apps UI: \"Launch Launch Plugin\" title, \"skill\" wording on plugin controls, app switch usable while busy, docs point to /extensions\n- OpenHands/OpenHands#17957: Skill detail modal ignores Escape while its '+N' tag popover trigger has focus\n- OpenHands/OpenHands#17958: Custom MCP server editor reports a malformed header as an environment-variable error\n- OpenHands/OpenHands#17959: Automation templates: a search with no matches shows a blank page, and cards say \"1 MCPs to connect\" for optional integrations"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18281,
          "title": "docs(verify-openhands): map maintenance 2026-10-11",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18281",
          "created_at": "2026-10-11T07:23:06Z",
          "updated_at": "2026-10-12T15:07:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T20:48:57Z",
          "closed_at": "2026-10-11T20:48:57Z",
          "head_sha": "358b9029f977748770e4c865eef7d9ce67b3f7ab",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ws supply independent intent.\n\n98map references checked in owning repositories (52issues/46PRs);11Canvas issues closed since BASE. Retested closed [17958](https://github.com/OpenHands/OpenHands/issues/17958) and [17957](https://github.com/OpenHands/OpenHands/issues/17957) lose stale failure wording. Remaining closure checks and known defects retain their existing wording and are explicitly unfinished; no new defects/issues or regression attribution. Phone footer geometry proves accessible vertical scrolling, not horizontal clipping. Catalog/card single-toast fixes were not proven by the root custom-form flow: its "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18281"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "st ids)\n  - #17920 (F06 rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  -"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17967,
          "title": "fix: close skill tag popover before modal on Escape",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17967",
          "created_at": "2026-10-05T06:22:52Z",
          "updated_at": "2026-10-12T15:07:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:02:41Z",
          "closed_at": "2026-10-11T04:02:41Z",
          "head_sha": "78a77d4e6629f4e0dc933027cbae7eca48d9d09e",
          "scope": "Closes the skill tag popover before its containing modal on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e activation scoped to the `+N` trigger so they do not activate a containing skill card.\n- Add component-level regression coverage for the popover, card activation, and two-stage modal dismissal.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/skills/skill-card-pill-row.test.tsx __tests__/components/features/skills/skill-detail-modal.test.tsx` — 2 files, 10 tests passed.\n- `npm run lint` — passed (typecheck, eslint, and Prettier; existing warnings only).\n- `npm run build:app` — passed.\n- `npm run check-translation-complete"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17967"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17967,
          "title": "fix: close skill tag popover before modal on Escape",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17967",
          "created_at": "2026-10-05T06:22:52Z",
          "updated_at": "2026-10-12T15:07:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:02:41Z",
          "closed_at": "2026-10-11T04:02:41Z",
          "head_sha": "78a77d4e6629f4e0dc933027cbae7eca48d9d09e",
          "scope": "Closes the skill tag popover before its containing modal on Escape.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e activation scoped to the `+N` trigger so they do not activate a containing skill card.\n- Add component-level regression coverage for the popover, card activation, and two-stage modal dismissal.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/skills/skill-card-pill-row.test.tsx __tests__/components/features/skills/skill-detail-modal.test.tsx` — 2 files, 10 tests passed.\n- `npm run lint` — passed (typecheck, eslint, and Prettier; existing warnings only).\n- `npm run build:app` — passed.\n- `npm run check-translation-complete"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17967"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18249,
          "title": "fix(skills): allow Escape to close +N pills popover and unblock modal dismissal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18249",
          "created_at": "2026-10-09T18:30:04Z",
          "updated_at": "2026-10-11T23:05:40Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:40Z",
          "head_sha": "e0c264261b7e66e3942fd91e024773a3549bb5e3",
          "scope": "Lets Escape close the skill tag popover and subsequently dismiss the containing modal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " dismissal inside modals.\n\n---\n\nAGENT:\n\n## Why\n\nIn Settings > Skills and any page rendering `SkillCardPillRow`, extra triggers or tool pills are collapsed into a `+N` overflow button that opens a floating popover (issue #17957).\nKeyboard interactions had two issues:\n1. The trigger button unconditionally intercepted all keydown events with `onKeyDown={stopCardActivation}` (`event.stopPropagation()`). Because the popover's escape listener was on `document`, pressing Escape while focus remained on the trigger button never reached the document listener, leaving the popover ",
              "s/skill-card-pill-row.test.tsx` verifying Escape closes the popover inside a modal without closing the modal, a second Escape closes the modal, and Escape closes the popover on a standalone card.\n\n## Issue Number\n\nFixes #17957\n\n## How to Test\n\nRun the skills test suites:\n```bash\nnpm test -- __tests__/components/features/skills/skill-card-pill-row.test.tsx\nnpm test -- __tests__/components/features/skills/\n```\n\nVerify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"skill-modal-pill-overflow-escape\" src=\"https://raw.github"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18249"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #17967; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17958,
      "title": "[Bug]: Custom MCP server editor reports a malformed header as an environment-variable error",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17958",
      "created_at": "2026-10-05T02:05:17Z",
      "updated_at": "2026-10-11T04:07:54Z",
      "state": "closed",
      "closed_at": "2026-10-11T04:07:54Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17966,
          "title": "fix: show header-specific MCP validation errors",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17966",
          "created_at": "2026-10-05T04:19:01Z",
          "updated_at": "2026-10-12T15:07:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:07:52Z",
          "closed_at": "2026-10-11T04:07:52Z",
          "head_sha": "07b762b6e9b74efaaadb04ebc544e4e3cf31088f",
          "scope": "Uses header-specific MCP validation messages instead of environment-variable guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "its message key and use a dedicated header-format key for Header authentication.\n- Add the header-specific copy in all supported locales and a regression test covering the Header and STDIO paths.\n\n## Issue Number\n\nFixes #17958\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/settings/mcp-settings/mcp-server-form.validation.test.tsx` — 12 tests passed.\n- `npm run make-i18n` and `npm run check-translation-completeness` — passed.\n- `npm run build:app` — passed; launched the production build with `node bin/agent-canvas.mjs --port 18321` and reproduced malfor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17966"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17966,
          "title": "fix: show header-specific MCP validation errors",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17966",
          "created_at": "2026-10-05T04:19:01Z",
          "updated_at": "2026-10-12T15:07:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:07:52Z",
          "closed_at": "2026-10-11T04:07:52Z",
          "head_sha": "07b762b6e9b74efaaadb04ebc544e4e3cf31088f",
          "scope": "Uses header-specific MCP validation messages instead of environment-variable guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "its message key and use a dedicated header-format key for Header authentication.\n- Add the header-specific copy in all supported locales and a regression test covering the Header and STDIO paths.\n\n## Issue Number\n\nFixes #17958\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/settings/mcp-settings/mcp-server-form.validation.test.tsx` — 12 tests passed.\n- `npm run make-i18n` and `npm run check-translation-completeness` — passed.\n- `npm run build:app` — passed; launched the production build with `node bin/agent-canvas.mjs --port 18321` and reproduced malfor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17966"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ch Plugin\" title, \"skill\" wording on plugin controls, app switch usable while busy, docs point to /extensions\n- OpenHands/OpenHands#17957: Skill detail modal ignores Escape while its '+N' tag popover trigger has focus\n- OpenHands/OpenHands#17958: Custom MCP server editor reports a malformed header as an environment-variable error\n- OpenHands/OpenHands#17959: Automation templates: a search with no matches shows a blank page, and cards say \"1 MCPs to connect\" for optional integrations\n- OpenHands/OpenHands#17960: Automation setup offers an Agent profile for Prompt and Plugin actions, but ch"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18281,
          "title": "docs(verify-openhands): map maintenance 2026-10-11",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18281",
          "created_at": "2026-10-11T07:23:06Z",
          "updated_at": "2026-10-12T15:07:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T20:48:57Z",
          "closed_at": "2026-10-11T20:48:57Z",
          "head_sha": "358b9029f977748770e4c865eef7d9ce67b3f7ab",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "Linear tickets lack an available connector; PR descriptions/reviews supply independent intent.\n\n98map references checked in owning repositories (52issues/46PRs);11Canvas issues closed since BASE. Retested closed [17958](https://github.com/OpenHands/OpenHands/issues/17958) and [17957](https://github.com/OpenHands/OpenHands/issues/17957) lose stale failure wording. Remaining closure checks and known defects retain their existing wording and are explicitly unfinished; no new defects/issues or regression attribution. Phone footer geometry proves accessible vertical scrolling, not horizontal clipping. Catalog/card sing"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18281"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "rejected action resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17966,
          "title": "fix: show header-specific MCP validation errors",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17966",
          "created_at": "2026-10-05T04:19:01Z",
          "updated_at": "2026-10-12T15:07:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:07:52Z",
          "closed_at": "2026-10-11T04:07:52Z",
          "head_sha": "07b762b6e9b74efaaadb04ebc544e4e3cf31088f",
          "scope": "Uses header-specific MCP validation messages instead of environment-variable guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "its message key and use a dedicated header-format key for Header authentication.\n- Add the header-specific copy in all supported locales and a regression test covering the Header and STDIO paths.\n\n## Issue Number\n\nFixes #17958\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/settings/mcp-settings/mcp-server-form.validation.test.tsx` — 12 tests passed.\n- `npm run make-i18n` and `npm run check-translation-completeness` — passed.\n- `npm run build:app` — passed; launched the production build with `node bin/agent-canvas.mjs --port 18321` and reproduced malfor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17966"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17966,
          "title": "fix: show header-specific MCP validation errors",
          "author": "pei711",
          "author_url": "https://github.com/pei711",
          "url": "https://github.com/OpenHands/OpenHands/pull/17966",
          "created_at": "2026-10-05T04:19:01Z",
          "updated_at": "2026-10-12T15:07:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:07:52Z",
          "closed_at": "2026-10-11T04:07:52Z",
          "head_sha": "07b762b6e9b74efaaadb04ebc544e4e3cf31088f",
          "scope": "Uses header-specific MCP validation messages instead of environment-variable guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "its message key and use a dedicated header-format key for Header authentication.\n- Add the header-specific copy in all supported locales and a regression test covering the Header and STDIO paths.\n\n## Issue Number\n\nFixes #17958\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/settings/mcp-settings/mcp-server-form.validation.test.tsx` — 12 tests passed.\n- `npm run make-i18n` and `npm run check-translation-completeness` — passed.\n- `npm run build:app` — passed; launched the production build with `node bin/agent-canvas.mjs --port 18321` and reproduced malfor"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17966"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17966; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17959,
      "title": "[Bug]: Automation templates: a search with no matches shows a blank page, and cards say \"1 MCPs to connect\" for optional integrations",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17959",
      "created_at": "2026-10-05T02:05:18Z",
      "updated_at": "2026-10-12T05:05:33Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18153,
          "title": "fix(automations): render empty state on template search and exclude optional integrations from connect count",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18153",
          "created_at": "2026-10-08T12:27:56Z",
          "updated_at": "2026-10-13T17:23:37Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3441b93aa8ebf47da89b9d11716e1d9a670a8230",
          "scope": "Adds template search empty states, excludes optional integrations from required counts and pluralizes the pill.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` and `_other` plural localization forms for `RECOMMENDED_AUTOMATIONS$MISSING_CONNECT` across all 15 supported locales in `src/i18n/translation.json`, matching the i18next pluralization contract.\n\n## Issue Number\n\nFixes #17959\n\n## How to Test\n\nRun the unit and integration tests:\n```bash\nnpx vitest run __tests__/components/automations/recommended-automations.test.tsx __tests__/components/automations/build-automation-pills.test.tsx __tests__/routes/automations-dashboard.test.tsx __tests__/i18n/translation-completeness.test.ts\n```\n\nAll 87 tests pass.\n\n## Video/Screenshots\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18153"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18153,
          "title": "fix(automations): render empty state on template search and exclude optional integrations from connect count",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18153",
          "created_at": "2026-10-08T12:27:56Z",
          "updated_at": "2026-10-13T17:23:37Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3441b93aa8ebf47da89b9d11716e1d9a670a8230",
          "scope": "Adds template search empty states, excludes optional integrations from required counts and pluralizes the pill.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` and `_other` plural localization forms for `RECOMMENDED_AUTOMATIONS$MISSING_CONNECT` across all 15 supported locales in `src/i18n/translation.json`, matching the i18next pluralization contract.\n\n## Issue Number\n\nFixes #17959\n\n## How to Test\n\nRun the unit and integration tests:\n```bash\nnpx vitest run __tests__/components/automations/recommended-automations.test.tsx __tests__/components/automations/build-automation-pills.test.tsx __tests__/routes/automations-dashboard.test.tsx __tests__/i18n/translation-completeness.test.ts\n```\n\nAll 87 tests pass.\n\n## Video/Screenshots\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18153"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "enHands/OpenHands#17957: Skill detail modal ignores Escape while its '+N' tag popover trigger has focus\n- OpenHands/OpenHands#17958: Custom MCP server editor reports a malformed header as an environment-variable error\n- OpenHands/OpenHands#17959: Automation templates: a search with no matches shows a blank page, and cards say \"1 MCPs to connect\" for optional integrations\n- OpenHands/OpenHands#17960: Automation setup offers an Agent profile for Prompt and Plugin actions, but choosing one blocks creation with \"Extra inputs are not permitted\"\n- OpenHands/OpenHands#18060: Agent profile row me"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18264,
          "title": "docs(verify-openhands): map maintenance 2026-10-10",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18264",
          "created_at": "2026-10-10T07:53:03Z",
          "updated_at": "2026-10-12T15:07:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T23:58:55Z",
          "closed_at": "2026-10-10T23:58:55Z",
          "head_sha": "da4c2924d67fe68b1fa49ba59c379e6860a9c347",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "Current failures are #18263 (genuine desktop prompt and phone plugin draft Test stays Pending after backend COMPLETED; reload recovers), #17948's failed-prompt-as-script label on desktop/phone, and F22's credential-free #17959/#18061 findings. Ordinary final-automation Run now polling passes. The remaining model block requires a genuine legacy/custom-schema finish producer, including an actual failed run carrying a finish summary. Cloud/account, ACP, native/Docker/embedded and other unexercised boundaries remain explicit in the index and report.\n\n## Why\n\nThe setup map n",
              "identify verified setup paths, remaining prerequisites and current results, preserving stable IDs/counts and BASE.\n\n## Issue Number\n\nRefs #17568 (ready-for-dev), with independently reproduced #18263 and existing #17948, #17959 and #18061 linked from the map. Product fixes are tracked by their owning issues.\n\n## How to Test\n\nInstall locked dependencies with `npm ci --ignore-scripts` and put `.agents/skills/verify-openhands/scripts` on PATH. Run:\n\n```sh\ncontrol-openhands map check\ncontrol-openhands map coverage\ncontrol-openhands map testids\ncontrol-openhands map baseline\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18264"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18289,
          "title": "fix(mcp): filter marketplace catalog by installable connection options",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18289",
          "created_at": "2026-10-11T16:14:08Z",
          "updated_at": "2026-10-11T16:16:40Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5d35a0b16231f72907f844af4a9a3d32e8a0f964",
          "scope": "Filters locally installable MCP catalog entries and prerequisite queues.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".test.ts`: Added test cases confirming that entries lacking locally installable options (such as Sentry) return false for `isMcpInstallableEntry` and are excluded from `getMcpMarketplaceCatalog`.\n\n## Issue Number\n\nFixes #17959, Fixes #17922\n\n## How to Test\n\nRun the MCP marketplace utils test suite:\n```bash\nnpm test -- __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\nRun typecheck:\n```bash\nnpm run typecheck\n```\n\nRun linter:\n```bash\nnpx eslint src/utils/mcp-marketplace-utils.ts __tests__/utils/mcp-marketplace-utils.test.ts\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18289"
            ]
          },
          "direct_closer": false,
          "reason": "Although its body claims Fixes #17959, the described change implements neither template search empty state nor optional-count/pluralization; that issue explicitly excludes install/launch queue changes."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18153,
          "title": "fix(automations): render empty state on template search and exclude optional integrations from connect count",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18153",
          "created_at": "2026-10-08T12:27:56Z",
          "updated_at": "2026-10-13T17:23:37Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3441b93aa8ebf47da89b9d11716e1d9a670a8230",
          "scope": "Adds template search empty states, excludes optional integrations from required counts and pluralizes the pill.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` and `_other` plural localization forms for `RECOMMENDED_AUTOMATIONS$MISSING_CONNECT` across all 15 supported locales in `src/i18n/translation.json`, matching the i18next pluralization contract.\n\n## Issue Number\n\nFixes #17959\n\n## How to Test\n\nRun the unit and integration tests:\n```bash\nnpx vitest run __tests__/components/automations/recommended-automations.test.tsx __tests__/components/automations/build-automation-pills.test.tsx __tests__/routes/automations-dashboard.test.tsx __tests__/i18n/translation-completeness.test.ts\n```\n\nAll 87 tests pass.\n\n## Video/Screenshots\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18153"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17960,
      "title": "[Bug]: Automation setup offers an Agent profile for Prompt and Plugin actions, but choosing one blocks creation with \"Extra inputs are not permitted\"",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17960",
      "created_at": "2026-10-05T02:11:27Z",
      "updated_at": "2026-10-05T18:20:17Z",
      "state": "closed",
      "closed_at": "2026-10-05T18:20:17Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17971,
          "title": "fix(automations): hide agent profiles for preset actions",
          "author": "qingshungLI",
          "author_url": "https://github.com/qingshungLI",
          "url": "https://github.com/OpenHands/OpenHands/pull/17971",
          "created_at": "2026-10-05T07:48:42Z",
          "updated_at": "2026-10-06T00:58:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T18:20:15Z",
          "closed_at": "2026-10-05T18:20:15Z",
          "head_sha": "ee92f98474c54581508435c4eb0022d788434ad8",
          "scope": "Hides agent-profile choice for unsupported Prompt/Plugin preset actions and excludes it from their payloads.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r Upload/Bundle actions that create through `/v1`.\r\n- Keep `agent_profile_id` out of Prompt/Plugin payloads and clear it when switching actions.\r\n- Add payload and dialog regression coverage.\r\n\r\n## Issue Number\r\n\r\nFixes #17960\r\n\r\n## How to Test\r\n\r\n- `npm run make-i18n`\r\n- `npx vitest run src/manifests/automation-setup.test.ts __tests__/components/manifest/manifest-setup-dialog.test.tsx --reporter=dot` (21 passed)\r\n- `npm run typecheck`\r\n- `npm run lint` (passes; existing style warnings remain)\r\n- `npm run build` (passes)\r\n- `npm test` (8099 passed; 2 existing Docker pol"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17971"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17971,
          "title": "fix(automations): hide agent profiles for preset actions",
          "author": "qingshungLI",
          "author_url": "https://github.com/qingshungLI",
          "url": "https://github.com/OpenHands/OpenHands/pull/17971",
          "created_at": "2026-10-05T07:48:42Z",
          "updated_at": "2026-10-06T00:58:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T18:20:15Z",
          "closed_at": "2026-10-05T18:20:15Z",
          "head_sha": "ee92f98474c54581508435c4eb0022d788434ad8",
          "scope": "Hides agent-profile choice for unsupported Prompt/Plugin preset actions and excludes it from their payloads.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r Upload/Bundle actions that create through `/v1`.\r\n- Keep `agent_profile_id` out of Prompt/Plugin payloads and clear it when switching actions.\r\n- Add payload and dialog regression coverage.\r\n\r\n## Issue Number\r\n\r\nFixes #17960\r\n\r\n## How to Test\r\n\r\n- `npm run make-i18n`\r\n- `npx vitest run src/manifests/automation-setup.test.ts __tests__/components/manifest/manifest-setup-dialog.test.tsx --reporter=dot` (21 passed)\r\n- `npm run typecheck`\r\n- `npm run lint` (passes; existing style warnings remain)\r\n- `npm run build` (passes)\r\n- `npm test` (8099 passed; 2 existing Docker pol"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17971"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "r reports a malformed header as an environment-variable error\n- OpenHands/OpenHands#17959: Automation templates: a search with no matches shows a blank page, and cards say \"1 MCPs to connect\" for optional integrations\n- OpenHands/OpenHands#17960: Automation setup offers an Agent profile for Prompt and Plugin actions, but choosing one blocks creation with \"Extra inputs are not permitted\"\n- OpenHands/OpenHands#18060: Agent profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at the disabled \"Set as active\"\n- OpenHands/OpenHands#18061: Automation setup: "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17971,
          "title": "fix(automations): hide agent profiles for preset actions",
          "author": "qingshungLI",
          "author_url": "https://github.com/qingshungLI",
          "url": "https://github.com/OpenHands/OpenHands/pull/17971",
          "created_at": "2026-10-05T07:48:42Z",
          "updated_at": "2026-10-06T00:58:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T18:20:15Z",
          "closed_at": "2026-10-05T18:20:15Z",
          "head_sha": "ee92f98474c54581508435c4eb0022d788434ad8",
          "scope": "Hides agent-profile choice for unsupported Prompt/Plugin preset actions and excludes it from their payloads.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r Upload/Bundle actions that create through `/v1`.\r\n- Keep `agent_profile_id` out of Prompt/Plugin payloads and clear it when switching actions.\r\n- Add payload and dialog regression coverage.\r\n\r\n## Issue Number\r\n\r\nFixes #17960\r\n\r\n## How to Test\r\n\r\n- `npm run make-i18n`\r\n- `npx vitest run src/manifests/automation-setup.test.ts __tests__/components/manifest/manifest-setup-dialog.test.tsx --reporter=dot` (21 passed)\r\n- `npm run typecheck`\r\n- `npm run lint` (passes; existing style warnings remain)\r\n- `npm run build` (passes)\r\n- `npm test` (8099 passed; 2 existing Docker pol"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17971"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17971,
          "title": "fix(automations): hide agent profiles for preset actions",
          "author": "qingshungLI",
          "author_url": "https://github.com/qingshungLI",
          "url": "https://github.com/OpenHands/OpenHands/pull/17971",
          "created_at": "2026-10-05T07:48:42Z",
          "updated_at": "2026-10-06T00:58:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T18:20:15Z",
          "closed_at": "2026-10-05T18:20:15Z",
          "head_sha": "ee92f98474c54581508435c4eb0022d788434ad8",
          "scope": "Hides agent-profile choice for unsupported Prompt/Plugin preset actions and excludes it from their payloads.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "r Upload/Bundle actions that create through `/v1`.\r\n- Keep `agent_profile_id` out of Prompt/Plugin payloads and clear it when switching actions.\r\n- Add payload and dialog regression coverage.\r\n\r\n## Issue Number\r\n\r\nFixes #17960\r\n\r\n## How to Test\r\n\r\n- `npm run make-i18n`\r\n- `npx vitest run src/manifests/automation-setup.test.ts __tests__/components/manifest/manifest-setup-dialog.test.tsx --reporter=dot` (21 passed)\r\n- `npm run typecheck`\r\n- `npm run lint` (passes; existing style warnings remain)\r\n- `npm run build` (passes)\r\n- `npm test` (8099 passed; 2 existing Docker pol"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17971"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17971; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17986,
      "title": "Upgrade @shadcn/lint to 0.2.0 after supply-chain review",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17986",
      "created_at": "2026-10-05T12:27:02Z",
      "updated_at": "2026-10-05T13:11:20Z",
      "state": "closed",
      "closed_at": "2026-10-05T13:11:20Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17987,
          "title": "chore(deps): upgrade shadcn lint to 0.2.0",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17987",
          "created_at": "2026-10-05T12:29:54Z",
          "updated_at": "2026-10-06T00:58:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T13:11:18Z",
          "closed_at": "2026-10-05T13:11:19Z",
          "head_sha": "9f32863ec46d595b9e0ecaa82b0820ce0578842e",
          "scope": "Upgrades the requested lint package to 0.2.0 after dependency review.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "her than immutable action SHAs. `npm audit --json` reports no advisory for either changed package; 28 findings remain elsewhere in the unchanged dependency tree (3 low, 8 moderate, 17 high).\r\n\r\n## Issue Number\r\n\r\nCloses #17986\r\n\r\n## How to Test\r\n\r\nAfter the review above, ran on Node 22.23.2:\r\n\r\n| Command | Observed result |\r\n| --- | --- |\r\n| `npm run lint` | Passed: typecheck, ESLint (0 errors, 376 warnings), formatting |\r\n| `npx vitest run __tests__/package-library.test.ts __tests__/scripts/lint-staged-portability.test.ts` | 2 files / 8 tests passed |\r\n| `npm run build"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17987"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17987,
          "title": "chore(deps): upgrade shadcn lint to 0.2.0",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17987",
          "created_at": "2026-10-05T12:29:54Z",
          "updated_at": "2026-10-06T00:58:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T13:11:18Z",
          "closed_at": "2026-10-05T13:11:19Z",
          "head_sha": "9f32863ec46d595b9e0ecaa82b0820ce0578842e",
          "scope": "Upgrades the requested lint package to 0.2.0 after dependency review.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "her than immutable action SHAs. `npm audit --json` reports no advisory for either changed package; 28 findings remain elsewhere in the unchanged dependency tree (3 low, 8 moderate, 17 high).\r\n\r\n## Issue Number\r\n\r\nCloses #17986\r\n\r\n## How to Test\r\n\r\nAfter the review above, ran on Node 22.23.2:\r\n\r\n| Command | Observed result |\r\n| --- | --- |\r\n| `npm run lint` | Passed: typecheck, ESLint (0 errors, 376 warnings), formatting |\r\n| `npx vitest run __tests__/package-library.test.ts __tests__/scripts/lint-staged-portability.test.ts` | 2 files / 8 tests passed |\r\n| `npm run build"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17987"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17987,
          "title": "chore(deps): upgrade shadcn lint to 0.2.0",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17987",
          "created_at": "2026-10-05T12:29:54Z",
          "updated_at": "2026-10-06T00:58:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T13:11:18Z",
          "closed_at": "2026-10-05T13:11:19Z",
          "head_sha": "9f32863ec46d595b9e0ecaa82b0820ce0578842e",
          "scope": "Upgrades the requested lint package to 0.2.0 after dependency review.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "her than immutable action SHAs. `npm audit --json` reports no advisory for either changed package; 28 findings remain elsewhere in the unchanged dependency tree (3 low, 8 moderate, 17 high).\r\n\r\n## Issue Number\r\n\r\nCloses #17986\r\n\r\n## How to Test\r\n\r\nAfter the review above, ran on Node 22.23.2:\r\n\r\n| Command | Observed result |\r\n| --- | --- |\r\n| `npm run lint` | Passed: typecheck, ESLint (0 errors, 376 warnings), formatting |\r\n| `npx vitest run __tests__/package-library.test.ts __tests__/scripts/lint-staged-portability.test.ts` | 2 files / 8 tests passed |\r\n| `npm run build"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17987"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17987,
          "title": "chore(deps): upgrade shadcn lint to 0.2.0",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17987",
          "created_at": "2026-10-05T12:29:54Z",
          "updated_at": "2026-10-06T00:58:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T13:11:18Z",
          "closed_at": "2026-10-05T13:11:19Z",
          "head_sha": "9f32863ec46d595b9e0ecaa82b0820ce0578842e",
          "scope": "Upgrades the requested lint package to 0.2.0 after dependency review.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "her than immutable action SHAs. `npm audit --json` reports no advisory for either changed package; 28 findings remain elsewhere in the unchanged dependency tree (3 low, 8 moderate, 17 high).\r\n\r\n## Issue Number\r\n\r\nCloses #17986\r\n\r\n## How to Test\r\n\r\nAfter the review above, ran on Node 22.23.2:\r\n\r\n| Command | Observed result |\r\n| --- | --- |\r\n| `npm run lint` | Passed: typecheck, ESLint (0 errors, 376 warnings), formatting |\r\n| `npx vitest run __tests__/package-library.test.ts __tests__/scripts/lint-staged-portability.test.ts` | 2 files / 8 tests passed |\r\n| `npm run build"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17987"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17987; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17994,
      "title": "chore: remove unused socket.io-client and @mswjs/socket.io-binding dependencies",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17994",
      "created_at": "2026-10-05T15:31:52Z",
      "updated_at": "2026-10-05T15:45:28Z",
      "state": "closed",
      "closed_at": "2026-10-05T15:45:28Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17989,
          "title": "chore(deps): remove unused socket.io-client",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17989",
          "created_at": "2026-10-05T13:54:51Z",
          "updated_at": "2026-10-06T00:58:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T15:45:27Z",
          "closed_at": "2026-10-05T15:45:27Z",
          "head_sha": "e6211eb5a4f26bb17b01f86dbd99496792793c15",
          "scope": "Removes the unused socket.io dependencies and Vite pre-bundle entry.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " to resolve dependency: socket.io-client` on every start.\n- The production bundle is unaffected: nothing imported the package, so it was never bundled. Only the dev server's pre-bundling changes.\n\n## Issue Number\n\nFixes #17994 (this also supersedes Dependabot's #17979).\n\n## How to Test\n\nRun in this branch (Node 22.22 / npm 10.9 locally):\n\n```sh\nnpm ci\ngrep -rnE \"socket\\.io|engine\\.io\" --exclude-dir={node_modules,build,dist,.git} --exclude=package-lock.json -I .   # no matches\nnpm run lint        # exit 0 — 0 errors (warnings are in src/, untouched here), Prettier clean\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17989"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17989,
          "title": "chore(deps): remove unused socket.io-client",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17989",
          "created_at": "2026-10-05T13:54:51Z",
          "updated_at": "2026-10-06T00:58:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T15:45:27Z",
          "closed_at": "2026-10-05T15:45:27Z",
          "head_sha": "e6211eb5a4f26bb17b01f86dbd99496792793c15",
          "scope": "Removes the unused socket.io dependencies and Vite pre-bundle entry.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " to resolve dependency: socket.io-client` on every start.\n- The production bundle is unaffected: nothing imported the package, so it was never bundled. Only the dev server's pre-bundling changes.\n\n## Issue Number\n\nFixes #17994 (this also supersedes Dependabot's #17979).\n\n## How to Test\n\nRun in this branch (Node 22.22 / npm 10.9 locally):\n\n```sh\nnpm ci\ngrep -rnE \"socket\\.io|engine\\.io\" --exclude-dir={node_modules,build,dist,.git} --exclude=package-lock.json -I .   # no matches\nnpm run lint        # exit 0 — 0 errors (warnings are in src/, untouched here), Prettier clean\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17989"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17989,
          "title": "chore(deps): remove unused socket.io-client",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17989",
          "created_at": "2026-10-05T13:54:51Z",
          "updated_at": "2026-10-06T00:58:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T15:45:27Z",
          "closed_at": "2026-10-05T15:45:27Z",
          "head_sha": "e6211eb5a4f26bb17b01f86dbd99496792793c15",
          "scope": "Removes the unused socket.io dependencies and Vite pre-bundle entry.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " to resolve dependency: socket.io-client` on every start.\n- The production bundle is unaffected: nothing imported the package, so it was never bundled. Only the dev server's pre-bundling changes.\n\n## Issue Number\n\nFixes #17994 (this also supersedes Dependabot's #17979).\n\n## How to Test\n\nRun in this branch (Node 22.22 / npm 10.9 locally):\n\n```sh\nnpm ci\ngrep -rnE \"socket\\.io|engine\\.io\" --exclude-dir={node_modules,build,dist,.git} --exclude=package-lock.json -I .   # no matches\nnpm run lint        # exit 0 — 0 errors (warnings are in src/, untouched here), Prettier clean\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17989"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17989,
          "title": "chore(deps): remove unused socket.io-client",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17989",
          "created_at": "2026-10-05T13:54:51Z",
          "updated_at": "2026-10-06T00:58:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T15:45:27Z",
          "closed_at": "2026-10-05T15:45:27Z",
          "head_sha": "e6211eb5a4f26bb17b01f86dbd99496792793c15",
          "scope": "Removes the unused socket.io dependencies and Vite pre-bundle entry.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " to resolve dependency: socket.io-client` on every start.\n- The production bundle is unaffected: nothing imported the package, so it was never bundled. Only the dev server's pre-bundling changes.\n\n## Issue Number\n\nFixes #17994 (this also supersedes Dependabot's #17979).\n\n## How to Test\n\nRun in this branch (Node 22.22 / npm 10.9 locally):\n\n```sh\nnpm ci\ngrep -rnE \"socket\\.io|engine\\.io\" --exclude-dir={node_modules,build,dist,.git} --exclude=package-lock.json -I .   # no matches\nnpm run lint        # exit 0 — 0 errors (warnings are in src/, untouched here), Prettier clean\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17989"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17989; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 17996,
      "title": "[Feature]: Retire Node 22 from desktop runtime and tooling",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/17996",
      "created_at": "2026-10-05T15:44:35Z",
      "updated_at": "2026-10-05T21:34:47Z",
      "state": "closed",
      "closed_at": "2026-10-05T21:34:47Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17997,
          "title": "chore: replace remaining Node 22 runtime pins",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17997",
          "created_at": "2026-10-05T16:02:23Z",
          "updated_at": "2026-10-06T00:58:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:34:46Z",
          "closed_at": "2026-10-05T21:34:46Z",
          "head_sha": "a1a7d285d96796248ea611177f414571ad70f97c",
          "scope": "Replaces the remaining Node 22 desktop runtime and tooling pins.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ale Electron 42/Node 22 ABI rationale; the currently pinned Electron 43.3.0 already embeds Node 24.18.1, confirmed from its [release metadata](https://releases.electronjs.org/releases.json).\r\n\r\n## Issue Number\r\n\r\nCloses #17996.\r\n\r\n## How to Test\r\n\r\n```sh\r\nnode scripts/download-node.mjs\r\nresources/node/bin/node --version\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm ci\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run lint\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run build\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm test -- --run   __tests__/scripts/download-node.test.ts   __test"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17997"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17997,
          "title": "chore: replace remaining Node 22 runtime pins",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17997",
          "created_at": "2026-10-05T16:02:23Z",
          "updated_at": "2026-10-06T00:58:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:34:46Z",
          "closed_at": "2026-10-05T21:34:46Z",
          "head_sha": "a1a7d285d96796248ea611177f414571ad70f97c",
          "scope": "Replaces the remaining Node 22 desktop runtime and tooling pins.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ale Electron 42/Node 22 ABI rationale; the currently pinned Electron 43.3.0 already embeds Node 24.18.1, confirmed from its [release metadata](https://releases.electronjs.org/releases.json).\r\n\r\n## Issue Number\r\n\r\nCloses #17996.\r\n\r\n## How to Test\r\n\r\n```sh\r\nnode scripts/download-node.mjs\r\nresources/node/bin/node --version\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm ci\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run lint\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run build\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm test -- --run   __tests__/scripts/download-node.test.ts   __test"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17997"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17997,
          "title": "chore: replace remaining Node 22 runtime pins",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17997",
          "created_at": "2026-10-05T16:02:23Z",
          "updated_at": "2026-10-06T00:58:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:34:46Z",
          "closed_at": "2026-10-05T21:34:46Z",
          "head_sha": "a1a7d285d96796248ea611177f414571ad70f97c",
          "scope": "Replaces the remaining Node 22 desktop runtime and tooling pins.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ale Electron 42/Node 22 ABI rationale; the currently pinned Electron 43.3.0 already embeds Node 24.18.1, confirmed from its [release metadata](https://releases.electronjs.org/releases.json).\r\n\r\n## Issue Number\r\n\r\nCloses #17996.\r\n\r\n## How to Test\r\n\r\n```sh\r\nnode scripts/download-node.mjs\r\nresources/node/bin/node --version\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm ci\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run lint\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run build\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm test -- --run   __tests__/scripts/download-node.test.ts   __test"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17997"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17997,
          "title": "chore: replace remaining Node 22 runtime pins",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17997",
          "created_at": "2026-10-05T16:02:23Z",
          "updated_at": "2026-10-06T00:58:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:34:46Z",
          "closed_at": "2026-10-05T21:34:46Z",
          "head_sha": "a1a7d285d96796248ea611177f414571ad70f97c",
          "scope": "Replaces the remaining Node 22 desktop runtime and tooling pins.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ale Electron 42/Node 22 ABI rationale; the currently pinned Electron 43.3.0 already embeds Node 24.18.1, confirmed from its [release metadata](https://releases.electronjs.org/releases.json).\r\n\r\n## Issue Number\r\n\r\nCloses #17996.\r\n\r\n## How to Test\r\n\r\n```sh\r\nnode scripts/download-node.mjs\r\nresources/node/bin/node --version\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm ci\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run lint\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm run build\r\nPATH=\"$PWD/resources/node/bin:$PATH\" npm test -- --run   __tests__/scripts/download-node.test.ts   __test"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17997"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #17997; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18004,
      "title": "Migrate remaining raw palette colors before enforcing no-raw-colors",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18004",
      "created_at": "2026-10-05T19:56:46Z",
      "updated_at": "2026-10-13T09:40:50Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18199,
          "title": "fix: use theme colors for form validation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18199",
          "created_at": "2026-10-08T23:33:02Z",
          "updated_at": "2026-10-12T15:08:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T07:29:47Z",
          "closed_at": "2026-10-09T07:29:47Z",
          "head_sha": "091d6e62ded74c586a2157adf7cf82617a655e23",
          "scope": "Migrates form-validation colors as an explicitly partial first slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nd state handling stay unchanged. The duplicate-secret test now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismi",
              " now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismissed using `onboard --skip`.\n\nIn each of the five themes, s",
              ".io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-validation-2026-10-09/solarized-profile-after.png)). Choosing a darker shared danger token or a separate error-text token remains a design follow-up in #18004. No palette values are changed.\n\nThe phone pass found an existing layout bug: Edit backend keeps a 520px width at a 390px viewport, clipping controls. Tracked separately at https://github.com/OpenHands/OpenHands/issues/18195. This change does not alter dialog layout.\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18199"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Migrates MCP feedback text to readable semantic tokens as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "catalog-install form. Validation, requests, saving, wording and layout remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.5",
              "hanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone **390×844**. T"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Migrates MCP save-as-secret selection colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ecret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests passed** on Node **24.19.0**, covering the native chec"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Migrates backend connection-feedback colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "gs 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed** across 12 existi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Migrates backend focus colors and repairs the legacy scrim opacity utility as one slice of the broader migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "et-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests passed**, across 13 ba"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Migrates validation and service-error colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ice-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport cont",
              "g host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solarized Light; all fi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Migrates the raw yellow/amber warning-color slice through explicitly tracked child issue #18331; the broader migration remains incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "semantic_tracker_subissue_implementation"
            ],
            "reference_contexts": [
              "Issue #18331 explicitly continues the raw-palette migration tracker #18004; PR #18333 fixes #18331 by replacing six raw palette findings. This is a bounded partial implementation of #18004, whose broad migration remains open.",
              "no horizontal overflow.\n- No LLM call, Cloud account, or external credential is required.\n\nThis is an independent continuation of #18004. The warning text role does not depend on the open error, focus, or form-feedback PRs.\n\n<!-- openhands-ai-triage:start -->\n---\n## OpenHands AI triage\n**The following comments and acceptance criteria were added by "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333",
              "https://github.com/OpenHands/OpenHands/issues/18004",
              "https://github.com/OpenHands/OpenHands/issues/18331"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18346,
          "title": "fix(lint): use semantic colors for Git Sync feedback",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18346",
          "created_at": "2026-10-12T17:54:52Z",
          "updated_at": "2026-10-13T04:10:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:09:37Z",
          "closed_at": "2026-10-13T04:09:37Z",
          "head_sha": "a3096ca2eaecbeedf49b69f008a18acddc9745d8",
          "scope": "Migrates the Git Sync feedback-color slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "face, border, and feedback text tokens for failed checks and the persistent error banner.\r\n- Remove low-opacity overrides from supporting error text so it keeps the readable feedback color.\r\n\r\n## Issue Number\r\nContinues #18004. This is the Git Sync color batch; text-medium remains separately scoped.\r\n\r\n## How to Test\r\n- The focused Git Sync test command covering git-sync-activity-row, git-sync-config-form, git-sync-overview-section, and automation-git-sync routes passed: 56 tests across 4 files.\r\n- npm run lint passed with 0 errors and 740 existing warnings.\r\n- npm run "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18346"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18199,
          "title": "fix: use theme colors for form validation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18199",
          "created_at": "2026-10-08T23:33:02Z",
          "updated_at": "2026-10-12T15:08:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T07:29:47Z",
          "closed_at": "2026-10-09T07:29:47Z",
          "head_sha": "091d6e62ded74c586a2157adf7cf82617a655e23",
          "scope": "Migrates form-validation colors as an explicitly partial first slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nd state handling stay unchanged. The duplicate-secret test now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismi",
              " now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismissed using `onboard --skip`.\n\nIn each of the five themes, s",
              ".io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-validation-2026-10-09/solarized-profile-after.png)). Choosing a darker shared danger token or a separate error-text token remains a design follow-up in #18004. No palette values are changed.\n\nThe phone pass found an existing layout bug: Edit backend keeps a 520px width at a 390px viewport, clipping controls. Tracked separately at https://github.com/OpenHands/OpenHands/issues/18195. This change does not alter dialog layout.\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18199"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Migrates MCP feedback text to readable semantic tokens as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "catalog-install form. Validation, requests, saving, wording and layout remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.5",
              "hanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone **390×844**. T"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Migrates MCP save-as-secret selection colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ecret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests passed** on Node **24.19.0**, covering the native chec"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Migrates backend connection-feedback colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "gs 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed** across 12 existi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Migrates backend focus colors and repairs the legacy scrim opacity utility as one slice of the broader migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "et-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests passed**, across 13 ba"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Migrates validation and service-error colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ice-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport cont",
              "g host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solarized Light; all fi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Migrates the raw yellow/amber warning-color slice through explicitly tracked child issue #18331; the broader migration remains incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "semantic_tracker_subissue_implementation"
            ],
            "reference_contexts": [
              "Issue #18331 explicitly continues the raw-palette migration tracker #18004; PR #18333 fixes #18331 by replacing six raw palette findings. This is a bounded partial implementation of #18004, whose broad migration remains open.",
              "no horizontal overflow.\n- No LLM call, Cloud account, or external credential is required.\n\nThis is an independent continuation of #18004. The warning text role does not depend on the open error, focus, or form-feedback PRs.\n\n<!-- openhands-ai-triage:start -->\n---\n## OpenHands AI triage\n**The following comments and acceptance criteria were added by "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333",
              "https://github.com/OpenHands/OpenHands/issues/18004",
              "https://github.com/OpenHands/OpenHands/issues/18331"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18346,
          "title": "fix(lint): use semantic colors for Git Sync feedback",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18346",
          "created_at": "2026-10-12T17:54:52Z",
          "updated_at": "2026-10-13T04:10:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:09:37Z",
          "closed_at": "2026-10-13T04:09:37Z",
          "head_sha": "a3096ca2eaecbeedf49b69f008a18acddc9745d8",
          "scope": "Migrates the Git Sync feedback-color slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "face, border, and feedback text tokens for failed checks and the persistent error banner.\r\n- Remove low-opacity overrides from supporting error text so it keeps the readable feedback color.\r\n\r\n## Issue Number\r\nContinues #18004. This is the Git Sync color batch; text-medium remains separately scoped.\r\n\r\n## How to Test\r\n- The focused Git Sync test command covering git-sync-activity-row, git-sync-config-form, git-sync-overview-section, and automation-git-sync routes passed: 56 tests across 4 files.\r\n- npm run lint passed with 0 errors and 740 existing warnings.\r\n- npm run "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18346"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18006,
          "title": "chore(lint): stage raw color warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18006",
          "created_at": "2026-10-05T19:57:53Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "closed_at": "2026-10-06T04:53:32Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Enables warning-only raw-color lint with verified exceptions.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "probes against the shipped ESLint config and update the rollout roadmap. No component, stylesheet, dependency, or rendered-color changes.\r\n\r\n## Issue Number\r\n\r\nCloses #18005. Remaining migration is tracked separately in #18004, including the full per-file inventory.\r\n\r\n## How to Test\r\n\r\nOn Node 22.23.2, after synchronizing dependencies to the current-main lockfile with lifecycle scripts disabled:\r\n\r\n| Command | Result |\r\n| --- | --- |\r\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/static-classes-lint.test.ts` | 2 files / 4 tests passed |\r",
              "`text-modal-muted` | `tailwind.config.js`: `color: #a3a3a3` |\r\n\r\nThe legacy named tokens are valid existing declarations, not a claim that they already adapt to every theme. Their eventual theme migration is included in #18004. The remaining `bg-opacity-50` finding is deliberately not exempted; it needs investigation as a legacy utility.\r\n\r\n## Video/Screenshots\r\n\r\nNo rendered UI changes. Evidence is the actual lint/test/build output and compiled CSS inspection above; visual before/after checks belong to the migration PRs.\r\n<img width=\"2288\" height=\"1198\" alt=\"image\" src"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18006"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves the actual raw-palette migration to #18004; rendered colors remain untouched."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18194,
          "title": "chore(lint): protect divider and toggle appearance contracts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18194",
          "created_at": "2026-10-08T22:44:10Z",
          "updated_at": "2026-10-12T15:08:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "closed_at": "2026-10-10T10:19:34Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Protects divider/toggle appearance through no-restyle lint contracts.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "not claim blanket coverage for all imports or components.\r\n\r\nUpstream behavior: [no-restyle documentation](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-restyle.md). Color-token migration remains separate in #18004.\r\n\r\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18194"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves color-token migration separate under #18004."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18315,
          "title": "chore(lint): update shadcn lint to 0.2.1",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18315",
          "created_at": "2026-10-12T04:58:19Z",
          "updated_at": "2026-10-12T15:06:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T05:46:33Z",
          "closed_at": "2026-10-12T05:46:33Z",
          "head_sha": "9d1d0edbfa810d099f7c5adc08e6463996aed278",
          "scope": "Upgrades the lint package and adds paint-none regression coverage.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "-none` as undeclared colors. Upstream 0.2.1 accepts these paint-clearing classes and fixes theme/font-size and class/variant analysis. Take the patch independently of further rule adoption and the raw-color migration in #18004.\n\n## Summary\n\n- Exact-pin the development dependency at 0.2.1 through npm. The only resolved version changes are `@shadcn/lint` 0.2.0 → 0.2.1 and `cn` 0.3.2 → 0.4.0.\n- Add one real-ESLint regression for SVG paint-clearing classes; existing tests continue to verify raw palette/unknown-color warnings and the other adopted contracts.\n- Refresh rollou"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18315"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly takes the dependency patch independently of the raw-color migration."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18320,
          "title": "chore(lint): remove redundant text-medium color exception",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18320",
          "created_at": "2026-10-12T06:27:23Z",
          "updated_at": "2026-10-13T04:11:46Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:11:11Z",
          "closed_at": "2026-10-13T04:11:11Z",
          "head_sha": "cd42717bb93ee360d40b182c1418847529964dc7",
          "scope": "Removes a redundant text-medium lint exception.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` allow list and update its comment. Keep the seven legacy color exceptions and all rule severities unchanged. Application classes and rendered font sizes are unchanged. This PR is independent of the color migrations in #18004.\n\n## Issue Number\n\nCloses #18318\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689968148) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689967955).\n\n- Six existing lint/b"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18320"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states this cleanup is independent of raw-palette color migration."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "inked instead of filed: the MCP add and delete requests sent three times go on #17932 (same `withRetry` cause). The ACP auth banners at 1.10:1 and 1.26:1 in Light+ go on #18004. Clearing the time and saving midnight is a new path for #17948; open PR #18260 changes only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom si"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 7,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Migrates backend focus colors and repairs the legacy scrim opacity utility as one slice of the broader migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "et-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests passed**, across 13 ba"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18199,
          "title": "fix: use theme colors for form validation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18199",
          "created_at": "2026-10-08T23:33:02Z",
          "updated_at": "2026-10-12T15:08:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T07:29:47Z",
          "closed_at": "2026-10-09T07:29:47Z",
          "head_sha": "091d6e62ded74c586a2157adf7cf82617a655e23",
          "scope": "Migrates form-validation colors as an explicitly partial first slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nd state handling stay unchanged. The duplicate-secret test now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismi",
              " now checks visible rejection and blocked creation instead of a palette class.\n\nFive raw-color warnings are removed (148 to 143). This is a small first slice of #18004; the rule remains a warning.\n\n## Issue Number\n\nRefs #18004 (partial migration; the tracking issue stays open).\n\n## How to Test\n\n`verify-openhands` launched isolated real local stacks at base `3500d9e5c7` and head `091d6e62de`: Agent Canvas 1.26.0, Agent Server 1.53.0, Chrome, no LLM needed. `doctor` passed on both and consent/onboarding were dismissed using `onboard --skip`.\n\nIn each of the five themes, s",
              ".io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-validation-2026-10-09/solarized-profile-after.png)). Choosing a darker shared danger token or a separate error-text token remains a design follow-up in #18004. No palette values are changed.\n\nThe phone pass found an existing layout bug: Edit backend keeps a 520px width at a 390px viewport, clipping controls. Tracked separately at https://github.com/OpenHands/OpenHands/issues/18195. This change does not alter dialog layout.\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18199"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Migrates MCP feedback text to readable semantic tokens as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "catalog-install form. Validation, requests, saving, wording and layout remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.5",
              "hanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone **390×844**. T"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Migrates MCP save-as-secret selection colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ecret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests passed** on Node **24.19.0**, covering the native chec"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Migrates backend connection-feedback colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "gs 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed** across 12 existi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Migrates validation and service-error colors as one slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ice-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport cont",
              "g host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solarized Light; all fi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Migrates the raw yellow/amber warning-color slice through explicitly tracked child issue #18331; the broader migration remains incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "semantic_tracker_subissue_implementation"
            ],
            "reference_contexts": [
              "Issue #18331 explicitly continues the raw-palette migration tracker #18004; PR #18333 fixes #18331 by replacing six raw palette findings. This is a bounded partial implementation of #18004, whose broad migration remains open.",
              "no horizontal overflow.\n- No LLM call, Cloud account, or external credential is required.\n\nThis is an independent continuation of #18004. The warning text role does not depend on the open error, focus, or form-feedback PRs.\n\n<!-- openhands-ai-triage:start -->\n---\n## OpenHands AI triage\n**The following comments and acceptance criteria were added by "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333",
              "https://github.com/OpenHands/OpenHands/issues/18004",
              "https://github.com/OpenHands/OpenHands/issues/18331"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18346,
          "title": "fix(lint): use semantic colors for Git Sync feedback",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18346",
          "created_at": "2026-10-12T17:54:52Z",
          "updated_at": "2026-10-13T04:10:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:09:37Z",
          "closed_at": "2026-10-13T04:09:37Z",
          "head_sha": "a3096ca2eaecbeedf49b69f008a18acddc9745d8",
          "scope": "Migrates the Git Sync feedback-color slice of the broader raw-palette migration.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "face, border, and feedback text tokens for failed checks and the persistent error banner.\r\n- Remove low-opacity overrides from supporting error text so it keeps the readable feedback color.\r\n\r\n## Issue Number\r\nContinues #18004. This is the Git Sync color batch; text-medium remains separately scoped.\r\n\r\n## How to Test\r\n- The focused Git Sync test command covering git-sync-activity-row, git-sync-config-form, git-sync-overview-section, and automation-git-sync routes passed: 56 tests across 4 files.\r\n- npm run lint passed with 0 errors and 740 existing warnings.\r\n- npm run "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18346"
            ]
          },
          "direct_closer": false
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18005,
      "title": "Enable no-raw-colors warnings with verified token exceptions",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18005",
      "created_at": "2026-10-05T19:56:47Z",
      "updated_at": "2026-10-06T04:53:33Z",
      "state": "closed",
      "closed_at": "2026-10-06T04:53:33Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18006,
          "title": "chore(lint): stage raw color warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18006",
          "created_at": "2026-10-05T19:57:53Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "closed_at": "2026-10-06T04:53:32Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Stages no-raw-colors warnings with the requested exact verified token exceptions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "or namespace wildcard is exempted.\r\n- Add regression probes against the shipped ESLint config and update the rollout roadmap. No component, stylesheet, dependency, or rendered-color changes.\r\n\r\n## Issue Number\r\n\r\nCloses #18005. Remaining migration is tracked separately in #18004, including the full per-file inventory.\r\n\r\n## How to Test\r\n\r\nOn Node 22.23.2, after synchronizing dependencies to the current-main lockfile with lifecycle scripts disabled:\r\n\r\n| Command | Result |\r\n| --- | --- |\r\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18006"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18006,
          "title": "chore(lint): stage raw color warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18006",
          "created_at": "2026-10-05T19:57:53Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "closed_at": "2026-10-06T04:53:32Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Stages no-raw-colors warnings with the requested exact verified token exceptions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "or namespace wildcard is exempted.\r\n- Add regression probes against the shipped ESLint config and update the rollout roadmap. No component, stylesheet, dependency, or rendered-color changes.\r\n\r\n## Issue Number\r\n\r\nCloses #18005. Remaining migration is tracked separately in #18004, including the full per-file inventory.\r\n\r\n## How to Test\r\n\r\nOn Node 22.23.2, after synchronizing dependencies to the current-main lockfile with lifecycle scripts disabled:\r\n\r\n| Command | Result |\r\n| --- | --- |\r\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18006"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18006,
          "title": "chore(lint): stage raw color warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18006",
          "created_at": "2026-10-05T19:57:53Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "closed_at": "2026-10-06T04:53:32Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Stages no-raw-colors warnings with the requested exact verified token exceptions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "or namespace wildcard is exempted.\r\n- Add regression probes against the shipped ESLint config and update the rollout roadmap. No component, stylesheet, dependency, or rendered-color changes.\r\n\r\n## Issue Number\r\n\r\nCloses #18005. Remaining migration is tracked separately in #18004, including the full per-file inventory.\r\n\r\n## How to Test\r\n\r\nOn Node 22.23.2, after synchronizing dependencies to the current-main lockfile with lifecycle scripts disabled:\r\n\r\n| Command | Result |\r\n| --- | --- |\r\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18006"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18006,
          "title": "chore(lint): stage raw color warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18006",
          "created_at": "2026-10-05T19:57:53Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "closed_at": "2026-10-06T04:53:32Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Stages no-raw-colors warnings with the requested exact verified token exceptions.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "or namespace wildcard is exempted.\r\n- Add regression probes against the shipped ESLint config and update the rollout roadmap. No component, stylesheet, dependency, or rendered-color changes.\r\n\r\n## Issue Number\r\n\r\nCloses #18005. Remaining migration is tracked separately in #18004, including the full per-file inventory.\r\n\r\n## How to Test\r\n\r\nOn Node 22.23.2, after synchronizing dependencies to the current-main lockfile with lifecycle scripts disabled:\r\n\r\n| Command | Result |\r\n| --- | --- |\r\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18006"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18006; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18050,
      "title": "[Bug]: Generic error toasts still show raw \"HTTP request failed (<status>): {json}\" text (settings save, MCP delete, shared links)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18050",
      "created_at": "2026-10-06T04:30:52Z",
      "updated_at": "2026-10-06T21:53:30Z",
      "state": "closed",
      "closed_at": "2026-10-06T21:53:30Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18051,
          "title": "fix(errors): show the server's message instead of raw HttpError text in generic error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18051",
          "created_at": "2026-10-06T04:34:51Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "closed_at": "2026-10-06T21:53:28Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Changes the generic error helper so SDK failures display the server message rather than raw HTTP transport text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "- Three cases in `__tests__/query-client-config.behavior.test.ts`: the global query and mutation toasts show an `HttpError`'s `detail`, and a 502 with a plain-text body shows `ERROR$GENERIC`.\r\n\r\n## Issue Number\r\n\r\nFixes #18050\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/retrieve-axios-error-message.test.ts \\\r\n  __tests__/query-client-config.behavior.test.ts \\\r\n  __tests__/query-client-config.test.ts \\\r\n  __tests__/utils/api-error-message.test.ts\r\nnpm run lint\r\n```\r\n\r\n- On this branch, the four files above pa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18051"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18051,
          "title": "fix(errors): show the server's message instead of raw HttpError text in generic error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18051",
          "created_at": "2026-10-06T04:34:51Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "closed_at": "2026-10-06T21:53:28Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Changes the generic error helper so SDK failures display the server message rather than raw HTTP transport text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "- Three cases in `__tests__/query-client-config.behavior.test.ts`: the global query and mutation toasts show an `HttpError`'s `detail`, and a 502 with a plain-text body shows `ERROR$GENERIC`.\r\n\r\n## Issue Number\r\n\r\nFixes #18050\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/retrieve-axios-error-message.test.ts \\\r\n  __tests__/query-client-config.behavior.test.ts \\\r\n  __tests__/query-client-config.test.ts \\\r\n  __tests__/utils/api-error-message.test.ts\r\nnpm run lint\r\n```\r\n\r\n- On this branch, the four files above pa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18051"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18051,
          "title": "fix(errors): show the server's message instead of raw HttpError text in generic error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18051",
          "created_at": "2026-10-06T04:34:51Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "closed_at": "2026-10-06T21:53:28Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Changes the generic error helper so SDK failures display the server message rather than raw HTTP transport text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "- Three cases in `__tests__/query-client-config.behavior.test.ts`: the global query and mutation toasts show an `HttpError`'s `detail`, and a 502 with a plain-text body shows `ERROR$GENERIC`.\r\n\r\n## Issue Number\r\n\r\nFixes #18050\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/retrieve-axios-error-message.test.ts \\\r\n  __tests__/query-client-config.behavior.test.ts \\\r\n  __tests__/query-client-config.test.ts \\\r\n  __tests__/utils/api-error-message.test.ts\r\nnpm run lint\r\n```\r\n\r\n- On this branch, the four files above pa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18051"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18051,
          "title": "fix(errors): show the server's message instead of raw HttpError text in generic error toasts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18051",
          "created_at": "2026-10-06T04:34:51Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "closed_at": "2026-10-06T21:53:28Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Changes the generic error helper so SDK failures display the server message rather than raw HTTP transport text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "- Three cases in `__tests__/query-client-config.behavior.test.ts`: the global query and mutation toasts show an `HttpError`'s `detail`, and a 502 with a plain-text body shows `ERROR$GENERIC`.\r\n\r\n## Issue Number\r\n\r\nFixes #18050\r\n\r\n## How to Test\r\n\r\nUnit tests and lint, in the frontend root:\r\n\r\n```bash\r\nnpx vitest run __tests__/utils/retrieve-axios-error-message.test.ts \\\r\n  __tests__/query-client-config.behavior.test.ts \\\r\n  __tests__/query-client-config.test.ts \\\r\n  __tests__/utils/api-error-message.test.ts\r\nnpm run lint\r\n```\r\n\r\n- On this branch, the four files above pa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18051"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18051; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18060,
      "title": "[Bug]: Agent profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at the disabled \"Set as active\"",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18060",
      "created_at": "2026-10-06T06:51:09Z",
      "updated_at": "2026-10-11T03:44:10Z",
      "state": "closed",
      "closed_at": "2026-10-11T03:44:10Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18112,
          "title": "fix(a11y): make the agent profile row menu keyboard-operable",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18112",
          "created_at": "2026-10-07T05:45:13Z",
          "updated_at": "2026-10-12T15:07:49Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:44:09Z",
          "closed_at": "2026-10-11T03:44:09Z",
          "head_sha": "f5ddec1cd40ea58a12c51b94d1bad8beb9d27d41",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e row menu could not be operated from the keyboard: focus never landed inside the portaled menu, arrow keys appeared stuck on the disabled \"Set as active\" item, and Escape/Tab dropped focus to the top of the page (issue #18060). The same defects had been fixed for the LLM profile menu in #18019.\n\n## Summary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings →",
              "mmary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings → Agent profiles, then Tab to a row's `⋮` button and press Enter.\n2. Arrow Up/Down: focus cycles the enabled items, skipping \"Set as active\" when it is disabled, and wraps.\n3. Escape and Tab: focus returns to the `⋮` trigger. Enter runs the focused action.\n4. Automated: `npx vitest run __tests__/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18112"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18248,
          "title": "fix(settings): restore keyboard accessibility for agent profile actions menu",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18248",
          "created_at": "2026-10-09T17:48:02Z",
          "updated_at": "2026-10-11T23:05:48Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:48Z",
          "head_sha": "7e1229101cd9ebcd3b1495c62a36e6a8891338e4",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "b allows full keyboard operability without losing focus position.\n\n---\n\nAGENT:\n\n## Why\n\nOn Settings > Agent (`/settings/agents`), the actions menu (`⋮`) on each agent profile row had keyboard accessibility issues (issue #18060):\n1. When anchored against a trigger button, the menu renders through a portal only after `portalStyle` is calculated in `useLayoutEffect`. The initial focus effect previously ran with empty dependencies on mount before the portaled items existed, leaving focus on the trigger.\n2. In `handleKeyDown`, arrow navigation computed the next index across ",
              "t.tsx` (14 tests) covering render, click callbacks, disabled state, focus on open (mouse and Enter), arrow navigation with disabled skipping and wrapping, Escape dismissal, and Tab focus handoff.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\nRun the agent profiles test suites:\n```bash\nnpm test -- __tests__/components/settings/agent-profiles/\n```\n\nAll 5 test files and 49 tests pass cleanly:\n```text\n Test Files  5 passed (5)\n      Tests  49 passed (49)\n```\n\nAnd verify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18248"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18112,
          "title": "fix(a11y): make the agent profile row menu keyboard-operable",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18112",
          "created_at": "2026-10-07T05:45:13Z",
          "updated_at": "2026-10-12T15:07:49Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:44:09Z",
          "closed_at": "2026-10-11T03:44:09Z",
          "head_sha": "f5ddec1cd40ea58a12c51b94d1bad8beb9d27d41",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e row menu could not be operated from the keyboard: focus never landed inside the portaled menu, arrow keys appeared stuck on the disabled \"Set as active\" item, and Escape/Tab dropped focus to the top of the page (issue #18060). The same defects had been fixed for the LLM profile menu in #18019.\n\n## Summary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings →",
              "mmary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings → Agent profiles, then Tab to a row's `⋮` button and press Enter.\n2. Arrow Up/Down: focus cycles the enabled items, skipping \"Set as active\" when it is disabled, and wraps.\n3. Escape and Tab: focus returns to the `⋮` trigger. Enter runs the focused action.\n4. Automated: `npx vitest run __tests__/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18112"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18248,
          "title": "fix(settings): restore keyboard accessibility for agent profile actions menu",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18248",
          "created_at": "2026-10-09T17:48:02Z",
          "updated_at": "2026-10-11T23:05:48Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:48Z",
          "head_sha": "7e1229101cd9ebcd3b1495c62a36e6a8891338e4",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "b allows full keyboard operability without losing focus position.\n\n---\n\nAGENT:\n\n## Why\n\nOn Settings > Agent (`/settings/agents`), the actions menu (`⋮`) on each agent profile row had keyboard accessibility issues (issue #18060):\n1. When anchored against a trigger button, the menu renders through a portal only after `portalStyle` is calculated in `useLayoutEffect`. The initial focus effect previously ran with empty dependencies on mount before the portaled items existed, leaving focus on the trigger.\n2. In `handleKeyDown`, arrow navigation computed the next index across ",
              "t.tsx` (14 tests) covering render, click callbacks, disabled state, focus on open (mouse and Enter), arrow navigation with disabled skipping and wrapping, Escape dismissal, and Tab focus handoff.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\nRun the agent profiles test suites:\n```bash\nnpm test -- __tests__/components/settings/agent-profiles/\n```\n\nAll 5 test files and 49 tests pass cleanly:\n```text\n Test Files  5 passed (5)\n      Tests  49 passed (49)\n```\n\nAnd verify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18248"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ing, and checked for duplicates.\n  - OpenHands/OpenHands: 58 issues; OpenHands/software-agent-sdk: 5; OpenHands/automation: 1. Each is listed under **Issues filed** below.\n  - The 2026-10-06 map refresh filed four more (#18060–#18063), each with screenshots and a regression verdict; they are listed with the others.\n  - Findings that matched existing issues went in as comments instead.\n  - Every defect the map describes links its issue in that family's Gotchas, so a weekly pass can tell \"still broken\" from \"fixed\".\n- **No product code changes.** The only files outside `.",
              ".\n  - 35670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purpose. software-agent-sdk#5531, which would have removed it from the schema, was closed because",
              "\"1 MCPs to connect\" for optional integrations\n- OpenHands/OpenHands#17960: Automation setup offers an Agent profile for Prompt and Plugin actions, but choosing one blocks creation with \"Extra inputs are not permitted\"\n- OpenHands/OpenHands#18060: Agent profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at the disabled \"Set as active\"\n- OpenHands/OpenHands#18061: Automation setup: Agent profile field goes blank after switching the action through Prompt/Plugin or choosing \"Default\"\n- OpenHands/OpenHands#18062: Automations: a deleted automation stays o"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              " group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source",
              "cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F10.list-states-load-error-lightplus.png)``````````\n- F13.menu-keyboard: the row menu works from the keyboard (#18060 fixed).\n  ![F13 menu](https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F13.menu-keyboard.png)\n- F13.acp-local-presets: the"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18112,
          "title": "fix(a11y): make the agent profile row menu keyboard-operable",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18112",
          "created_at": "2026-10-07T05:45:13Z",
          "updated_at": "2026-10-12T15:07:49Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:44:09Z",
          "closed_at": "2026-10-11T03:44:09Z",
          "head_sha": "f5ddec1cd40ea58a12c51b94d1bad8beb9d27d41",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e row menu could not be operated from the keyboard: focus never landed inside the portaled menu, arrow keys appeared stuck on the disabled \"Set as active\" item, and Escape/Tab dropped focus to the top of the page (issue #18060). The same defects had been fixed for the LLM profile menu in #18019.\n\n## Summary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings →",
              "mmary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings → Agent profiles, then Tab to a row's `⋮` button and press Enter.\n2. Arrow Up/Down: focus cycles the enabled items, skipping \"Set as active\" when it is disabled, and wraps.\n3. Escape and Tab: focus returns to the `⋮` trigger. Enter runs the focused action.\n4. Automated: `npx vitest run __tests__/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18112"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18112,
          "title": "fix(a11y): make the agent profile row menu keyboard-operable",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18112",
          "created_at": "2026-10-07T05:45:13Z",
          "updated_at": "2026-10-12T15:07:49Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:44:09Z",
          "closed_at": "2026-10-11T03:44:09Z",
          "head_sha": "f5ddec1cd40ea58a12c51b94d1bad8beb9d27d41",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "e row menu could not be operated from the keyboard: focus never landed inside the portaled menu, arrow keys appeared stuck on the disabled \"Set as active\" item, and Escape/Tab dropped focus to the top of the page (issue #18060). The same defects had been fixed for the LLM profile menu in #18019.\n\n## Summary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings →",
              "mmary\n\n- Focus the first enabled item once the portaled menu actually renders.\n- Arrow navigation cycles only the enabled items.\n- Escape/Tab return focus to the row's `⋮` trigger before closing.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\n1. `npm run dev` → Settings → Agent profiles, then Tab to a row's `⋮` button and press Enter.\n2. Arrow Up/Down: focus cycles the enabled items, skipping \"Set as active\" when it is disabled, and wraps.\n3. Escape and Tab: focus returns to the `⋮` trigger. Enter runs the focused action.\n4. Automated: `npx vitest run __tests__/compone"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18112"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18248,
          "title": "fix(settings): restore keyboard accessibility for agent profile actions menu",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18248",
          "created_at": "2026-10-09T17:48:02Z",
          "updated_at": "2026-10-11T23:05:48Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:05:48Z",
          "head_sha": "7e1229101cd9ebcd3b1495c62a36e6a8891338e4",
          "scope": "Proposes keyboard focus, enabled-item navigation and focus restoration for agent profile row menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "b allows full keyboard operability without losing focus position.\n\n---\n\nAGENT:\n\n## Why\n\nOn Settings > Agent (`/settings/agents`), the actions menu (`⋮`) on each agent profile row had keyboard accessibility issues (issue #18060):\n1. When anchored against a trigger button, the menu renders through a portal only after `portalStyle` is calculated in `useLayoutEffect`. The initial focus effect previously ran with empty dependencies on mount before the portaled items existed, leaving focus on the trigger.\n2. In `handleKeyDown`, arrow navigation computed the next index across ",
              "t.tsx` (14 tests) covering render, click callbacks, disabled state, focus on open (mouse and Enter), arrow navigation with disabled skipping and wrapping, Escape dismissal, and Tab focus handoff.\n\n## Issue Number\n\nFixes #18060\n\n## How to Test\n\nRun the agent profiles test suites:\n```bash\nnpm test -- __tests__/components/settings/agent-profiles/\n```\n\nAll 5 test files and 49 tests pass cleanly:\n```text\n Test Files  5 passed (5)\n      Tests  49 passed (49)\n```\n\nAnd verify TypeScript compilation:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"agen"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18248"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18112; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18061,
      "title": "[Bug]: Automation setup: Agent profile field goes blank after switching the action through Prompt/Plugin or choosing \"Default\"",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18061",
      "created_at": "2026-10-06T06:51:09Z",
      "updated_at": "2026-10-11T03:47:02Z",
      "state": "closed",
      "closed_at": "2026-10-11T03:47:02Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18111,
          "title": "fix(automations): show Default when the agent profile field is empty",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18111",
          "created_at": "2026-10-07T05:39:59Z",
          "updated_at": "2026-10-12T15:07:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:47:01Z",
          "closed_at": "2026-10-11T03:47:01Z",
          "head_sha": "8e559c2c4c41ee8b65ee0ee868703199e3d6d184",
          "scope": "Normalizes the empty automation agent-profile choice to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "p dialog hands the form value to the agent-profile selector, so both paths render **Default** (value shown, Default checked).\n- Form storage, request payload, and persistence semantics unchanged.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\n1. `npm run dev` → create an automation and open the setup dialog.\n2. Upload tarball → Prompt → Upload tarball through the action menu: the agent profile field reads **Default** and the open list marks **Default** selected (before the fix the field was blank).\n3. Choose a saved profile, then **Default** from the list: the field re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18111"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18187,
          "title": "fix(automations): treat empty agent profile id as default selection",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18187",
          "created_at": "2026-10-08T18:55:27Z",
          "updated_at": "2026-10-11T23:06:09Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:09Z",
          "head_sha": "436d015f8663c3e152f63f776421757cfc42a1ce",
          "scope": "Normalizes empty automation agent-profile ids to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "selector.test.tsx` verifying that passing `\"\"` as `value` selects `\"__default__\"`.\n- Verified all 18 unit tests across `agent-profile-selector.test.tsx` and `manifest-setup-dialog.test.tsx` pass.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test src/components/features/automations/agent-profile-selector.test.tsx __tests__/components/manifest/manifest-setup-dialog.test.tsx\n```\n\nAll 18 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-agent-profile-default\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18187"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18111,
          "title": "fix(automations): show Default when the agent profile field is empty",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18111",
          "created_at": "2026-10-07T05:39:59Z",
          "updated_at": "2026-10-12T15:07:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:47:01Z",
          "closed_at": "2026-10-11T03:47:01Z",
          "head_sha": "8e559c2c4c41ee8b65ee0ee868703199e3d6d184",
          "scope": "Normalizes the empty automation agent-profile choice to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "p dialog hands the form value to the agent-profile selector, so both paths render **Default** (value shown, Default checked).\n- Form storage, request payload, and persistence semantics unchanged.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\n1. `npm run dev` → create an automation and open the setup dialog.\n2. Upload tarball → Prompt → Upload tarball through the action menu: the agent profile field reads **Default** and the open list marks **Default** selected (before the fix the field was blank).\n3. Choose a saved profile, then **Default** from the list: the field re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18111"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18187,
          "title": "fix(automations): treat empty agent profile id as default selection",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18187",
          "created_at": "2026-10-08T18:55:27Z",
          "updated_at": "2026-10-11T23:06:09Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:09Z",
          "head_sha": "436d015f8663c3e152f63f776421757cfc42a1ce",
          "scope": "Normalizes empty automation agent-profile ids to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "selector.test.tsx` verifying that passing `\"\"` as `value` selects `\"__default__\"`.\n- Verified all 18 unit tests across `agent-profile-selector.test.tsx` and `manifest-setup-dialog.test.tsx` pass.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test src/components/features/automations/agent-profile-selector.test.tsx __tests__/components/manifest/manifest-setup-dialog.test.tsx\n```\n\nAll 18 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-agent-profile-default\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18187"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "g one blocks creation with \"Extra inputs are not permitted\"\n- OpenHands/OpenHands#18060: Agent profile row menu is not keyboard-operable: focus stays on the trigger, and arrow keys stop at the disabled \"Set as active\"\n- OpenHands/OpenHands#18061: Automation setup: Agent profile field goes blank after switching the action through Prompt/Plugin or choosing \"Default\"\n- OpenHands/OpenHands#18062: Automations: a deleted automation stays on the dashboard, home page and detail page after Run now fails with \"Automation not found\"\n- OpenHands/OpenHands#18063: Composer \"More input actions\" Model su"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18264,
          "title": "docs(verify-openhands): map maintenance 2026-10-10",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18264",
          "created_at": "2026-10-10T07:53:03Z",
          "updated_at": "2026-10-12T15:07:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T23:58:55Z",
          "closed_at": "2026-10-10T23:58:55Z",
          "head_sha": "da4c2924d67fe68b1fa49ba59c379e6860a9c347",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "rified setup paths, remaining prerequisites and current results, preserving stable IDs/counts and BASE.\n\n## Issue Number\n\nRefs #17568 (ready-for-dev), with independently reproduced #18263 and existing #17948, #17959 and #18061 linked from the map. Product fixes are tracked by their owning issues.\n\n## How to Test\n\nInstall locked dependencies with `npm ci --ignore-scripts` and put `.agents/skills/verify-openhands/scripts` on PATH. Run:\n\n```sh\ncontrol-openhands map check\ncontrol-openhands map coverage\ncontrol-openhands map testids\ncontrol-openhands map baseline\ncontrol-ope"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18264"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "aft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source-verified only. Both call sites",
              "3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F21.edit-tarball-fail-18341.png)```````````````\n- F22.setup-agent-profile: shows Default after switching action (#18061 fixed).\n  ![F22](````````````````https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F22.setup-agent-profile-default.png)````"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18111,
          "title": "fix(automations): show Default when the agent profile field is empty",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18111",
          "created_at": "2026-10-07T05:39:59Z",
          "updated_at": "2026-10-12T15:07:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:47:01Z",
          "closed_at": "2026-10-11T03:47:01Z",
          "head_sha": "8e559c2c4c41ee8b65ee0ee868703199e3d6d184",
          "scope": "Normalizes the empty automation agent-profile choice to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "p dialog hands the form value to the agent-profile selector, so both paths render **Default** (value shown, Default checked).\n- Form storage, request payload, and persistence semantics unchanged.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\n1. `npm run dev` → create an automation and open the setup dialog.\n2. Upload tarball → Prompt → Upload tarball through the action menu: the agent profile field reads **Default** and the open list marks **Default** selected (before the fix the field was blank).\n3. Choose a saved profile, then **Default** from the list: the field re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18111"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18111,
          "title": "fix(automations): show Default when the agent profile field is empty",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18111",
          "created_at": "2026-10-07T05:39:59Z",
          "updated_at": "2026-10-12T15:07:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:47:01Z",
          "closed_at": "2026-10-11T03:47:01Z",
          "head_sha": "8e559c2c4c41ee8b65ee0ee868703199e3d6d184",
          "scope": "Normalizes the empty automation agent-profile choice to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "p dialog hands the form value to the agent-profile selector, so both paths render **Default** (value shown, Default checked).\n- Form storage, request payload, and persistence semantics unchanged.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\n1. `npm run dev` → create an automation and open the setup dialog.\n2. Upload tarball → Prompt → Upload tarball through the action menu: the agent profile field reads **Default** and the open list marks **Default** selected (before the fix the field was blank).\n3. Choose a saved profile, then **Default** from the list: the field re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18111"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18187,
          "title": "fix(automations): treat empty agent profile id as default selection",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18187",
          "created_at": "2026-10-08T18:55:27Z",
          "updated_at": "2026-10-11T23:06:09Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:09Z",
          "head_sha": "436d015f8663c3e152f63f776421757cfc42a1ce",
          "scope": "Normalizes empty automation agent-profile ids to the displayed Default selection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "selector.test.tsx` verifying that passing `\"\"` as `value` selects `\"__default__\"`.\n- Verified all 18 unit tests across `agent-profile-selector.test.tsx` and `manifest-setup-dialog.test.tsx` pass.\n\n## Issue Number\n\nFixes #18061\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test src/components/features/automations/agent-profile-selector.test.tsx __tests__/components/manifest/manifest-setup-dialog.test.tsx\n```\n\nAll 18 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-agent-profile-default\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18187"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18111; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18062,
      "title": "[Bug]: Automations: a deleted automation stays on the dashboard, home page and detail page after Run now fails with \"Automation not found\"",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18062",
      "created_at": "2026-10-06T06:51:10Z",
      "updated_at": "2026-10-12T05:05:31Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18073,
          "title": "fix(automations): refetch automations when Run now finds the automation deleted",
          "author": "pucedoteth",
          "author_url": "https://github.com/pucedoteth",
          "url": "https://github.com/OpenHands/OpenHands/pull/18073",
          "created_at": "2026-10-06T13:20:42Z",
          "updated_at": "2026-10-08T18:00:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "9a831278b5fd79bfdd7646db33bb81f824beadc8",
          "scope": "Refetches automation list and detail after a Run now 404 and avoids a duplicate detail toast.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " data alone. The detail query no longer adds its own toast when that refetch 404s, so there is still exactly one error toast. Before/after screenshots from a running Canvas are below and committed under `.pr/`.\n\n## Why\n\n#18062: after a failed **Run now** on an automation deleted elsewhere, the \"Automation not found\" toast appears but the dashboard card, the home page card and row, and the detail page keep showing the deleted automation. `useDispatchAutomation` only invalidated queries in `onSuccess`, and the callers' `onError` handlers only toast, so nothing refetched u",
              "ctions, fails **Run now** with a 404 and asserts one toast after the detail refetch settles (it gets 2 without the `disableToast` change). The `use-settings` mock keeps the real `getErrorStatus`.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nUnit tests (Node 24.19.0):\n\n```sh\nnpm run make-i18n\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nOn `main` the two new 404 cases fail (`expected false to be true` on `isInvalidated`). With this change, 7/7 pass. `npx vitest run __tests__/hooks __tests__/routes/automation* __tests__/components/features/h"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18073"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18186,
          "title": "fix(automations): invalidate queries when dispatch fails with 404",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18186",
          "created_at": "2026-10-08T18:30:54Z",
          "updated_at": "2026-10-10T21:14:38Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d088ddec5a81284a5b05544f77d97c1d47c6b1ba",
          "scope": "Invalidates automation list and detail queries after a Run now 404 to remove deleted automation data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "_tests__/routes/automations-list.test.tsx` verifying that a 404 dispatch failure refetches and removes the deleted automation, whereas non-404 failures retain loaded data without extra refetches.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nRun unit tests:\n```bash\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nAll 26 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-card-stale-after-failed-run\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c7f6f82dca7446d00bdf6363eb"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18186"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18073,
          "title": "fix(automations): refetch automations when Run now finds the automation deleted",
          "author": "pucedoteth",
          "author_url": "https://github.com/pucedoteth",
          "url": "https://github.com/OpenHands/OpenHands/pull/18073",
          "created_at": "2026-10-06T13:20:42Z",
          "updated_at": "2026-10-08T18:00:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "9a831278b5fd79bfdd7646db33bb81f824beadc8",
          "scope": "Refetches automation list and detail after a Run now 404 and avoids a duplicate detail toast.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " data alone. The detail query no longer adds its own toast when that refetch 404s, so there is still exactly one error toast. Before/after screenshots from a running Canvas are below and committed under `.pr/`.\n\n## Why\n\n#18062: after a failed **Run now** on an automation deleted elsewhere, the \"Automation not found\" toast appears but the dashboard card, the home page card and row, and the detail page keep showing the deleted automation. `useDispatchAutomation` only invalidated queries in `onSuccess`, and the callers' `onError` handlers only toast, so nothing refetched u",
              "ctions, fails **Run now** with a 404 and asserts one toast after the detail refetch settles (it gets 2 without the `disableToast` change). The `use-settings` mock keeps the real `getErrorStatus`.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nUnit tests (Node 24.19.0):\n\n```sh\nnpm run make-i18n\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nOn `main` the two new 404 cases fail (`expected false to be true` on `isInvalidated`). With this change, 7/7 pass. `npx vitest run __tests__/hooks __tests__/routes/automation* __tests__/components/features/h"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18073"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18186,
          "title": "fix(automations): invalidate queries when dispatch fails with 404",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18186",
          "created_at": "2026-10-08T18:30:54Z",
          "updated_at": "2026-10-10T21:14:38Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d088ddec5a81284a5b05544f77d97c1d47c6b1ba",
          "scope": "Invalidates automation list and detail queries after a Run now 404 to remove deleted automation data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "_tests__/routes/automations-list.test.tsx` verifying that a 404 dispatch failure refetches and removes the deleted automation, whereas non-404 failures retain loaded data without extra refetches.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nRun unit tests:\n```bash\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nAll 26 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-card-stale-after-failed-run\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c7f6f82dca7446d00bdf6363eb"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18186"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " on the trigger, and arrow keys stop at the disabled \"Set as active\"\n- OpenHands/OpenHands#18061: Automation setup: Agent profile field goes blank after switching the action through Prompt/Plugin or choosing \"Default\"\n- OpenHands/OpenHands#18062: Automations: a deleted automation stays on the dashboard, home page and detail page after Run now fails with \"Automation not found\"\n- OpenHands/OpenHands#18063: Composer \"More input actions\" Model submenu runs off the right and bottom edges at narrow widths (third profile and LLM Profiles link can't be clicked or tapped)\n\n</details>\n\n---\n\n\n\n\n\n\n\n\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 2,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18073,
          "title": "fix(automations): refetch automations when Run now finds the automation deleted",
          "author": "pucedoteth",
          "author_url": "https://github.com/pucedoteth",
          "url": "https://github.com/OpenHands/OpenHands/pull/18073",
          "created_at": "2026-10-06T13:20:42Z",
          "updated_at": "2026-10-08T18:00:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "9a831278b5fd79bfdd7646db33bb81f824beadc8",
          "scope": "Refetches automation list and detail after a Run now 404 and avoids a duplicate detail toast.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " data alone. The detail query no longer adds its own toast when that refetch 404s, so there is still exactly one error toast. Before/after screenshots from a running Canvas are below and committed under `.pr/`.\n\n## Why\n\n#18062: after a failed **Run now** on an automation deleted elsewhere, the \"Automation not found\" toast appears but the dashboard card, the home page card and row, and the detail page keep showing the deleted automation. `useDispatchAutomation` only invalidated queries in `onSuccess`, and the callers' `onError` handlers only toast, so nothing refetched u",
              "ctions, fails **Run now** with a 404 and asserts one toast after the detail refetch settles (it gets 2 without the `disableToast` change). The `use-settings` mock keeps the real `getErrorStatus`.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nUnit tests (Node 24.19.0):\n\n```sh\nnpm run make-i18n\nnpx vitest run __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nOn `main` the two new 404 cases fail (`expected false to be true` on `isInvalidated`). With this change, 7/7 pass. `npx vitest run __tests__/hooks __tests__/routes/automation* __tests__/components/features/h"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18073"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18186,
          "title": "fix(automations): invalidate queries when dispatch fails with 404",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18186",
          "created_at": "2026-10-08T18:30:54Z",
          "updated_at": "2026-10-10T21:14:38Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "d088ddec5a81284a5b05544f77d97c1d47c6b1ba",
          "scope": "Invalidates automation list and detail queries after a Run now 404 to remove deleted automation data.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "_tests__/routes/automations-list.test.tsx` verifying that a 404 dispatch failure refetches and removes the deleted automation, whereas non-404 failures retain loaded data without extra refetches.\n\n## Issue Number\n\nFixes #18062\n\n## How to Test\n\nRun unit tests:\n```bash\nnpx vitest run __tests__/routes/automations-list.test.tsx __tests__/hooks/use-home-automation-actions.test.tsx\n```\n\nAll 26 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"automation-card-stale-after-failed-run\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/dd0c7f6f82dca7446d00bdf6363eb"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18186"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18063,
      "title": "[Bug]: Composer \"More input actions\" Model submenu runs off the right and bottom edges at narrow widths (third profile and LLM Profiles link can't be clicked or tapped)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18063",
      "created_at": "2026-10-06T06:51:11Z",
      "updated_at": "2026-10-12T05:05:30Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18115,
          "title": "fix(chat): keep the overflow menu's submenus inside the viewport",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18115",
          "created_at": "2026-10-07T06:04:03Z",
          "updated_at": "2026-10-12T04:26:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f8890f07e433bbd55e702c73d2f0941f76484bf6",
          "scope": "Clamps overflow input-actions submenus to the viewport so Model choices and links remain reachable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nto the viewport via a shared `useOverflowSubmenuStyle` hook (re-measures on open, resize, scroll).\n- Desktop hover placement unchanged; Macros submenu left for a follow-up as noted in the issue.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. `npm run dev` and open a conversation; shrink the window to ~320 px wide.\n2. Open the more-actions menu and its Model (or Code/Plan) submenu — it stays fully inside the viewport; the profile rows and the settings link below remain clickable and reachable by Tab (before the fix they were pushed off screen).\n3. Automated: `npx vi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18115"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18242,
          "title": "fix(chat): fit overflow and tools submenus to viewport at narrow widths",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18242",
          "created_at": "2026-10-09T13:37:22Z",
          "updated_at": "2026-10-09T14:13:05Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "54b325b47ee4dc97d36f3dd9fb424c945bc0f4c4",
          "scope": "Proposes viewport-aware placement for narrow overflow and tools submenus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ere positioned with hardcoded `absolute left-full top-[-4px]`. This caused the submenus to overflow past the right and bottom edges of the screen, rendering profile options and the \"LLM Profiles\" link unclickable (issue #18063).\n\n## Summary\n\n- Computed local offsets for absolutely-positioned submenus to ensure containment within viewport bounds.\n- Flips submenus to the left when space allows, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and i",
              "s, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and interactions.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. Run unit test suites:\n   ```bash\n   npm test -- __tests__/hooks/use-submenu-placement.test.ts __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/context-menu/tools-context-menu.test.tsx\n   ```\n2. In the browser, resize viewport to 320x700 or 360x800.\n3. Open \"More input actions\" (thre"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18242"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18115,
          "title": "fix(chat): keep the overflow menu's submenus inside the viewport",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18115",
          "created_at": "2026-10-07T06:04:03Z",
          "updated_at": "2026-10-12T04:26:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f8890f07e433bbd55e702c73d2f0941f76484bf6",
          "scope": "Clamps overflow input-actions submenus to the viewport so Model choices and links remain reachable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nto the viewport via a shared `useOverflowSubmenuStyle` hook (re-measures on open, resize, scroll).\n- Desktop hover placement unchanged; Macros submenu left for a follow-up as noted in the issue.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. `npm run dev` and open a conversation; shrink the window to ~320 px wide.\n2. Open the more-actions menu and its Model (or Code/Plan) submenu — it stays fully inside the viewport; the profile rows and the settings link below remain clickable and reachable by Tab (before the fix they were pushed off screen).\n3. Automated: `npx vi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18115"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18242,
          "title": "fix(chat): fit overflow and tools submenus to viewport at narrow widths",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18242",
          "created_at": "2026-10-09T13:37:22Z",
          "updated_at": "2026-10-09T14:13:05Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "54b325b47ee4dc97d36f3dd9fb424c945bc0f4c4",
          "scope": "Proposes viewport-aware placement for narrow overflow and tools submenus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ere positioned with hardcoded `absolute left-full top-[-4px]`. This caused the submenus to overflow past the right and bottom edges of the screen, rendering profile options and the \"LLM Profiles\" link unclickable (issue #18063).\n\n## Summary\n\n- Computed local offsets for absolutely-positioned submenus to ensure containment within viewport bounds.\n- Flips submenus to the left when space allows, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and i",
              "s, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and interactions.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. Run unit test suites:\n   ```bash\n   npm test -- __tests__/hooks/use-submenu-placement.test.ts __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/context-menu/tools-context-menu.test.tsx\n   ```\n2. In the browser, resize viewport to 320x700 or 360x800.\n3. Open \"More input actions\" (thre"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18242"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 17961,
          "title": "feat: verify-openhands skill with control-openhands CLI and the full feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/17961",
          "created_at": "2026-10-05T02:40:12Z",
          "updated_at": "2026-10-08T20:37:47Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:43:00Z",
          "closed_at": "2026-10-06T20:43:00Z",
          "head_sha": "0803eaaa19b91759b553174424275997651e881c",
          "scope": "Files or lists the product defect and links it from the verification map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "d checked for duplicates.\n  - OpenHands/OpenHands: 58 issues; OpenHands/software-agent-sdk: 5; OpenHands/automation: 1. Each is listed under **Issues filed** below.\n  - The 2026-10-06 map refresh filed four more (#18060–#18063), each with screenshots and a regression verdict; they are listed with the others.\n  - Findings that matched existing issues went in as comments instead.\n  - Every defect the map describes links its issue in that family's Gotchas, so a weekly pass can tell \"still broken\" from \"fixed\".\n- **No product code changes.** The only files outside `.agents/",
              "5670832e: #18026 (#17902), #18032 (#17921), #18033 (#17935), #18034 (#17930), #18035 (#17939), #18036 (#17942), #18037 (#17944), #18040 (#17956), #18044 (#17933) and #18045 (#17940), plus links to the newly filed #18060–#18063.\n  - 02e08a56b: #18048 (VS Code link restored, so `F08.vscode-link` is active again), #17864 (new `F06.corrective-nudge` row) and #18049 (F15 known failures).\n- **Condenser Kind stays.** Settings > Condenser keeps its Condenser Kind dropdown on purpose. software-agent-sdk#5531, which would have removed it from the schema, was closed because more c",
              "g the action through Prompt/Plugin or choosing \"Default\"\n- OpenHands/OpenHands#18062: Automations: a deleted automation stays on the dashboard, home page and detail page after Run now fails with \"Automation not found\"\n- OpenHands/OpenHands#18063: Composer \"More input actions\" Model submenu runs off the right and bottom edges at narrow widths (third profile and LLM Profiles link can't be clicked or tapped)\n\n</details>\n\n---\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/age"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/17961"
            ]
          },
          "direct_closer": false,
          "reason": "The skill/map PR explicitly has no product code changes and does not implement this product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Closes the same menu on Escape; does not alter submenu positioning.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "/overflow-menu-escape).\n\n## Type\n\n- [x] Bug fix\n- [ ] Feature\n- [ ] Refactor\n- [ ] Breaking change\n- [ ] Docs / chore\n\n## Notes\n\nNot a regression: Escape was never handled for this menu (noted as a follow-up in #18015). #18063 (the Model submenu running off screen at narrow width) is a separate issue and is unchanged.\n\nThe recordings under `.pr/overflow-menu-escape/` (commit `3e9c3e4`) are PR evidence only and are removed on approval.\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states #18063 is a separate issue and remains unchanged."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "| C | coordinator: F10.rename, F13.name-validation | 2 | 2 | 0 | 0 | 0 |\n| **Total** | | **214** | **181** | **19** | **14** | **0** |\n\nEvery fail is a known or newly filed defect, each kept as Expected + Known failure. #18063 is the overflow Model submenu off-screen. #18206 is an agent hook showing `prompt`. software-agent-sdk#5496 is plugin Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18",
              "m/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/bugs/2026-10-09/backend-selector-escape/desktop-after-second-escape.png)''```\n- Known failures still reproducing: F05 overflow Model submenu off-screen (#18063) [F05 18063](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F05.overflow-menu-model-submenu-fail-18063.png);''``` F07 agent hook shows its `prompt` (#18206) [F07 18206](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18295,
          "title": "docs(verify-openhands): recover map corrections from the closed 2026-10-09 sweep",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18295",
          "created_at": "2026-10-11T22:25:27Z",
          "updated_at": "2026-10-12T15:07:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T22:53:13Z",
          "closed_at": "2026-10-11T22:53:13Z",
          "head_sha": "8c08bf3d818b0502da12d609eb51dec83af71019",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " and against GitHub:\r\n- `src/routes/agent-settings.tsx` has the `agent-settings-system-prompt-mode` and `agent-settings-system-prompt` test ids and saves `persona` and `system_message_suffix`.\r\n- #18202, #18204, #18210, #18063, #18203, #18205 and #18212 are all still open.\r\n\r\n```text\r\n$ control-openhands map check\r\n{\"ok\": true, \"files\": 27, \"ids\": 747, \"checked\": \"all\", \"problems\": []}\r\n$ git diff --check   # clean\r\n```\r\n\r\nThese recipes were not re-driven on a live stack for this PR. The observations come from the 2026-10-09 run recorded in #18213.\r\n\r\n## Video/Screensho"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18295"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 2,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18115,
          "title": "fix(chat): keep the overflow menu's submenus inside the viewport",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18115",
          "created_at": "2026-10-07T06:04:03Z",
          "updated_at": "2026-10-12T04:26:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f8890f07e433bbd55e702c73d2f0941f76484bf6",
          "scope": "Clamps overflow input-actions submenus to the viewport so Model choices and links remain reachable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nto the viewport via a shared `useOverflowSubmenuStyle` hook (re-measures on open, resize, scroll).\n- Desktop hover placement unchanged; Macros submenu left for a follow-up as noted in the issue.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. `npm run dev` and open a conversation; shrink the window to ~320 px wide.\n2. Open the more-actions menu and its Model (or Code/Plan) submenu — it stays fully inside the viewport; the profile rows and the settings link below remain clickable and reachable by Tab (before the fix they were pushed off screen).\n3. Automated: `npx vi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18115"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18242,
          "title": "fix(chat): fit overflow and tools submenus to viewport at narrow widths",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18242",
          "created_at": "2026-10-09T13:37:22Z",
          "updated_at": "2026-10-09T14:13:05Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "54b325b47ee4dc97d36f3dd9fb424c945bc0f4c4",
          "scope": "Proposes viewport-aware placement for narrow overflow and tools submenus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ere positioned with hardcoded `absolute left-full top-[-4px]`. This caused the submenus to overflow past the right and bottom edges of the screen, rendering profile options and the \"LLM Profiles\" link unclickable (issue #18063).\n\n## Summary\n\n- Computed local offsets for absolutely-positioned submenus to ensure containment within viewport bounds.\n- Flips submenus to the left when space allows, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and i",
              "s, or clamps inside viewport margins on narrow screens.\n- Clamps vertical positioning to prevent running past the bottom of the viewport.\n- Preserved existing desktop appearance and interactions.\n\n## Issue Number\n\nFixes #18063\n\n## How to Test\n\n1. Run unit test suites:\n   ```bash\n   npm test -- __tests__/hooks/use-submenu-placement.test.ts __tests__/components/features/chat/components/chat-input-actions.test.tsx __tests__/components/context-menu/tools-context-menu.test.tsx\n   ```\n2. In the browser, resize viewport to 320x700 or 360x800.\n3. Open \"More input actions\" (thre"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18242"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18078,
      "title": "[Bug]: Flaky delete-profile-modal test asserts the success toast before the delete mutation settles",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18078",
      "created_at": "2026-10-06T20:42:59Z",
      "updated_at": "2026-10-07T11:28:17Z",
      "state": "closed",
      "closed_at": "2026-10-07T11:28:17Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18079,
          "title": "test(settings): wait for the delete toast and close in DeleteProfileModal test",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18079",
          "created_at": "2026-10-06T20:45:23Z",
          "updated_at": "2026-10-08T20:37:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T11:28:15Z",
          "closed_at": "2026-10-07T11:28:15Z",
          "head_sha": "2a418630d74d31f6732c878a043166b815453910",
          "scope": "Fixes the specifically reported test timing race by waiting for the delete toast and close callback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t and `onClose` checks into the same `waitFor` as the `deleteProfile` check, so the test waits for what it asserts.\r\n- Test-only: `DeleteProfileModal` and `useDeleteLlmProfile` are unchanged.\r\n\r\n## Issue Number\r\n\r\nFixes #18078\r\n\r\n## How to Test\r\n\r\n```bash\r\nnpm ci && npm run make-i18n\r\nnpx vitest run __tests__/components/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with",
              "onents/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with the same error as CI (`Number of calls: 0`). With this branch's test and the same delay, all 12 tests pass. The delay is not committed.\r\n- Without the delay, this branch's file passed 10 out of 10 runs with all 4 CPUs busy. `main`'s version also passed 15 out of 15 runs locally, so the real failure is rare and I "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18079"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18079,
          "title": "test(settings): wait for the delete toast and close in DeleteProfileModal test",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18079",
          "created_at": "2026-10-06T20:45:23Z",
          "updated_at": "2026-10-08T20:37:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T11:28:15Z",
          "closed_at": "2026-10-07T11:28:15Z",
          "head_sha": "2a418630d74d31f6732c878a043166b815453910",
          "scope": "Fixes the specifically reported test timing race by waiting for the delete toast and close callback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t and `onClose` checks into the same `waitFor` as the `deleteProfile` check, so the test waits for what it asserts.\r\n- Test-only: `DeleteProfileModal` and `useDeleteLlmProfile` are unchanged.\r\n\r\n## Issue Number\r\n\r\nFixes #18078\r\n\r\n## How to Test\r\n\r\n```bash\r\nnpm ci && npm run make-i18n\r\nnpx vitest run __tests__/components/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with",
              "onents/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with the same error as CI (`Number of calls: 0`). With this branch's test and the same delay, all 12 tests pass. The delay is not committed.\r\n- Without the delay, this branch's file passed 10 out of 10 runs with all 4 CPUs busy. `main`'s version also passed 15 out of 15 runs locally, so the real failure is rare and I "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18079"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18079,
          "title": "test(settings): wait for the delete toast and close in DeleteProfileModal test",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18079",
          "created_at": "2026-10-06T20:45:23Z",
          "updated_at": "2026-10-08T20:37:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T11:28:15Z",
          "closed_at": "2026-10-07T11:28:15Z",
          "head_sha": "2a418630d74d31f6732c878a043166b815453910",
          "scope": "Fixes the specifically reported test timing race by waiting for the delete toast and close callback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t and `onClose` checks into the same `waitFor` as the `deleteProfile` check, so the test waits for what it asserts.\r\n- Test-only: `DeleteProfileModal` and `useDeleteLlmProfile` are unchanged.\r\n\r\n## Issue Number\r\n\r\nFixes #18078\r\n\r\n## How to Test\r\n\r\n```bash\r\nnpm ci && npm run make-i18n\r\nnpx vitest run __tests__/components/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with",
              "onents/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with the same error as CI (`Number of calls: 0`). With this branch's test and the same delay, all 12 tests pass. The delay is not committed.\r\n- Without the delay, this branch's file passed 10 out of 10 runs with all 4 CPUs busy. `main`'s version also passed 15 out of 15 runs locally, so the real failure is rare and I "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18079"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18079,
          "title": "test(settings): wait for the delete toast and close in DeleteProfileModal test",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18079",
          "created_at": "2026-10-06T20:45:23Z",
          "updated_at": "2026-10-08T20:37:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T11:28:15Z",
          "closed_at": "2026-10-07T11:28:15Z",
          "head_sha": "2a418630d74d31f6732c878a043166b815453910",
          "scope": "Fixes the specifically reported test timing race by waiting for the delete toast and close callback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "t and `onClose` checks into the same `waitFor` as the `deleteProfile` check, so the test waits for what it asserts.\r\n- Test-only: `DeleteProfileModal` and `useDeleteLlmProfile` are unchanged.\r\n\r\n## Issue Number\r\n\r\nFixes #18078\r\n\r\n## How to Test\r\n\r\n```bash\r\nnpm ci && npm run make-i18n\r\nnpx vitest run __tests__/components/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with",
              "onents/settings/llm-profiles/delete-profile-modal.test.tsx\r\n```\r\n\r\n- Reproduced the failure: to stand in for a slow runner, I made `SettingsService.getSettings()` resolve 100 ms later inside that test (the snippet is in #18078). With `main`'s test it fails with the same error as CI (`Number of calls: 0`). With this branch's test and the same delay, all 12 tests pass. The delay is not committed.\r\n- Without the delay, this branch's file passed 10 out of 10 runs with all 4 CPUs busy. `main`'s version also passed 15 out of 15 runs locally, so the real failure is rare and I "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18079"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18079; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18081,
      "title": "[Bug]: Do Not Track still initializes PostHog and requests z.openhands.dev",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18081",
      "created_at": "2026-10-06T22:01:23Z",
      "updated_at": "2026-10-08T03:13:51Z",
      "state": "closed",
      "closed_at": "2026-10-08T03:13:51Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Prevents PostHog initialization and requests under Do Not Track.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "z.openhands.dev` (`/array/<key>/config.js`, `/array/<key>/config`, `/flags`). So a Do Not Track session still contacted analytics, against the documented contract, and the live E2E guard against PostHog requests failed (#18081).\n\n## Summary\n\n- `getResolvedTelemetryConfig()` now returns `null` under Do Not Track, not only on a hard disable. `initializePostHogClient()` therefore never creates a client and no request is made. Consent could never be granted under Do Not Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for",
              "Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for every opt-out.\n- Without Do Not Track, initialization and the consent flow are unchanged.\n\n## Issue Number\n\nFixes #18081\n\n## How to Test\n\n- `npx vitest run __tests__/services/telemetry.test.ts`: 45 passed. The new \"build-time do-not-track\" test imports a fresh module under `VITE_DO_NOT_TRACK=1` and calls `initializePostHogClient()`, `trackInstall()` and `setTelemetryConsent(\"granted\")`. It asserts that `posthog.init` is never called.\n  - On `main` it fails: `expecte"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Prevents PostHog initialization and requests under Do Not Track.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "z.openhands.dev` (`/array/<key>/config.js`, `/array/<key>/config`, `/flags`). So a Do Not Track session still contacted analytics, against the documented contract, and the live E2E guard against PostHog requests failed (#18081).\n\n## Summary\n\n- `getResolvedTelemetryConfig()` now returns `null` under Do Not Track, not only on a hard disable. `initializePostHogClient()` therefore never creates a client and no request is made. Consent could never be granted under Do Not Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for",
              "Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for every opt-out.\n- Without Do Not Track, initialization and the consent flow are unchanged.\n\n## Issue Number\n\nFixes #18081\n\n## How to Test\n\n- `npx vitest run __tests__/services/telemetry.test.ts`: 45 passed. The new \"build-time do-not-track\" test imports a fresh module under `VITE_DO_NOT_TRACK=1` and calls `initializePostHogClient()`, `trackInstall()` and `setTelemetryConsent(\"granted\")`. It asserts that `posthog.init` is never called.\n  - On `main` it fails: `expecte"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Prevents PostHog initialization and requests under Do Not Track.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "z.openhands.dev` (`/array/<key>/config.js`, `/array/<key>/config`, `/flags`). So a Do Not Track session still contacted analytics, against the documented contract, and the live E2E guard against PostHog requests failed (#18081).\n\n## Summary\n\n- `getResolvedTelemetryConfig()` now returns `null` under Do Not Track, not only on a hard disable. `initializePostHogClient()` therefore never creates a client and no request is made. Consent could never be granted under Do Not Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for",
              "Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for every opt-out.\n- Without Do Not Track, initialization and the consent flow are unchanged.\n\n## Issue Number\n\nFixes #18081\n\n## How to Test\n\n- `npx vitest run __tests__/services/telemetry.test.ts`: 45 passed. The new \"build-time do-not-track\" test imports a fresh module under `VITE_DO_NOT_TRACK=1` and calls `initializePostHogClient()`, `trackInstall()` and `setTelemetryConsent(\"granted\")`. It asserts that `posthog.init` is never called.\n  - On `main` it fails: `expecte"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18086,
          "title": "fix(telemetry): never initialize PostHog under Do Not Track",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18086",
          "created_at": "2026-10-06T22:41:25Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "closed_at": "2026-10-08T03:13:50Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Prevents PostHog initialization and requests under Do Not Track.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "z.openhands.dev` (`/array/<key>/config.js`, `/array/<key>/config`, `/flags`). So a Do Not Track session still contacted analytics, against the documented contract, and the live E2E guard against PostHog requests failed (#18081).\n\n## Summary\n\n- `getResolvedTelemetryConfig()` now returns `null` under Do Not Track, not only on a hard disable. `initializePostHogClient()` therefore never creates a client and no request is made. Consent could never be granted under Do Not Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for",
              "Track anyway, so nothing that could capture is lost.\n- The service header comment now says this holds for every opt-out.\n- Without Do Not Track, initialization and the consent flow are unchanged.\n\n## Issue Number\n\nFixes #18081\n\n## How to Test\n\n- `npx vitest run __tests__/services/telemetry.test.ts`: 45 passed. The new \"build-time do-not-track\" test imports a fresh module under `VITE_DO_NOT_TRACK=1` and calls `initializePostHogClient()`, `trackInstall()` and `setTelemetryConsent(\"granted\")`. It asserts that `posthog.init` is never called.\n  - On `main` it fails: `expecte"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18086"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18086; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18082,
      "title": "[Bug]: Live E2E (CI › live-e2e) never passes on main: tmux socket path too long, critic endpoint 404, teardown hang",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18082",
      "created_at": "2026-10-06T22:01:40Z",
      "updated_at": "2026-10-07T14:22:32Z",
      "state": "closed",
      "closed_at": "2026-10-07T14:22:32Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18084,
          "title": "fix(e2e): let the live Agent Server E2E job run and finish",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18084",
          "created_at": "2026-10-06T22:11:58Z",
          "updated_at": "2026-10-08T20:37:15Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T14:22:30Z",
          "closed_at": "2026-10-07T14:22:30Z",
          "head_sha": "c8ae0448a22fffcc147c2c007e0b2bfdfeb8f46b",
          "scope": "Repairs the reported live E2E teardown, tmux socket path and critic endpoint setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "his is one of three PRs split from the original fix for red CI on `main`; the other two are #18086 (Do Not Track) and #18087 (Mock-LLM preset automation spec).\n\n## Why\n\n`CI › live-e2e` has not passed on `main` in weeks (#18082). This PR fixes the three test-harness problems:\n\n- **Teardown hang.** Playwright's default teardown SIGKILLs the webServer's process group. `dev-safe.mjs` spawns the Agent Server detached, so it survives as an orphan holding the webServer's stdout/stderr. Playwright waits for those pipes until the 30-minute job timeout, and the job ends **cancell",
              "es.\n- `tests/e2e/live/utils/agent-server-conversation.ts`: the critic keeps the Agent Server's default endpoint and model; only `critic_api_key` is passed.\n- `e2e-testing` guide updated for both.\n\n## Issue Number\n\nFixes #18082\n\n## How to Test\n\nThe socket limit depends on path length, so I ran from a worktree at the CI path, `/home/runner/work/OpenHands/OpenHands`, with a stand-in LLM that returns the spec's terminal call and reply:\n\n```\nLIVE_E2E_LLM_API_KEY=fake LIVE_E2E_LLM_BASE_URL=http://127.0.0.1:9997 LIVE_E2E_LLM_MODEL=openai/fake CI=1 npm run test:e2e:live\n```\n\n- "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18084"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18084,
          "title": "fix(e2e): let the live Agent Server E2E job run and finish",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18084",
          "created_at": "2026-10-06T22:11:58Z",
          "updated_at": "2026-10-08T20:37:15Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T14:22:30Z",
          "closed_at": "2026-10-07T14:22:30Z",
          "head_sha": "c8ae0448a22fffcc147c2c007e0b2bfdfeb8f46b",
          "scope": "Repairs the reported live E2E teardown, tmux socket path and critic endpoint setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "his is one of three PRs split from the original fix for red CI on `main`; the other two are #18086 (Do Not Track) and #18087 (Mock-LLM preset automation spec).\n\n## Why\n\n`CI › live-e2e` has not passed on `main` in weeks (#18082). This PR fixes the three test-harness problems:\n\n- **Teardown hang.** Playwright's default teardown SIGKILLs the webServer's process group. `dev-safe.mjs` spawns the Agent Server detached, so it survives as an orphan holding the webServer's stdout/stderr. Playwright waits for those pipes until the 30-minute job timeout, and the job ends **cancell",
              "es.\n- `tests/e2e/live/utils/agent-server-conversation.ts`: the critic keeps the Agent Server's default endpoint and model; only `critic_api_key` is passed.\n- `e2e-testing` guide updated for both.\n\n## Issue Number\n\nFixes #18082\n\n## How to Test\n\nThe socket limit depends on path length, so I ran from a worktree at the CI path, `/home/runner/work/OpenHands/OpenHands`, with a stand-in LLM that returns the spec's terminal call and reply:\n\n```\nLIVE_E2E_LLM_API_KEY=fake LIVE_E2E_LLM_BASE_URL=http://127.0.0.1:9997 LIVE_E2E_LLM_MODEL=openai/fake CI=1 npm run test:e2e:live\n```\n\n- "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18084"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18105,
          "title": "feat(verify-openhands): map 20 more behaviors, with live recipes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18105",
          "created_at": "2026-10-07T04:58:49Z",
          "updated_at": "2026-10-08T20:37:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T10:37:59Z",
          "closed_at": "2026-10-07T10:37:59Z",
          "head_sha": "f2b0796635af62769ebfb69ec15a7ff4995007d9",
          "scope": "Maps additional e2e behaviors into verify-openhands recipes.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "feature-map/` did not describe, so an agent running the map could not verify them. Citing the suites from the map was tried and taken out again on Engel's call: they run differently and are mostly red on `main` (#17872, #18082). What belongs in the map is the behavior itself, with a recipe an agent can run.\r\n\r\n## Summary\r\n\r\n- **20 new sub-features** across F01, F03, F05, F06, F09, F10, F17, F18, F20, F25, F26 and F27 (736 IDs in all), each with a `control-openhands` recipe that was executed as written on an isolated stack by the agent that wrote it, then reviewed and re"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18105"
            ]
          },
          "direct_closer": false,
          "reason": "The E2E failure is background motivation; the PR explicitly leaves the e2e tests unchanged."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18084,
          "title": "fix(e2e): let the live Agent Server E2E job run and finish",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18084",
          "created_at": "2026-10-06T22:11:58Z",
          "updated_at": "2026-10-08T20:37:15Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T14:22:30Z",
          "closed_at": "2026-10-07T14:22:30Z",
          "head_sha": "c8ae0448a22fffcc147c2c007e0b2bfdfeb8f46b",
          "scope": "Repairs the reported live E2E teardown, tmux socket path and critic endpoint setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "his is one of three PRs split from the original fix for red CI on `main`; the other two are #18086 (Do Not Track) and #18087 (Mock-LLM preset automation spec).\n\n## Why\n\n`CI › live-e2e` has not passed on `main` in weeks (#18082). This PR fixes the three test-harness problems:\n\n- **Teardown hang.** Playwright's default teardown SIGKILLs the webServer's process group. `dev-safe.mjs` spawns the Agent Server detached, so it survives as an orphan holding the webServer's stdout/stderr. Playwright waits for those pipes until the 30-minute job timeout, and the job ends **cancell",
              "es.\n- `tests/e2e/live/utils/agent-server-conversation.ts`: the critic keeps the Agent Server's default endpoint and model; only `critic_api_key` is passed.\n- `e2e-testing` guide updated for both.\n\n## Issue Number\n\nFixes #18082\n\n## How to Test\n\nThe socket limit depends on path length, so I ran from a worktree at the CI path, `/home/runner/work/OpenHands/OpenHands`, with a stand-in LLM that returns the spec's terminal call and reply:\n\n```\nLIVE_E2E_LLM_API_KEY=fake LIVE_E2E_LLM_BASE_URL=http://127.0.0.1:9997 LIVE_E2E_LLM_MODEL=openai/fake CI=1 npm run test:e2e:live\n```\n\n- "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18084"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18084,
          "title": "fix(e2e): let the live Agent Server E2E job run and finish",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18084",
          "created_at": "2026-10-06T22:11:58Z",
          "updated_at": "2026-10-08T20:37:15Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T14:22:30Z",
          "closed_at": "2026-10-07T14:22:30Z",
          "head_sha": "c8ae0448a22fffcc147c2c007e0b2bfdfeb8f46b",
          "scope": "Repairs the reported live E2E teardown, tmux socket path and critic endpoint setup.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "his is one of three PRs split from the original fix for red CI on `main`; the other two are #18086 (Do Not Track) and #18087 (Mock-LLM preset automation spec).\n\n## Why\n\n`CI › live-e2e` has not passed on `main` in weeks (#18082). This PR fixes the three test-harness problems:\n\n- **Teardown hang.** Playwright's default teardown SIGKILLs the webServer's process group. `dev-safe.mjs` spawns the Agent Server detached, so it survives as an orphan holding the webServer's stdout/stderr. Playwright waits for those pipes until the 30-minute job timeout, and the job ends **cancell",
              "es.\n- `tests/e2e/live/utils/agent-server-conversation.ts`: the critic keeps the Agent Server's default endpoint and model; only `critic_api_key` is passed.\n- `e2e-testing` guide updated for both.\n\n## Issue Number\n\nFixes #18082\n\n## How to Test\n\nThe socket limit depends on path length, so I ran from a worktree at the CI path, `/home/runner/work/OpenHands/OpenHands`, with a stand-in LLM that returns the spec's terminal call and reply:\n\n```\nLIVE_E2E_LLM_API_KEY=fake LIVE_E2E_LLM_BASE_URL=http://127.0.0.1:9997 LIVE_E2E_LLM_MODEL=openai/fake CI=1 npm run test:e2e:live\n```\n\n- "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18084"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18084; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18083,
      "title": "[Bug]: Mock-LLM preset automation spec fails since #18034: its Slack stand-in no longer counts as installed",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18083",
      "created_at": "2026-10-06T22:02:11Z",
      "updated_at": "2026-10-07T00:14:50Z",
      "state": "closed",
      "closed_at": "2026-10-07T00:14:50Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18087,
          "title": "test(e2e): give the preset automation's Slack stand-in the catalog identity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18087",
          "created_at": "2026-10-06T22:41:38Z",
          "updated_at": "2026-10-08T20:37:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T00:14:48Z",
          "closed_at": "2026-10-07T00:14:48Z",
          "head_sha": "241bdca83ca4e1940d56d3ac0c0f1c5c864abce2",
          "scope": "Updates the specifically reported mock-LLM automation fixture to match the Slack catalog identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ck's catalog transport (`npx -y @zencoderai/slack-mcp-server`). \"Poll locally on your laptop\" therefore opens the Slack install dialog instead of a conversation, and the spec has failed on every `main` run since #18034 (#18083). The product behavior is correct; the fixture was stale.\n\n## Summary\n\n- The stand-in reads Slack's stdio command and args from `INTEGRATION_CATALOG` (`@openhands/extensions/integrations`), so it follows catalog changes.\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and s",
              "\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and starting the real server, just as `echo` failed MCP startup before.\n\n## Issue Number\n\nFixes #18083\n\n## How to Test\n\n`npx playwright test --config=playwright.mock-llm.config.ts tests/e2e/mock-llm/automations/mock-llm-preset-automation.spec.ts`, against the real Mock-LLM stack (`bin/agent-canvas.mjs` + agent-server 1.53.0 + automation 1.19.0):\n\n- `main`: `Expected pattern: /\\/conversations\\/.+/  Received string: \"/automations/templates\"`, the sam"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18087"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18087,
          "title": "test(e2e): give the preset automation's Slack stand-in the catalog identity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18087",
          "created_at": "2026-10-06T22:41:38Z",
          "updated_at": "2026-10-08T20:37:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T00:14:48Z",
          "closed_at": "2026-10-07T00:14:48Z",
          "head_sha": "241bdca83ca4e1940d56d3ac0c0f1c5c864abce2",
          "scope": "Updates the specifically reported mock-LLM automation fixture to match the Slack catalog identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ck's catalog transport (`npx -y @zencoderai/slack-mcp-server`). \"Poll locally on your laptop\" therefore opens the Slack install dialog instead of a conversation, and the spec has failed on every `main` run since #18034 (#18083). The product behavior is correct; the fixture was stale.\n\n## Summary\n\n- The stand-in reads Slack's stdio command and args from `INTEGRATION_CATALOG` (`@openhands/extensions/integrations`), so it follows catalog changes.\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and s",
              "\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and starting the real server, just as `echo` failed MCP startup before.\n\n## Issue Number\n\nFixes #18083\n\n## How to Test\n\n`npx playwright test --config=playwright.mock-llm.config.ts tests/e2e/mock-llm/automations/mock-llm-preset-automation.spec.ts`, against the real Mock-LLM stack (`bin/agent-canvas.mjs` + agent-server 1.53.0 + automation 1.19.0):\n\n- `main`: `Expected pattern: /\\/conversations\\/.+/  Received string: \"/automations/templates\"`, the sam"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18087"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18087,
          "title": "test(e2e): give the preset automation's Slack stand-in the catalog identity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18087",
          "created_at": "2026-10-06T22:41:38Z",
          "updated_at": "2026-10-08T20:37:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T00:14:48Z",
          "closed_at": "2026-10-07T00:14:48Z",
          "head_sha": "241bdca83ca4e1940d56d3ac0c0f1c5c864abce2",
          "scope": "Updates the specifically reported mock-LLM automation fixture to match the Slack catalog identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ck's catalog transport (`npx -y @zencoderai/slack-mcp-server`). \"Poll locally on your laptop\" therefore opens the Slack install dialog instead of a conversation, and the spec has failed on every `main` run since #18034 (#18083). The product behavior is correct; the fixture was stale.\n\n## Summary\n\n- The stand-in reads Slack's stdio command and args from `INTEGRATION_CATALOG` (`@openhands/extensions/integrations`), so it follows catalog changes.\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and s",
              "\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and starting the real server, just as `echo` failed MCP startup before.\n\n## Issue Number\n\nFixes #18083\n\n## How to Test\n\n`npx playwright test --config=playwright.mock-llm.config.ts tests/e2e/mock-llm/automations/mock-llm-preset-automation.spec.ts`, against the real Mock-LLM stack (`bin/agent-canvas.mjs` + agent-server 1.53.0 + automation 1.19.0):\n\n- `main`: `Expected pattern: /\\/conversations\\/.+/  Received string: \"/automations/templates\"`, the sam"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18087"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18087,
          "title": "test(e2e): give the preset automation's Slack stand-in the catalog identity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18087",
          "created_at": "2026-10-06T22:41:38Z",
          "updated_at": "2026-10-08T20:37:39Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T00:14:48Z",
          "closed_at": "2026-10-07T00:14:48Z",
          "head_sha": "241bdca83ca4e1940d56d3ac0c0f1c5c864abce2",
          "scope": "Updates the specifically reported mock-LLM automation fixture to match the Slack catalog identity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ck's catalog transport (`npx -y @zencoderai/slack-mcp-server`). \"Poll locally on your laptop\" therefore opens the Slack install dialog instead of a conversation, and the spec has failed on every `main` run since #18034 (#18083). The product behavior is correct; the fixture was stale.\n\n## Summary\n\n- The stand-in reads Slack's stdio command and args from `INTEGRATION_CATALOG` (`@openhands/extensions/integrations`), so it follows catalog changes.\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and s",
              "\n- `npm_config_offline: \"true\"` in its env keeps it inert. npx fails in about 0.3s with `ENOTCACHED` instead of downloading and starting the real server, just as `echo` failed MCP startup before.\n\n## Issue Number\n\nFixes #18083\n\n## How to Test\n\n`npx playwright test --config=playwright.mock-llm.config.ts tests/e2e/mock-llm/automations/mock-llm-preset-automation.spec.ts`, against the real Mock-LLM stack (`bin/agent-canvas.mjs` + agent-server 1.53.0 + automation 1.19.0):\n\n- `main`: `Expected pattern: /\\/conversations\\/.+/  Received string: \"/automations/templates\"`, the sam"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18087"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18087; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18088,
      "title": "[Bug]: Available Hooks dialog says \"Failed to fetch skills\" when the Agent Server is unreachable",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18088",
      "created_at": "2026-10-06T23:05:22Z",
      "updated_at": "2026-10-09T04:17:52Z",
      "state": "closed",
      "closed_at": "2026-10-09T04:17:52Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18098,
          "title": "fix: use hooks-specific fetch error message",
          "author": "nightcityblade",
          "author_url": "https://github.com/nightcityblade",
          "url": "https://github.com/OpenHands/OpenHands/pull/18098",
          "created_at": "2026-10-07T03:14:53Z",
          "updated_at": "2026-10-09T04:13:31Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T04:13:31Z",
          "head_sha": "5a115eda9220394b633c2e3c451be048c36cf47f",
          "scope": "Uses a hooks-specific fetch-error message in all supported locales.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "iled to fetch skills.\"\n\n## Summary\n\n- Add a hooks-specific fetch-error translation for all 15 supported locales.\n- Render that key in the hooks empty/error state and cover the exact English copy.\n\n## Issue Number\n\nFixes #18088\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\nnpm run check-translation-completeness\nnpm run typecheck\nnpm run build:app\n```\n\nAll commands pass locally. ESLint and Prettier also pass on the changed files.\n\n## Video/Screenshots\n\nBefore: the issue includes live screenshots of the Availa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18098"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18177,
          "title": "fix(hooks): use dedicated hooks fetch error message in available hooks dialog",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18177",
          "created_at": "2026-10-08T17:28:46Z",
          "updated_at": "2026-10-12T15:08:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:17:51Z",
          "closed_at": "2026-10-09T04:17:51Z",
          "head_sha": "5b31712ec5426173ab42b4680f62ec9add538689",
          "scope": "Uses a dedicated hooks fetch-error translation instead of the Skills error message.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ted `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` to assert that `HooksEmptyState` renders the hooks-specific fetch error and does not contain any mention of skills.\r\n\r\n## Issue Number\r\n\r\nFixes #18088\r\n\r\n## How to Test\r\n\r\nRun unit tests and verification scripts:\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\r\nnode scripts/check-translation-completeness.cjs\r\n```\r\n\r\nAll 21 tests pass, and translation key completeness is confirmed across all 15 locales.\r\n\r\n## Video/Screenshots\r\n\r\n<img width=\"800\" alt"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18177"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18098,
          "title": "fix: use hooks-specific fetch error message",
          "author": "nightcityblade",
          "author_url": "https://github.com/nightcityblade",
          "url": "https://github.com/OpenHands/OpenHands/pull/18098",
          "created_at": "2026-10-07T03:14:53Z",
          "updated_at": "2026-10-09T04:13:31Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T04:13:31Z",
          "head_sha": "5a115eda9220394b633c2e3c451be048c36cf47f",
          "scope": "Uses a hooks-specific fetch-error message in all supported locales.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "iled to fetch skills.\"\n\n## Summary\n\n- Add a hooks-specific fetch-error translation for all 15 supported locales.\n- Render that key in the hooks empty/error state and cover the exact English copy.\n\n## Issue Number\n\nFixes #18088\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\nnpm run check-translation-completeness\nnpm run typecheck\nnpm run build:app\n```\n\nAll commands pass locally. ESLint and Prettier also pass on the changed files.\n\n## Video/Screenshots\n\nBefore: the issue includes live screenshots of the Availa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18098"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18177,
          "title": "fix(hooks): use dedicated hooks fetch error message in available hooks dialog",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18177",
          "created_at": "2026-10-08T17:28:46Z",
          "updated_at": "2026-10-12T15:08:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:17:51Z",
          "closed_at": "2026-10-09T04:17:51Z",
          "head_sha": "5b31712ec5426173ab42b4680f62ec9add538689",
          "scope": "Uses a dedicated hooks fetch-error translation instead of the Skills error message.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ted `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` to assert that `HooksEmptyState` renders the hooks-specific fetch error and does not contain any mention of skills.\r\n\r\n## Issue Number\r\n\r\nFixes #18088\r\n\r\n## How to Test\r\n\r\nRun unit tests and verification scripts:\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\r\nnode scripts/check-translation-completeness.cjs\r\n```\r\n\r\nAll 21 tests pass, and translation key completeness is confirmed across all 15 locales.\r\n\r\n## Video/Screenshots\r\n\r\n<img width=\"800\" alt"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18177"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "-06/`:\n  - #18090: a duplicate plugin install (409) toasts `Plugin already installed. Use force=true to overwrite.`, which the form cannot act on.\n  - #18089: prompt- and agent-type hooks show an empty Commands box.\n  - #18088: with the Agent Server down, Refresh in the Hooks dialog shows `Failed to fetch skills`.\n- Also filed from older map rows: #18094, Escape does not close the composer `+` menu (F05), the status-dot menu (F07) or the drawer tabs menu (F08), which #18044 left out of its Escape fix. Those three rows now link it instead of the #17933 comment.\n- The scr"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " error-toast rows, `automation-run-display` to F03/F21/F23, `telemetry` to F16, `use-add-mcp-server` to F17, and `settings-input` to F10/F14/F19. The unmapped `settings-input.tsx` is now owned by F10. Closed since BASE: #18088, #18090, #18172. Also re-driven: automation#551, which closed before BASE but was still listed as a Known failure.\n\n### Live results (verify-openhands evidence ledgers; Local stacks, Agent Server 1.53.0, automation 1.19.0, Chromium, desktop 1440×1000 and phone 390×844)\n\n| Run | Scope | Checks | Pass | Fail | Blocked | Not-run |\n|---|---|---:|---:|",
              "links #18202; suggestion/macro prefill added as Known failure | fail reproduced (W1); #18202 open, fix PR #18203 open |\n| F07 Hooks fetch-error gotcha | expects `Failed to fetch hooks. Please try again later.` (#18177); #18088 removed | pass, desktop + phone, independently re-run |\n| F19 duplicate-install gotcha, F19.add-plugin-error, F19.page wait; F20 409 line | expects `This plugin is already installed. Open its card to Update or Uninstall it.` (#18110); #18090 removed | pass, desktop + phone, independently re-run |\n| F10.name-validation, F10.rename, F14 duplicate na"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18177,
          "title": "fix(hooks): use dedicated hooks fetch error message in available hooks dialog",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18177",
          "created_at": "2026-10-08T17:28:46Z",
          "updated_at": "2026-10-12T15:08:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:17:51Z",
          "closed_at": "2026-10-09T04:17:51Z",
          "head_sha": "5b31712ec5426173ab42b4680f62ec9add538689",
          "scope": "Uses a dedicated hooks fetch-error translation instead of the Skills error message.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ted `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` to assert that `HooksEmptyState` renders the hooks-specific fetch error and does not contain any mention of skills.\r\n\r\n## Issue Number\r\n\r\nFixes #18088\r\n\r\n## How to Test\r\n\r\nRun unit tests and verification scripts:\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\r\nnode scripts/check-translation-completeness.cjs\r\n```\r\n\r\nAll 21 tests pass, and translation key completeness is confirmed across all 15 locales.\r\n\r\n## Video/Screenshots\r\n\r\n<img width=\"800\" alt"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18177"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18177,
          "title": "fix(hooks): use dedicated hooks fetch error message in available hooks dialog",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18177",
          "created_at": "2026-10-08T17:28:46Z",
          "updated_at": "2026-10-12T15:08:41Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:17:51Z",
          "closed_at": "2026-10-09T04:17:51Z",
          "head_sha": "5b31712ec5426173ab42b4680f62ec9add538689",
          "scope": "Uses a dedicated hooks fetch-error translation instead of the Skills error message.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ted `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` to assert that `HooksEmptyState` renders the hooks-specific fetch error and does not contain any mention of skills.\r\n\r\n## Issue Number\r\n\r\nFixes #18088\r\n\r\n## How to Test\r\n\r\nRun unit tests and verification scripts:\r\n```bash\r\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\r\nnode scripts/check-translation-completeness.cjs\r\n```\r\n\r\nAll 21 tests pass, and translation key completeness is confirmed across all 15 locales.\r\n\r\n## Video/Screenshots\r\n\r\n<img width=\"800\" alt"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18177"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18098,
          "title": "fix: use hooks-specific fetch error message",
          "author": "nightcityblade",
          "author_url": "https://github.com/nightcityblade",
          "url": "https://github.com/OpenHands/OpenHands/pull/18098",
          "created_at": "2026-10-07T03:14:53Z",
          "updated_at": "2026-10-09T04:13:31Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T04:13:31Z",
          "head_sha": "5a115eda9220394b633c2e3c451be048c36cf47f",
          "scope": "Uses a hooks-specific fetch-error message in all supported locales.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "iled to fetch skills.\"\n\n## Summary\n\n- Add a hooks-specific fetch-error translation for all 15 supported locales.\n- Render that key in the hooks empty/error state and cover the exact English copy.\n\n## Issue Number\n\nFixes #18088\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx\nnpm run check-translation-completeness\nnpm run typecheck\nnpm run build:app\n```\n\nAll commands pass locally. ESLint and Prettier also pass on the changed files.\n\n## Video/Screenshots\n\nBefore: the issue includes live screenshots of the Availa"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18098"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18177; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18089,
      "title": "[Bug]: Available Hooks dialog shows an empty Commands box for prompt and agent hooks",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18089",
      "created_at": "2026-10-06T23:05:23Z",
      "updated_at": "2026-10-09T00:30:30Z",
      "state": "closed",
      "closed_at": "2026-10-09T00:30:30Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18107,
          "title": "fix(hooks): show prompt and agent hook text in the Available Hooks dialog",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18107",
          "created_at": "2026-10-07T05:04:49Z",
          "updated_at": "2026-10-12T15:08:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:30:29Z",
          "closed_at": "2026-10-09T00:30:29Z",
          "head_sha": "4e0cf98e8d1c476fcfcc64e04f4da19fbb065938",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " dialog types, normalizing `null` to `undefined`.\n- UI: hook rows render `command || prompt || system_prompt` and omit the box when a hook has no text; existing pills and command hooks unchanged.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\n1. `npm run dev`, open a conversation whose agent has a prompt hook (or an agent hook) configured, and open **Available Hooks** — the row shows the hook's text instead of an empty box; command hooks render exactly as before.\n2. Automated: `npx vitest run __tests__/api/agent-server-adapter.test.ts __tests__/components/features/conv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18107"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18150,
          "title": "fix(hooks): display prompt and system_prompt in available hooks modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18150",
          "created_at": "2026-10-08T11:13:07Z",
          "updated_at": "2026-10-09T00:35:27Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T00:35:07Z",
          "head_sha": "7a93c4269c68950596626bbdb31cf34f9ad34d24",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fines no command, prompt, or system prompt.\n- Added unit test coverage in `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` and `__tests__/api/agent-server-adapter.test.ts`.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx __tests__/api/agent-server-adapter.test.ts\n```\n\nAll 131 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"available-hooks-prompt-agent-display\" src=\"https://github.com/user-attachments/assets/b2d9"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18150"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18107,
          "title": "fix(hooks): show prompt and agent hook text in the Available Hooks dialog",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18107",
          "created_at": "2026-10-07T05:04:49Z",
          "updated_at": "2026-10-12T15:08:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:30:29Z",
          "closed_at": "2026-10-09T00:30:29Z",
          "head_sha": "4e0cf98e8d1c476fcfcc64e04f4da19fbb065938",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " dialog types, normalizing `null` to `undefined`.\n- UI: hook rows render `command || prompt || system_prompt` and omit the box when a hook has no text; existing pills and command hooks unchanged.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\n1. `npm run dev`, open a conversation whose agent has a prompt hook (or an agent hook) configured, and open **Available Hooks** — the row shows the hook's text instead of an empty box; command hooks render exactly as before.\n2. Automated: `npx vitest run __tests__/api/agent-server-adapter.test.ts __tests__/components/features/conv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18107"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18150,
          "title": "fix(hooks): display prompt and system_prompt in available hooks modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18150",
          "created_at": "2026-10-08T11:13:07Z",
          "updated_at": "2026-10-09T00:35:27Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T00:35:07Z",
          "head_sha": "7a93c4269c68950596626bbdb31cf34f9ad34d24",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fines no command, prompt, or system prompt.\n- Added unit test coverage in `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` and `__tests__/api/agent-server-adapter.test.ts`.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx __tests__/api/agent-server-adapter.test.ts\n```\n\nAll 131 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"available-hooks-prompt-agent-display\" src=\"https://github.com/user-attachments/assets/b2d9"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18150"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "listed](``https://raw.githubusercontent.com/OpenHands/OpenHands/67b6f71987aa814671f8ea552dd0a346580b342a/.pr/map-maintenance/2026-10-06/F07.hooks-modal-workspace-hooks.png)``\n\n**F07.hooks-modal**, Known failure filed as #18089: prompt and agent hooks show an empty Commands box:\n![F07 prompt and agent hooks empty](``https://raw.githubusercontent.com/OpenHands/OpenHands/67b6f71987aa814671f8ea552dd0a346580b342a/.pr/map-maintenance/2026-10-06/F07.hooks-modal-prompt-agent-empty.png)``\n\n**F19.add-plugin-error**: one toast with the server's reason (#18025):\n![F19 add plugin er",
              "ected + Known failure). Their screenshots are under `.pr/bugs/2026-10-06/`:\n  - #18090: a duplicate plugin install (409) toasts `Plugin already installed. Use force=true to overwrite.`, which the form cannot act on.\n  - #18089: prompt- and agent-type hooks show an empty Commands box.\n  - #18088: with the Agent Server down, Refresh in the Hooks dialog shows `Failed to fetch skills`.\n- Also filed from older map rows: #18094, Escape does not close the composer `+` menu (F05), the status-dot menu (F07) or the drawer tabs menu (F08), which #18044 left out of its Escape fix. "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18207,
          "title": "docs(verify-openhands): map the Available Hooks text fix from #18107",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18207",
          "created_at": "2026-10-09T00:53:12Z",
          "updated_at": "2026-10-12T15:08:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T02:40:31Z",
          "closed_at": "2026-10-09T02:40:31Z",
          "head_sha": "c5fe25e1dbd4777d508ca3c5264cf89bd94a47c8",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ude Code) to update the feature map after merging #18107.\n\n---\n\nAGENT:\n\nI'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project work.\n\nThis updates the verify-openhands feature map for #18107, which fixed #18089 (the Available Hooks dialog showed an empty Commands box for prompt and agent hooks). It is a targeted update for one merged fix, not a maintenance pass, so the `Maintenance baseline` line stays where it is.\n\n## Why\n\nF07 still described #18089 as a Known failure, so the next run of that recipe would report the fixed behavior as a mismatch. #18107 ",
              "oks dialog showed an empty Commands box for prompt and agent hooks). It is a targeted update for one merged fix, not a maintenance pass, so the `Maintenance baseline` line stays where it is.\n\n## Why\n\nF07 still described #18089 as a Known failure, so the next run of that recipe would report the fixed behavior as a mismatch. #18107 also left one gap, filed as #18206, which the map should record.\n\n## Summary\n\n- `F07-conversation-page.md`: the #18089 row now expects the fix. Prompt and agent hooks show their text under Commands, and an agent hook without `system_prompt` sho",
              "89 as a Known failure, so the next run of that recipe would report the fixed behavior as a mismatch. #18107 also left one gap, filed as #18206, which the map should record.\n\n## Summary\n\n- `F07-conversation-page.md`: the #18089 row now expects the fix. Prompt and agent hooks show their text under Commands, and an agent hook without `system_prompt` shows no box. The recipe starts from a reopened dialog, because an event expanded before a Refresh stays expanded and a second click collapses it.\n- A new row records #18206 as a Known failure (reproduced 2026-10-09): an agent ",
              "18206 as a Known failure (reproduced 2026-10-09): an agent hook that also carries a `prompt` shows that prompt instead of the `system_prompt` it runs with.\n- Evidence under `.pr/map-hooks-18107/`.\n\n## Issue Number\n\nRefs #18089 (fixed by #18107) and #18206 (the new known failure). The feature map's issue is #17568.\n\n## How to Test\n\nLive, on a fresh stack built from main `91fcf4372d` (Agent Server 1.53.0, `deepseek/deepseek-flash` for the conversation), with this branch's verify-openhands CLI:\n\n```sh\ncontrol-openhands launch --new --build auto\ncontrol-openhands doctor\ncon",
              "-agent-hook-prompt-18206.png)\n\n## Design Doc\n\nNot needed: two rows in one map file.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [ ] Refactor\n- [ ] Breaking change\n- [x] Docs / chore\n\n## Notes\n\n- Only this F07 row referenced #18089.\n- #18183, the open daily maintenance PR, does not touch these rows. If this merges first, the next daily pass finds the row already updated.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFGTT\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_01HmGfBq3KDFiJTDraPJFG"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18207"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18215,
          "title": "fix(hooks): pick the Available Hooks text by hook type",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18215",
          "created_at": "2026-10-09T03:26:34Z",
          "updated_at": "2026-10-12T15:07:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "closed_at": "2026-10-11T02:36:48Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Fixes the separate agent-hook field-selection regression in #18206.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "tion header, and expand both events. The first row shows its `system_prompt`; the second shows no text box while its `Type`/`Timeout` pills stay. Prompt hooks still show their `prompt` and command hooks their `command` (#18089's criteria still hold).\n2. Automated: `npx vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx` — green (27).\n\n## Video/Screenshots\n\nAvailable Hooks dialog from a local mock run, with the **Session Start** (agent hook with both fields) and **Stop** (agent hook with only `prompt`) rows expanded.\n\nBefore — the Session St",
              "pills:\n\n![After: each agent hook row shows the field it runs with](https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18206/after.png)\n\n## Type\n\n- [x] Bug fix\n\n## Notes\n\n#18150, the other open PR for #18089, carries the same first-non-empty-field selection and will need the same type-based choice if it lands first. No hook wire-contract, Agent Server or SDK change.\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18215"
            ]
          },
          "direct_closer": false,
          "reason": "The references to #18089 say its earlier criteria still hold and identify another PR; they are follow-up context, not a new implementation of the original empty-text issue."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18107,
          "title": "fix(hooks): show prompt and agent hook text in the Available Hooks dialog",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18107",
          "created_at": "2026-10-07T05:04:49Z",
          "updated_at": "2026-10-12T15:08:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:30:29Z",
          "closed_at": "2026-10-09T00:30:29Z",
          "head_sha": "4e0cf98e8d1c476fcfcc64e04f4da19fbb065938",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " dialog types, normalizing `null` to `undefined`.\n- UI: hook rows render `command || prompt || system_prompt` and omit the box when a hook has no text; existing pills and command hooks unchanged.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\n1. `npm run dev`, open a conversation whose agent has a prompt hook (or an agent hook) configured, and open **Available Hooks** — the row shows the hook's text instead of an empty box; command hooks render exactly as before.\n2. Automated: `npx vitest run __tests__/api/agent-server-adapter.test.ts __tests__/components/features/conv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18107"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18107,
          "title": "fix(hooks): show prompt and agent hook text in the Available Hooks dialog",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18107",
          "created_at": "2026-10-07T05:04:49Z",
          "updated_at": "2026-10-12T15:08:53Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:30:29Z",
          "closed_at": "2026-10-09T00:30:29Z",
          "head_sha": "4e0cf98e8d1c476fcfcc64e04f4da19fbb065938",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " dialog types, normalizing `null` to `undefined`.\n- UI: hook rows render `command || prompt || system_prompt` and omit the box when a hook has no text; existing pills and command hooks unchanged.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\n1. `npm run dev`, open a conversation whose agent has a prompt hook (or an agent hook) configured, and open **Available Hooks** — the row shows the hook's text instead of an empty box; command hooks render exactly as before.\n2. Automated: `npx vitest run __tests__/api/agent-server-adapter.test.ts __tests__/components/features/conv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18107"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18150,
          "title": "fix(hooks): display prompt and system_prompt in available hooks modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18150",
          "created_at": "2026-10-08T11:13:07Z",
          "updated_at": "2026-10-09T00:35:27Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T00:35:07Z",
          "head_sha": "7a93c4269c68950596626bbdb31cf34f9ad34d24",
          "scope": "Carries prompt/system_prompt hook fields through the adapter and displays hook text instead of an empty Commands box.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "fines no command, prompt, or system prompt.\n- Added unit test coverage in `__tests__/components/features/conversation-panel/hooks-modal.test.tsx` and `__tests__/api/agent-server-adapter.test.ts`.\n\n## Issue Number\n\nFixes #18089\n\n## How to Test\n\nRun the unit tests:\n```bash\n./node_modules/.bin/vitest run __tests__/components/features/conversation-panel/hooks-modal.test.tsx __tests__/api/agent-server-adapter.test.ts\n```\n\nAll 131 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"available-hooks-prompt-agent-display\" src=\"https://github.com/user-attachments/assets/b2d9"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18150"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18107; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18090,
      "title": "[Bug]: Duplicate plugin install shows the API hint \"Use force=true to overwrite.\" instead of pointing to Update or Uninstall",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18090",
      "created_at": "2026-10-06T23:05:24Z",
      "updated_at": "2026-10-09T04:11:59Z",
      "state": "closed",
      "closed_at": "2026-10-09T04:11:59Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18110,
          "title": "fix(plugins): point duplicate-install toast at Update or Uninstall",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18110",
          "created_at": "2026-10-07T05:32:59Z",
          "updated_at": "2026-10-12T15:08:43Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:11:58Z",
          "closed_at": "2026-10-09T04:11:58Z",
          "head_sha": "1fa19ab6ef64678aefe2ebc41cabcc23d46b59cb",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "# Summary\n\n- `useInstallPlugin` maps 409 to a localized message pointing at Update/Uninstall; other errors unchanged.\n- New translation key added across all 15 locales; completeness check passes.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\n1. `npm run dev`, open Settings → Plugins, and install a plugin.\n2. Attempt to add the same plugin again — the toast reads the new message pointing to Update or Uninstall, instead of the server's `force=true` hint.\n3. Automated: `npx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts` — green.\n\n## Video/Screenshots\n\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18110"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18171,
          "title": "fix(plugins): map duplicate install 409 to already installed toast",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18171",
          "created_at": "2026-10-08T16:50:58Z",
          "updated_at": "2026-10-12T07:12:02Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "302c82229b6bcc7f9c0e5e2987e9c8af38fbe30e",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or other error statuses.\n- Added comprehensive unit test in `__tests__/hooks/mutation/use-plugin-mutations.test.ts` asserting that 409 responses trigger the new localized already-installed toast.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\nRun unit tests and verification scripts:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts\nnode scripts/check-translation-completeness.cjs\n```\n\nAll 8 tests pass, and translation key completeness is confirmed across all 15 locales.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"duplicate-plugin-install-toas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18171"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18110,
          "title": "fix(plugins): point duplicate-install toast at Update or Uninstall",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18110",
          "created_at": "2026-10-07T05:32:59Z",
          "updated_at": "2026-10-12T15:08:43Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:11:58Z",
          "closed_at": "2026-10-09T04:11:58Z",
          "head_sha": "1fa19ab6ef64678aefe2ebc41cabcc23d46b59cb",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "# Summary\n\n- `useInstallPlugin` maps 409 to a localized message pointing at Update/Uninstall; other errors unchanged.\n- New translation key added across all 15 locales; completeness check passes.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\n1. `npm run dev`, open Settings → Plugins, and install a plugin.\n2. Attempt to add the same plugin again — the toast reads the new message pointing to Update or Uninstall, instead of the server's `force=true` hint.\n3. Automated: `npx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts` — green.\n\n## Video/Screenshots\n\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18110"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18171,
          "title": "fix(plugins): map duplicate install 409 to already installed toast",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18171",
          "created_at": "2026-10-08T16:50:58Z",
          "updated_at": "2026-10-12T07:12:02Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "302c82229b6bcc7f9c0e5e2987e9c8af38fbe30e",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or other error statuses.\n- Added comprehensive unit test in `__tests__/hooks/mutation/use-plugin-mutations.test.ts` asserting that 409 responses trigger the new localized already-installed toast.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\nRun unit tests and verification scripts:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts\nnode scripts/check-translation-completeness.cjs\n```\n\nAll 8 tests pass, and translation key completeness is confirmed across all 15 locales.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"duplicate-plugin-install-toas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18171"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " duplicate App install points to Update or Uninstall. Still broken, kept as Known failures: the catalog-source rewrite (OpenHands/software-agent-sdk#5496, narrowed) and the duplicate plugin install's `force=true` toast (#18090).\n- **#18031** (#17924), F07: the Available Hooks dialog lists the workspace's `hooks.json` (read on first open and on Refresh, then cached for 5 minutes).\n- **#18039** (#17950), F24: the Git Sync card hides repository credentials, and the switch's help text is current.\n- **#18041** (#17952), F23: Repositories and Plugins render from `preset_metad",
              "ocal source](``https://raw.githubusercontent.com/OpenHands/OpenHands/67b6f71987aa814671f8ea552dd0a346580b342a/.pr/map-maintenance/2026-10-06/F19.refresh-local-source-error.png)``\n\n**F19 Gotchas**, Known failure filed as #18090: a duplicate plugin install toasts `Use force=true to overwrite.`:\n![F19 duplicate plugin 409](``https://raw.githubusercontent.com/OpenHands/OpenHands/67b6f71987aa814671f8ea552dd0a346580b342a/.pr/map-maintenance/2026-10-06/F19.add-plugin-error-duplicate-409.png)``\n\n**F20.install-error**: an unreachable Git source shows the server's 400 detail:\n![F",
              " ] Breaking change\n- [x] Docs / chore\n\n## Notes\n\n- Bugs found in this pass, now filed and linked from their map rows (each is written as Expected + Known failure). Their screenshots are under `.pr/bugs/2026-10-06/`:\n  - #18090: a duplicate plugin install (409) toasts `Plugin already installed. Use force=true to overwrite.`, which the form cannot act on.\n  - #18089: prompt- and agent-type hooks show an empty Commands box.\n  - #18088: with the Agent Server down, Refresh in the Hooks dialog shows `Failed to fetch skills`.\n- Also filed from older map rows: #18094, Escape do"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "oast rows, `automation-run-display` to F03/F21/F23, `telemetry` to F16, `use-add-mcp-server` to F17, and `settings-input` to F10/F14/F19. The unmapped `settings-input.tsx` is now owned by F10. Closed since BASE: #18088, #18090, #18172. Also re-driven: automation#551, which closed before BASE but was still listed as a Known failure.\n\n### Live results (verify-openhands evidence ledgers; Local stacks, Agent Server 1.53.0, automation 1.19.0, Chromium, desktop 1440×1000 and phone 390×844)\n\n| Run | Scope | Checks | Pass | Fail | Blocked | Not-run |\n|---|---|---:|---:|---:|---",
              " desktop + phone, independently re-run |\n| F19 duplicate-install gotcha, F19.add-plugin-error, F19.page wait; F20 409 line | expects `This plugin is already installed. Open its card to Update or Uninstall it.` (#18110); #18090 removed | pass, desktop + phone, independently re-run |\n| F10.name-validation, F10.rename, F14 duplicate name, F13.name-validation | danger colour (`text-danger`, rgb(231,106,94) Neutral / #D13438 Light+) instead of `text-red-400` (#18199) | pass, both themes, desktop + phone |\n| F13 intro, F13.openhands-options, gotchas | System prompt + Tools (S"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18110,
          "title": "fix(plugins): point duplicate-install toast at Update or Uninstall",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18110",
          "created_at": "2026-10-07T05:32:59Z",
          "updated_at": "2026-10-12T15:08:43Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:11:58Z",
          "closed_at": "2026-10-09T04:11:58Z",
          "head_sha": "1fa19ab6ef64678aefe2ebc41cabcc23d46b59cb",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "# Summary\n\n- `useInstallPlugin` maps 409 to a localized message pointing at Update/Uninstall; other errors unchanged.\n- New translation key added across all 15 locales; completeness check passes.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\n1. `npm run dev`, open Settings → Plugins, and install a plugin.\n2. Attempt to add the same plugin again — the toast reads the new message pointing to Update or Uninstall, instead of the server's `force=true` hint.\n3. Automated: `npx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts` — green.\n\n## Video/Screenshots\n\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18110"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18171,
          "title": "fix(plugins): map duplicate install 409 to already installed toast",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18171",
          "created_at": "2026-10-08T16:50:58Z",
          "updated_at": "2026-10-12T07:12:02Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "302c82229b6bcc7f9c0e5e2987e9c8af38fbe30e",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or other error statuses.\n- Added comprehensive unit test in `__tests__/hooks/mutation/use-plugin-mutations.test.ts` asserting that 409 responses trigger the new localized already-installed toast.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\nRun unit tests and verification scripts:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts\nnode scripts/check-translation-completeness.cjs\n```\n\nAll 8 tests pass, and translation key completeness is confirmed across all 15 locales.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"duplicate-plugin-install-toas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18171"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18110,
          "title": "fix(plugins): point duplicate-install toast at Update or Uninstall",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18110",
          "created_at": "2026-10-07T05:32:59Z",
          "updated_at": "2026-10-12T15:08:43Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:11:58Z",
          "closed_at": "2026-10-09T04:11:58Z",
          "head_sha": "1fa19ab6ef64678aefe2ebc41cabcc23d46b59cb",
          "scope": "Replaces duplicate plugin-install 409 API hints with localized Update or Uninstall guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "# Summary\n\n- `useInstallPlugin` maps 409 to a localized message pointing at Update/Uninstall; other errors unchanged.\n- New translation key added across all 15 locales; completeness check passes.\n\n## Issue Number\n\nFixes #18090\n\n## How to Test\n\n1. `npm run dev`, open Settings → Plugins, and install a plugin.\n2. Attempt to add the same plugin again — the toast reads the new message pointing to Update or Uninstall, instead of the server's `force=true` hint.\n3. Automated: `npx vitest run __tests__/hooks/mutation/use-plugin-mutations.test.ts` — green.\n\n## Video/Screenshots\n\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18110"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18110; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18091,
      "title": "[Feature]: verify-openhands: daily-pass support (map affected, E2E lines, evidence baseline) and CLI fixes",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18091",
      "created_at": "2026-10-06T23:23:22Z",
      "updated_at": "2026-10-07T02:24:43Z",
      "state": "closed",
      "closed_at": "2026-10-07T02:24:43Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18093,
          "title": "feat(verify-openhands): daily pass support and CLI fixes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18093",
          "created_at": "2026-10-06T23:24:38Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "closed_at": "2026-10-07T02:24:41Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Implements daily-pass map/evidence support and the CLI fixes requested by this harness feature issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " proposes a new baseline; blocked, partial and unchanged passes keep it. The skill and related references follow this procedure. F02's source typo is fixed, and F18/F26 source lists are extended.\n\n## Issue Number\n\nFixes #18091. Follow-up tracking for the drift candidates and unmapped behaviors the e2e inventory surfaced: #18092.\n\n## How to Test\n\nVerified against head `95115e84f6dd02b4fde37df195a3e7bf09e0a407` in an isolated checkout.\n\nUnit tests: 11 added, 36 total. Reran with Node 25.9.0 and the existing local Vitest 4.1.10 installation; the launcher tests require perm"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18093"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18093,
          "title": "feat(verify-openhands): daily pass support and CLI fixes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18093",
          "created_at": "2026-10-06T23:24:38Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "closed_at": "2026-10-07T02:24:41Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Implements daily-pass map/evidence support and the CLI fixes requested by this harness feature issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " proposes a new baseline; blocked, partial and unchanged passes keep it. The skill and related references follow this procedure. F02's source typo is fixed, and F18/F26 source lists are extended.\n\n## Issue Number\n\nFixes #18091. Follow-up tracking for the drift candidates and unmapped behaviors the e2e inventory surfaced: #18092.\n\n## How to Test\n\nVerified against head `95115e84f6dd02b4fde37df195a3e7bf09e0a407` in an isolated checkout.\n\nUnit tests: 11 added, 36 total. Reran with Node 25.9.0 and the existing local Vitest 4.1.10 installation; the launcher tests require perm"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18093"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18093,
          "title": "feat(verify-openhands): daily pass support and CLI fixes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18093",
          "created_at": "2026-10-06T23:24:38Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "closed_at": "2026-10-07T02:24:41Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Implements daily-pass map/evidence support and the CLI fixes requested by this harness feature issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " proposes a new baseline; blocked, partial and unchanged passes keep it. The skill and related references follow this procedure. F02's source typo is fixed, and F18/F26 source lists are extended.\n\n## Issue Number\n\nFixes #18091. Follow-up tracking for the drift candidates and unmapped behaviors the e2e inventory surfaced: #18092.\n\n## How to Test\n\nVerified against head `95115e84f6dd02b4fde37df195a3e7bf09e0a407` in an isolated checkout.\n\nUnit tests: 11 added, 36 total. Reran with Node 25.9.0 and the existing local Vitest 4.1.10 installation; the launcher tests require perm"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18093"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18093,
          "title": "feat(verify-openhands): daily pass support and CLI fixes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18093",
          "created_at": "2026-10-06T23:24:38Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "closed_at": "2026-10-07T02:24:41Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Implements daily-pass map/evidence support and the CLI fixes requested by this harness feature issue.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " proposes a new baseline; blocked, partial and unchanged passes keep it. The skill and related references follow this procedure. F02's source typo is fixed, and F18/F26 source lists are extended.\n\n## Issue Number\n\nFixes #18091. Follow-up tracking for the drift candidates and unmapped behaviors the e2e inventory surfaced: #18092.\n\n## How to Test\n\nVerified against head `95115e84f6dd02b4fde37df195a3e7bf09e0a407` in an isolated checkout.\n\nUnit tests: 11 added, 36 total. Reran with Node 25.9.0 and the existing local Vitest 4.1.10 installation; the launcher tests require perm"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18093"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18093; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18092,
      "title": "[Feature]: verify-openhands feature map: drift candidates and unmapped behaviors surfaced by the e2e suites",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18092",
      "created_at": "2026-10-06T23:23:23Z",
      "updated_at": "2026-10-09T04:25:24Z",
      "state": "closed",
      "closed_at": "2026-10-09T04:25:24Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18105,
          "title": "feat(verify-openhands): map 20 more behaviors, with live recipes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18105",
          "created_at": "2026-10-07T04:58:49Z",
          "updated_at": "2026-10-08T20:37:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T10:37:59Z",
          "closed_at": "2026-10-07T10:37:59Z",
          "head_sha": "f2b0796635af62769ebfb69ec15a7ff4995007d9",
          "scope": "Adds 20 previously unmapped behavior recipes and resolves drift candidates 3, 4, 8 and 9; other candidates remain open.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "lping Engel Nyst (@enyst) with project maintenance; Engel asked me to post.)\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. This is the follow-up to #18093 that #18092 tracked: the behaviors the Playwright suites under `tests/e2e/` assert and the feature map had no row for, driven live and written into the map.\r\n\r\n## Why\r\n\r\nThe e2e suites assert many user-visible behaviors (a failed send that keeps its Retry row, a project skill that fires in a worktree conversation, a Basic-view save that keeps a hidden Base UR",
              "ight's error and a failure screenshot. `fixture git-repo --remote` sets or updates `origin` on a repo that already exists and reports `remoteChanged`, instead of silently ignoring the flag.\r\n\r\n## Issue Number\r\n\r\nPart of #18092: this PR covers its \"behaviors the suites assert that the map lacks\" list and drift candidates 3, 4, 8 and 9. What remains open there (the ACP fixture, the critic key, the composer git rail decision) is summarized in a comment on the issue.\r\n\r\n## How to Test\r\n\r\nUnit tests:\r\n\r\n```sh\r\nnpx vitest run .agents/skills/verify-openhands\r\n#  Test Files  1 ",
              "EEPSEEK_API_KEY`), `F06.critic-result` (a Cloud critic key), `F10.cloud-provider-pagination` (a Cloud organization backend).\r\n- Product-bug candidates the drives surfaced are not written into the map; they are listed on #18092 for a repro: the first-activation `ids=` request to a newly added backend (hit once in two tries, after a failed Connect in the same modal), generic `An error occurred` toasts on the frontend-only recovery gate, and three MCP wording and timing nits.\r\n- Harness gaps noted for a later CLI change, each worked around in the recipes: `browser scroll` ",
              "51c63eed55ee30593674a12 -->\n<!-- openhands-ai-triage:end -->\n\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Status after the live pass that https://github.com/OpenHands/OpenHands/pull/18105 carries.\n\n**Mapped, with recipes driven live** (every item of the \"behaviors the suites assert that the map lacks\" list): `F01.api-key-entry` (no-toast check), `F05.image-only-send`, `F05.profile-identity`, `F06.clock-skew-send`, `F06.fail"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18105"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Implements tracked harness gaps, re-drives affected recipes and records or files the issue’s product-bug candidates.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Engel asked for the harness gaps the e2e-behavior drives (#18105) left behind to be closed in one CLI PR, and for the product-bug candidates listed on #18092 to be reproduced and filed where they hold.\n\n## Why\n\nEach gap was worked around inside a map recipe because `control-openhands` could not express it: a loading row too quick to count, a request body a recipe had to prove through a shell-gated fixture, a second tab that `wait-tab` confused with the current one, an event list capped at the newest hu",
              " encrypted values on Test connection, no `env` at all in Save's sparse patch); Known-failure rows link the three defects filed below; the two candidates that did not reproduce carry a dated note.\n\n## Bug candidates from #18092, reproduced on fresh stacks\n\nEach candidate was driven at least twice on an isolated stack of `main` @ d2c89252d, with the code path and history read before deciding.\n\n| Candidate | Verdict | Where |\n|---|---|---|\n| Recovery gate shows two generic \"An error occurred\" toasts when the stored backend answers 503 | confirmed 2/2, regression from #1668",
              " F25 Gotcha |\n| A stdio MCP server that exits before the handshake is reported either at once or only at the deadline | not reproduced: 21 of 21 answered at once | the F17 Gotcha now says so |\n\n\n## Issue Number\n\nPart of #18092 (the harness gaps and product-bug candidates listed there).\n\n## How to Test\n\nUnit tests (6 new, 43 total):\n\n```sh\nnpx vitest run .agents/skills/verify-openhands\n#  Test Files  1 passed (1)\n#       Tests  43 passed (43)\n```\n\nLive, on an isolated run of this checkout (Node 24, `uvx`, Chromium via `CONTROL_OPENHANDS_BROWSER`; agent-server 1.53.0, aut",
              "I agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Follow-up on the two lists above, done on 2026-10-08 at `main` @ d2c89252d.\n\n**Harness gaps: closed in https://github.com/OpenHands/OpenHands/pull/18162.** `browser scroll --observe`, `browser network --bodies` (credentials redacted, the `**********` placeholder kept), `browser tab new` and `wait-tab --new`, `conversation events` paging with `images: N` and `--kinds`/`--grep` before `--las"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Makes partial verification-map and recipe corrections under the issue’s own acceptance checklist; it explicitly leaves the drift/unmapped inventory incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ations stay under verify-openhands and reviewed `.pr/` evidence.\r\n- Keep historical and fresh outcomes separate. No Canvas/SDK/automation product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every",
              " product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13",
              "er\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13/F22/F25/F26 candidates are not all complete.\r\n- [ ] Original: give ever"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18191,
          "title": "feat(verify-openhands): drive the mock-LLM e2e behaviors on DeepSeek and map the gaps",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18191",
          "created_at": "2026-10-08T21:01:22Z",
          "updated_at": "2026-10-12T15:08:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T23:59:55Z",
          "closed_at": "2026-10-08T23:59:55Z",
          "head_sha": "52bfe3bb676e365c8c76964b307104d3ba33dfe7",
          "scope": "Adds and corrects map recipes for real-model behaviors the e2e suites asserted but the map lacked; it does not close the whole tracker.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " was deleted, and `/standup-digest:setup`. It read the run directory and other files on the host. Those conversations were paused.\r\n\r\n## Issue Number\r\n\r\nPart of #17872 (status of each failing test with a real model) and #18092 (behaviors the suites assert that the map lacked). No product code changed.\r\n\r\n## How to Test\r\n\r\nStatic checks:\r\n\r\n```sh\r\nexport PATH=\"$PWD/.agents/skills/verify-openhands/scripts:$PATH\"\r\ncontrol-openhands map check      # {\"ok\":true,\"files\":27,\"ids\":740,\"checked\":\"all\",\"problems\":[]}\r\ncontrol-openhands map testids    # {\"ok\":true,\"cited\":1003,\"un"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18191"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18213,
          "title": "docs: record 2026-10-09 verify-openhands sweep",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18213",
          "created_at": "2026-10-09T02:08:48Z",
          "updated_at": "2026-10-11T21:50:56Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T21:50:56Z",
          "head_sha": "4b2f3b0597951ac5902fd568ed65ba960f92f2d9",
          "scope": "Proposes partial corrections to the verification map after a full-sweep attempt and records the results; it is related implementation for this map-maintenance tracker, not a complete fix.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ipping claim to the observed visual failure; and link the newly filed composer, provider-menu, and no-manifest Home bugs and their fix PRs (#18203, #18205, #18212) from the relevant recipes.\n\n## Issue Number\n\nRelated to #18092\n\n## How to Test\n\n1. Read the dated report and compare its per-family counts with the stopped runs' retained evidence ledgers. The report distinguishes live pass, fail, blocked, and not-run IDs; it does not count a rendered route or an unattempted recipe as a pass.\n2. `control-openhands map check`, `map coverage`, `map testids`, and `map routes` — "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18213"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18105,
          "title": "feat(verify-openhands): map 20 more behaviors, with live recipes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18105",
          "created_at": "2026-10-07T04:58:49Z",
          "updated_at": "2026-10-08T20:37:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T10:37:59Z",
          "closed_at": "2026-10-07T10:37:59Z",
          "head_sha": "f2b0796635af62769ebfb69ec15a7ff4995007d9",
          "scope": "Adds 20 previously unmapped behavior recipes and resolves drift candidates 3, 4, 8 and 9; other candidates remain open.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "lping Engel Nyst (@enyst) with project maintenance; Engel asked me to post.)\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. This is the follow-up to #18093 that #18092 tracked: the behaviors the Playwright suites under `tests/e2e/` assert and the feature map had no row for, driven live and written into the map.\r\n\r\n## Why\r\n\r\nThe e2e suites assert many user-visible behaviors (a failed send that keeps its Retry row, a project skill that fires in a worktree conversation, a Basic-view save that keeps a hidden Base UR",
              "ight's error and a failure screenshot. `fixture git-repo --remote` sets or updates `origin` on a repo that already exists and reports `remoteChanged`, instead of silently ignoring the flag.\r\n\r\n## Issue Number\r\n\r\nPart of #18092: this PR covers its \"behaviors the suites assert that the map lacks\" list and drift candidates 3, 4, 8 and 9. What remains open there (the ACP fixture, the critic key, the composer git rail decision) is summarized in a comment on the issue.\r\n\r\n## How to Test\r\n\r\nUnit tests:\r\n\r\n```sh\r\nnpx vitest run .agents/skills/verify-openhands\r\n#  Test Files  1 ",
              "EEPSEEK_API_KEY`), `F06.critic-result` (a Cloud critic key), `F10.cloud-provider-pagination` (a Cloud organization backend).\r\n- Product-bug candidates the drives surfaced are not written into the map; they are listed on #18092 for a repro: the first-activation `ids=` request to a newly added backend (hit once in two tries, after a failed Connect in the same modal), generic `An error occurred` toasts on the frontend-only recovery gate, and three MCP wording and timing nits.\r\n- Harness gaps noted for a later CLI change, each worked around in the recipes: `browser scroll` ",
              "51c63eed55ee30593674a12 -->\n<!-- openhands-ai-triage:end -->\n\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Status after the live pass that https://github.com/OpenHands/OpenHands/pull/18105 carries.\n\n**Mapped, with recipes driven live** (every item of the \"behaviors the suites assert that the map lacks\" list): `F01.api-key-entry` (no-toast check), `F05.image-only-send`, `F05.profile-identity`, `F06.clock-skew-send`, `F06.fail"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18105"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Implements tracked harness gaps, re-drives affected recipes and records or files the issue’s product-bug candidates.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Engel asked for the harness gaps the e2e-behavior drives (#18105) left behind to be closed in one CLI PR, and for the product-bug candidates listed on #18092 to be reproduced and filed where they hold.\n\n## Why\n\nEach gap was worked around inside a map recipe because `control-openhands` could not express it: a loading row too quick to count, a request body a recipe had to prove through a shell-gated fixture, a second tab that `wait-tab` confused with the current one, an event list capped at the newest hu",
              " encrypted values on Test connection, no `env` at all in Save's sparse patch); Known-failure rows link the three defects filed below; the two candidates that did not reproduce carry a dated note.\n\n## Bug candidates from #18092, reproduced on fresh stacks\n\nEach candidate was driven at least twice on an isolated stack of `main` @ d2c89252d, with the code path and history read before deciding.\n\n| Candidate | Verdict | Where |\n|---|---|---|\n| Recovery gate shows two generic \"An error occurred\" toasts when the stored backend answers 503 | confirmed 2/2, regression from #1668",
              " F25 Gotcha |\n| A stdio MCP server that exits before the handshake is reported either at once or only at the deadline | not reproduced: 21 of 21 answered at once | the F17 Gotcha now says so |\n\n\n## Issue Number\n\nPart of #18092 (the harness gaps and product-bug candidates listed there).\n\n## How to Test\n\nUnit tests (6 new, 43 total):\n\n```sh\nnpx vitest run .agents/skills/verify-openhands\n#  Test Files  1 passed (1)\n#       Tests  43 passed (43)\n```\n\nLive, on an isolated run of this checkout (Node 24, `uvx`, Chromium via `CONTROL_OPENHANDS_BROWSER`; agent-server 1.53.0, aut",
              "I agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Follow-up on the two lists above, done on 2026-10-08 at `main` @ d2c89252d.\n\n**Harness gaps: closed in https://github.com/OpenHands/OpenHands/pull/18162.** `browser scroll --observe`, `browser network --bodies` (credentials redacted, the `**********` placeholder kept), `browser tab new` and `wait-tab --new`, `conversation events` paging with `images: N` and `--kinds`/`--grep` before `--las"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Makes partial verification-map and recipe corrections under the issue’s own acceptance checklist; it explicitly leaves the drift/unmapped inventory incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ations stay under verify-openhands and reviewed `.pr/` evidence.\r\n- Keep historical and fresh outcomes separate. No Canvas/SDK/automation product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every",
              " product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13",
              "er\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13/F22/F25/F26 candidates are not all complete.\r\n- [ ] Original: give ever"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18191,
          "title": "feat(verify-openhands): drive the mock-LLM e2e behaviors on DeepSeek and map the gaps",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18191",
          "created_at": "2026-10-08T21:01:22Z",
          "updated_at": "2026-10-12T15:08:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T23:59:55Z",
          "closed_at": "2026-10-08T23:59:55Z",
          "head_sha": "52bfe3bb676e365c8c76964b307104d3ba33dfe7",
          "scope": "Adds and corrects map recipes for real-model behaviors the e2e suites asserted but the map lacked; it does not close the whole tracker.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " was deleted, and `/standup-digest:setup`. It read the run directory and other files on the host. Those conversations were paused.\r\n\r\n## Issue Number\r\n\r\nPart of #17872 (status of each failing test with a real model) and #18092 (behaviors the suites assert that the map lacked). No product code changed.\r\n\r\n## How to Test\r\n\r\nStatic checks:\r\n\r\n```sh\r\nexport PATH=\"$PWD/.agents/skills/verify-openhands/scripts:$PATH\"\r\ncontrol-openhands map check      # {\"ok\":true,\"files\":27,\"ids\":740,\"checked\":\"all\",\"problems\":[]}\r\ncontrol-openhands map testids    # {\"ok\":true,\"cited\":1003,\"un"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18191"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18213,
          "title": "docs: record 2026-10-09 verify-openhands sweep",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18213",
          "created_at": "2026-10-09T02:08:48Z",
          "updated_at": "2026-10-11T21:50:56Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T21:50:56Z",
          "head_sha": "4b2f3b0597951ac5902fd568ed65ba960f92f2d9",
          "scope": "Proposes partial corrections to the verification map after a full-sweep attempt and records the results; it is related implementation for this map-maintenance tracker, not a complete fix.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ipping claim to the observed visual failure; and link the newly filed composer, provider-menu, and no-manifest Home bugs and their fix PRs (#18203, #18205, #18212) from the relevant recipes.\n\n## Issue Number\n\nRelated to #18092\n\n## How to Test\n\n1. Read the dated report and compare its per-family counts with the stopped runs' retained evidence ledgers. The report distinguishes live pass, fail, blocked, and not-run IDs; it does not count a rendered route or an unattempted recipe as a pass.\n2. `control-openhands map check`, `map coverage`, `map testids`, and `map routes` — "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18213"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18093,
          "title": "feat(verify-openhands): daily pass support and CLI fixes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18093",
          "created_at": "2026-10-06T23:24:38Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "closed_at": "2026-10-07T02:24:41Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Adds daily-pass support and tracks discovered drift/unmapped behaviors for follow-up.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "es follow this procedure. F02's source typo is fixed, and F18/F26 source lists are extended.\n\n## Issue Number\n\nFixes #18091. Follow-up tracking for the drift candidates and unmapped behaviors the e2e inventory surfaced: #18092.\n\n## How to Test\n\nVerified against head `95115e84f6dd02b4fde37df195a3e7bf09e0a407` in an isolated checkout.\n\nUnit tests: 11 added, 36 total. Reran with Node 25.9.0 and the existing local Vitest 4.1.10 installation; the launcher tests require permission to listen on localhost.\n\n```sh\nnpx --no-install vitest run .agents/skills/verify-openhands\n# Tes",
              "p coverage` checks routes and feature-component directories; `map ids` lists IDs, files and summaries. Neither command reports E2E spec coverage. The inventory's drift candidates and unmapped behaviors remain tracked in #18092.\n- The daily, weekly and baseline procedures now agree with merged #18085. A finished pass proposes its frozen main `TARGET`; an unfinished or blocked changed-family pass leaves the baseline alone, even if it contains other map or CLI corrections.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01LWv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18093"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly leaves #18092 drift candidates and unmapped behaviors for later work rather than implementing them."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18211,
          "title": "feat(verify-openhands): record videos of the browser with `browser record`",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18211",
          "created_at": "2026-10-09T01:45:29Z",
          "updated_at": "2026-10-12T15:08:49Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T02:19:04Z",
          "closed_at": "2026-10-09T02:19:04Z",
          "head_sha": "c2365b525077cace8a52dd82fe75f3128b94801f",
          "scope": "Adds browser video recording for verification evidence.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "tion is live, so on most conversation pages nothing is ever still, and the option would silently do nothing during an agent wait. Explicit pause and resume work wherever you are.\r\n\r\n## Issue Number\r\n\r\nPart of #17872 and #18092. This is harness work for the live passes those issues track, whose evidence the PR template wants as video where timing matters. No product code changed.\r\n\r\n## How to Test\r\n\r\nStatic checks:\r\n\r\n```sh\r\nexport PATH=\"$PWD/.agents/skills/verify-openhands/scripts:$PATH\"\r\nnpx vitest run .agents/skills/verify-openhands   # 47 passed (4 new)\r\ncontrol-open"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18211"
            ]
          },
          "direct_closer": false,
          "reason": "Supporting harness tooling does not implement the issue’s requested drift corrections, new behavior map rows, or candidate repro outcomes."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Makes partial verification-map and recipe corrections under the issue’s own acceptance checklist; it explicitly leaves the drift/unmapped inventory incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ations stay under verify-openhands and reviewed `.pr/` evidence.\r\n- Keep historical and fresh outcomes separate. No Canvas/SDK/automation product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every",
              " product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13",
              "er\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13/F22/F25/F26 candidates are not all complete.\r\n- [ ] Original: give ever"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 4,
      "own_closed_without_merge_pr_count": 1,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18105,
          "title": "feat(verify-openhands): map 20 more behaviors, with live recipes",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18105",
          "created_at": "2026-10-07T04:58:49Z",
          "updated_at": "2026-10-08T20:37:29Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T10:37:59Z",
          "closed_at": "2026-10-07T10:37:59Z",
          "head_sha": "f2b0796635af62769ebfb69ec15a7ff4995007d9",
          "scope": "Adds 20 previously unmapped behavior recipes and resolves drift candidates 3, 4, 8 and 9; other candidates remain open.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "lping Engel Nyst (@enyst) with project maintenance; Engel asked me to post.)\r\n\r\n---\r\n\r\nAGENT:\r\n\r\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. This is the follow-up to #18093 that #18092 tracked: the behaviors the Playwright suites under `tests/e2e/` assert and the feature map had no row for, driven live and written into the map.\r\n\r\n## Why\r\n\r\nThe e2e suites assert many user-visible behaviors (a failed send that keeps its Retry row, a project skill that fires in a worktree conversation, a Basic-view save that keeps a hidden Base UR",
              "ight's error and a failure screenshot. `fixture git-repo --remote` sets or updates `origin` on a repo that already exists and reports `remoteChanged`, instead of silently ignoring the flag.\r\n\r\n## Issue Number\r\n\r\nPart of #18092: this PR covers its \"behaviors the suites assert that the map lacks\" list and drift candidates 3, 4, 8 and 9. What remains open there (the ACP fixture, the critic key, the composer git rail decision) is summarized in a comment on the issue.\r\n\r\n## How to Test\r\n\r\nUnit tests:\r\n\r\n```sh\r\nnpx vitest run .agents/skills/verify-openhands\r\n#  Test Files  1 ",
              "EEPSEEK_API_KEY`), `F06.critic-result` (a Cloud critic key), `F10.cloud-provider-pagination` (a Cloud organization backend).\r\n- Product-bug candidates the drives surfaced are not written into the map; they are listed on #18092 for a repro: the first-activation `ids=` request to a newly added backend (hit once in two tries, after a failed Connect in the same modal), generic `An error occurred` toasts on the frontend-only recovery gate, and three MCP wording and timing nits.\r\n- Harness gaps noted for a later CLI change, each worked around in the recipes: `browser scroll` ",
              "51c63eed55ee30593674a12 -->\n<!-- openhands-ai-triage:end -->\n\nI am an AI agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Status after the live pass that https://github.com/OpenHands/OpenHands/pull/18105 carries.\n\n**Mapped, with recipes driven live** (every item of the \"behaviors the suites assert that the map lacks\" list): `F01.api-key-entry` (no-toast check), `F05.image-only-send`, `F05.profile-identity`, `F06.clock-skew-send`, `F06.fail"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18105"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Implements tracked harness gaps, re-drives affected recipes and records or files the issue’s product-bug candidates.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Engel asked for the harness gaps the e2e-behavior drives (#18105) left behind to be closed in one CLI PR, and for the product-bug candidates listed on #18092 to be reproduced and filed where they hold.\n\n## Why\n\nEach gap was worked around inside a map recipe because `control-openhands` could not express it: a loading row too quick to count, a request body a recipe had to prove through a shell-gated fixture, a second tab that `wait-tab` confused with the current one, an event list capped at the newest hu",
              " encrypted values on Test connection, no `env` at all in Save's sparse patch); Known-failure rows link the three defects filed below; the two candidates that did not reproduce carry a dated note.\n\n## Bug candidates from #18092, reproduced on fresh stacks\n\nEach candidate was driven at least twice on an isolated stack of `main` @ d2c89252d, with the code path and history read before deciding.\n\n| Candidate | Verdict | Where |\n|---|---|---|\n| Recovery gate shows two generic \"An error occurred\" toasts when the stored backend answers 503 | confirmed 2/2, regression from #1668",
              " F25 Gotcha |\n| A stdio MCP server that exits before the handshake is reported either at once or only at the deadline | not reproduced: 21 of 21 answered at once | the F17 Gotcha now says so |\n\n\n## Issue Number\n\nPart of #18092 (the harness gaps and product-bug candidates listed there).\n\n## How to Test\n\nUnit tests (6 new, 43 total):\n\n```sh\nnpx vitest run .agents/skills/verify-openhands\n#  Test Files  1 passed (1)\n#       Tests  43 passed (43)\n```\n\nLive, on an isolated run of this checkout (Node 24, `uvx`, Chromium via `CONTROL_OPENHANDS_BROWSER`; agent-server 1.53.0, aut",
              "I agent based on Fable 5.1, helping Engel Nyst (@enyst) with OpenHands work. Follow-up on the two lists above, done on 2026-10-08 at `main` @ d2c89252d.\n\n**Harness gaps: closed in https://github.com/OpenHands/OpenHands/pull/18162.** `browser scroll --observe`, `browser network --bodies` (credentials redacted, the `**********` placeholder kept), `browser tab new` and `wait-tab --new`, `conversation events` paging with `images: N` and `--kinds`/`--grep` before `--las"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Makes partial verification-map and recipe corrections under the issue’s own acceptance checklist; it explicitly leaves the drift/unmapped inventory incomplete.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ations stay under verify-openhands and reviewed `.pr/` evidence.\r\n- Keep historical and fresh outcomes separate. No Canvas/SDK/automation product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every",
              " product implementation changes or dependency upgrades.\r\n\r\n## Issue Number\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13",
              "er\r\n\r\nRefs #18092 (OpenHands/OpenHands; enhancement and ready-for-dev confirmed). This partial pass does not close the tracker.\r\n\r\n### Linked issue #18092 acceptance checklist\r\n\r\nThis partial continuation does not close #18092. The original and triage criteria are accounted for separately; unchecked items remain partial or unverified.\r\n\r\n- [ ] Original: drive every drift candidate live and correct its map row or file an owning product issue. Partial: fresh F03 covers some Home paths; F01/F06/F07/F13/F22/F25/F26 candidates are not all complete.\r\n- [ ] Original: give ever"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18191,
          "title": "feat(verify-openhands): drive the mock-LLM e2e behaviors on DeepSeek and map the gaps",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18191",
          "created_at": "2026-10-08T21:01:22Z",
          "updated_at": "2026-10-12T15:08:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T23:59:55Z",
          "closed_at": "2026-10-08T23:59:55Z",
          "head_sha": "52bfe3bb676e365c8c76964b307104d3ba33dfe7",
          "scope": "Adds and corrects map recipes for real-model behaviors the e2e suites asserted but the map lacked; it does not close the whole tracker.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " was deleted, and `/standup-digest:setup`. It read the run directory and other files on the host. Those conversations were paused.\r\n\r\n## Issue Number\r\n\r\nPart of #17872 (status of each failing test with a real model) and #18092 (behaviors the suites assert that the map lacked). No product code changed.\r\n\r\n## How to Test\r\n\r\nStatic checks:\r\n\r\n```sh\r\nexport PATH=\"$PWD/.agents/skills/verify-openhands/scripts:$PATH\"\r\ncontrol-openhands map check      # {\"ok\":true,\"files\":27,\"ids\":740,\"checked\":\"all\",\"problems\":[]}\r\ncontrol-openhands map testids    # {\"ok\":true,\"cited\":1003,\"un"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18191"
            ]
          },
          "direct_closer": false
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18213,
          "title": "docs: record 2026-10-09 verify-openhands sweep",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18213",
          "created_at": "2026-10-09T02:08:48Z",
          "updated_at": "2026-10-11T21:50:56Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T21:50:56Z",
          "head_sha": "4b2f3b0597951ac5902fd568ed65ba960f92f2d9",
          "scope": "Proposes partial corrections to the verification map after a full-sweep attempt and records the results; it is related implementation for this map-maintenance tracker, not a complete fix.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ipping claim to the observed visual failure; and link the newly filed composer, provider-menu, and no-manifest Home bugs and their fix PRs (#18203, #18205, #18212) from the relevant recipes.\n\n## Issue Number\n\nRelated to #18092\n\n## How to Test\n\n1. Read the dated report and compare its per-family counts with the stopped runs' retained evidence ledgers. The report distinguishes live pass, fail, blocked, and not-run IDs; it does not count a rendered route or an unattempted recipe as a pass.\n2. `control-openhands map check`, `map coverage`, `map testids`, and `map routes` — "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18213"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18183; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18094,
      "title": "[Bug]: Escape does not close the composer \"+\" menu, the status-dot menu or the drawer tabs menu",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18094",
      "created_at": "2026-10-06T23:24:38Z",
      "updated_at": "2026-10-07T01:05:49Z",
      "state": "closed",
      "closed_at": "2026-10-07T01:05:49Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18095,
          "title": "fix(a11y): close the tools, status and tabs menus on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18095",
          "created_at": "2026-10-07T00:09:21Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "closed_at": "2026-10-07T01:05:48Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Adds Escape handling and focus recovery to the composer plus, status and drawer tab menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "It covers both places that render `ConversationTabs`: the desktop drawer and the phone panel page.\n- Outside clicks still close each menu. The PR adds no Escape listener outside the hook's stack.\n\n## Issue Number\n\nFixes #18094\n\n## How to Test\n\n**Unit tests, lint, formatting and types** (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/components/chat/chat-add-file-button.test.tsx \\\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\n  __tests__/components/features/conversation/conversation-tabs-context-menu.test.tsx"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18095"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18095,
          "title": "fix(a11y): close the tools, status and tabs menus on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18095",
          "created_at": "2026-10-07T00:09:21Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "closed_at": "2026-10-07T01:05:48Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Adds Escape handling and focus recovery to the composer plus, status and drawer tab menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "It covers both places that render `ConversationTabs`: the desktop drawer and the phone panel page.\n- Outside clicks still close each menu. The PR adds no Escape listener outside the hook's stack.\n\n## Issue Number\n\nFixes #18094\n\n## How to Test\n\n**Unit tests, lint, formatting and types** (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/components/chat/chat-add-file-button.test.tsx \\\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\n  __tests__/components/features/conversation/conversation-tabs-context-menu.test.tsx"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18095"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18085,
          "title": "docs(verify-openhands): map maintenance through main@ed815e141",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18085",
          "created_at": "2026-10-06T22:32:46Z",
          "updated_at": "2026-10-08T20:37:42Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T23:46:21Z",
          "closed_at": "2026-10-06T23:46:21Z",
          "head_sha": "1a78a035482f1a4fd89e4506c20627eb03db7e14",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "m cannot act on.\n  - #18089: prompt- and agent-type hooks show an empty Commands box.\n  - #18088: with the Agent Server down, Refresh in the Hooks dialog shows `Failed to fetch skills`.\n- Also filed from older map rows: #18094, Escape does not close the composer `+` menu (F05), the status-dot menu (F07) or the drawer tabs menu (F08), which #18044 left out of its Escape fix. Those three rows now link it instead of the #17933 comment.\n- The screenshots are pinned to commit 67b6f7198, because the PR Artifacts workflow removes `.pr/` from the branch on approval.\n\n🤖 Generate"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18085"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18141,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18141",
          "created_at": "2026-10-08T07:08:28Z",
          "updated_at": "2026-10-08T20:36:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T17:01:26Z",
          "closed_at": "2026-10-08T17:01:26Z",
          "head_sha": "211e533b960882187e99b09405c4cc1bddf24003",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "her accessible workspace to test switching/isolation.\n\nChecked 46 linked issues in their owning repositories (40 open / 6 closed). Required closed-issue retests remain F05.plus-menu / F07.status-menu / F08.tabs-menu for #18094, and F24.encryption for OpenHands/automation#551, including non-dirty export fixtures. Known-failure wording is preserved pending proof. F25 health cadence and the DNT failure note also remain candidates; F27's closed-issue metadata is recorded. No new defect was independently reproduced, no duplicate/new issue filed, and regression origin is unas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18141"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18095,
          "title": "fix(a11y): close the tools, status and tabs menus on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18095",
          "created_at": "2026-10-07T00:09:21Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "closed_at": "2026-10-07T01:05:48Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Adds Escape handling and focus recovery to the composer plus, status and drawer tab menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "It covers both places that render `ConversationTabs`: the desktop drawer and the phone panel page.\n- Outside clicks still close each menu. The PR adds no Escape listener outside the hook's stack.\n\n## Issue Number\n\nFixes #18094\n\n## How to Test\n\n**Unit tests, lint, formatting and types** (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/components/chat/chat-add-file-button.test.tsx \\\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\n  __tests__/components/features/conversation/conversation-tabs-context-menu.test.tsx"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18095"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18095,
          "title": "fix(a11y): close the tools, status and tabs menus on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18095",
          "created_at": "2026-10-07T00:09:21Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "closed_at": "2026-10-07T01:05:48Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Adds Escape handling and focus recovery to the composer plus, status and drawer tab menus.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "It covers both places that render `ConversationTabs`: the desktop drawer and the phone panel page.\n- Outside clicks still close each menu. The PR adds no Escape listener outside the hook's stack.\n\n## Issue Number\n\nFixes #18094\n\n## How to Test\n\n**Unit tests, lint, formatting and types** (from the repo root of this branch):\n\n```bash\nnpx vitest run __tests__/components/chat/chat-add-file-button.test.tsx \\\n  __tests__/components/features/conversation/conversation-name-with-status.test.tsx \\\n  __tests__/components/features/conversation/conversation-tabs-context-menu.test.tsx"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18095"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18095; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18123,
      "title": "[Bug]: Mock-LLM cross-connect test: the sidebar cmd-click sometimes opens no tab, and the test hangs for 6 minutes (2 of 9 main runs)",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18123",
      "created_at": "2026-10-07T10:53:41Z",
      "updated_at": "2026-10-13T04:30:17Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18364"
            ]
          },
          "number": 18364,
          "title": "test(e2e): bound and diagnose sidebar modified-click tab waits",
          "url": "https://github.com/OpenHands/OpenHands/pull/18364",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:36:48Z",
          "updated_at": "2026-10-13T05:47:04Z",
          "head_sha": "10bff1bb892ca9d6d8b5e3be0a9d0d0540eda608",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18147,
          "title": "fix(test): bound tab wait and record diagnostics on mock-llm sidebar cmd-click",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18147",
          "created_at": "2026-10-08T09:53:07Z",
          "updated_at": "2026-10-12T06:15:30Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "07f0bfbe0fe09767e4aba683e2eb4e43ebe3b1f1",
          "scope": "Adds the specifically requested bounded new-tab wait and click diagnostics to the flaky test; product changes were conditional on future evidence.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "-llm-cross-connect.spec.ts` to use `cmdClickAndExpectNewTab`.\n- Added unit tests in `__tests__/utils/cmd-click-new-tab.test.ts` covering both resolution and fast failure with diagnostic evidence.\n\n## Issue Number\n\nFixes #18123\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/utils/cmd-click-new-tab.test.ts\n```\n\nAll 2 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"mock-llm-cross-connect-diagnostics\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wo"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18147"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18147,
          "title": "fix(test): bound tab wait and record diagnostics on mock-llm sidebar cmd-click",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18147",
          "created_at": "2026-10-08T09:53:07Z",
          "updated_at": "2026-10-12T06:15:30Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "07f0bfbe0fe09767e4aba683e2eb4e43ebe3b1f1",
          "scope": "Adds the specifically requested bounded new-tab wait and click diagnostics to the flaky test; product changes were conditional on future evidence.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "-llm-cross-connect.spec.ts` to use `cmdClickAndExpectNewTab`.\n- Added unit tests in `__tests__/utils/cmd-click-new-tab.test.ts` covering both resolution and fast failure with diagnostic evidence.\n\n## Issue Number\n\nFixes #18123\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/utils/cmd-click-new-tab.test.ts\n```\n\nAll 2 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"mock-llm-cross-connect-diagnostics\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wo"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18147"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18364"
            ]
          },
          "number": 18364,
          "title": "test(e2e): bound and diagnose sidebar modified-click tab waits",
          "url": "https://github.com/OpenHands/OpenHands/pull/18364",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:36:48Z",
          "updated_at": "2026-10-13T05:47:04Z",
          "head_sha": "10bff1bb892ca9d6d8b5e3be0a9d0d0540eda608",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18147,
          "title": "fix(test): bound tab wait and record diagnostics on mock-llm sidebar cmd-click",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18147",
          "created_at": "2026-10-08T09:53:07Z",
          "updated_at": "2026-10-12T06:15:30Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "07f0bfbe0fe09767e4aba683e2eb4e43ebe3b1f1",
          "scope": "Adds the specifically requested bounded new-tab wait and click diagnostics to the flaky test; product changes were conditional on future evidence.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "-llm-cross-connect.spec.ts` to use `cmdClickAndExpectNewTab`.\n- Added unit tests in `__tests__/utils/cmd-click-new-tab.test.ts` covering both resolution and fast failure with diagnostic evidence.\n\n## Issue Number\n\nFixes #18123\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpm test __tests__/utils/cmd-click-new-tab.test.ts\n```\n\nAll 2 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"mock-llm-cross-connect-diagnostics\" src=\"https://github.com/user-attachments/assets/ad0427c2-6d8f-4089-a513-81309537bef7\" />\n\n```\n RUN  v5.0.0 /data00/home/liangxu.5/code2/oss-roach/.wo"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18147"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18364"
            ]
          },
          "number": 18364,
          "title": "test(e2e): bound and diagnose sidebar modified-click tab waits",
          "url": "https://github.com/OpenHands/OpenHands/pull/18364",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T04:36:48Z",
          "updated_at": "2026-10-13T05:47:04Z",
          "head_sha": "10bff1bb892ca9d6d8b5e3be0a9d0d0540eda608",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18160,
      "title": "[Bug]: Recovery gate (stored backend answers 503) shows two generic \"An error occurred\" toasts from the free-models hydrator",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18160",
      "created_at": "2026-10-08T13:47:46Z",
      "updated_at": "2026-10-12T05:05:29Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18369"
            ]
          },
          "number": 18369,
          "title": "fix(backends): silence expected recovery model and version probes",
          "url": "https://github.com/OpenHands/OpenHands/pull/18369",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:18Z",
          "updated_at": "2026-10-14T04:48:28Z",
          "head_sha": "c08a07c95c1733b7b7ead874049597d7566e4b55",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18164,
          "title": "fix(query): disable error toasts for free models hydrator and backend version probe",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18164",
          "created_at": "2026-10-08T14:37:20Z",
          "updated_at": "2026-10-08T14:37:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c485c41b4296491870b9c4c9fd6ef387afbf9615",
          "scope": "Silences free-model hydrator and backend-version query toasts for unavailable backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "t raising error toasts.\n- Added regression test in `__tests__/components/backends/manage-backends-modal.test.tsx` confirming that local backend version probe failures do not trigger error toasts.\n\n## Issue Number\n\nFixes #18160\n\n## How to Test\n\nRun the relevant Vitest test suites:\n```bash\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx __tests__/components/backends/manage-backends-modal.test.tsx\n```\n\nAll 34 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"recovery-gate-toasts-suppressed\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18164"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18164,
          "title": "fix(query): disable error toasts for free models hydrator and backend version probe",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18164",
          "created_at": "2026-10-08T14:37:20Z",
          "updated_at": "2026-10-08T14:37:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c485c41b4296491870b9c4c9fd6ef387afbf9615",
          "scope": "Silences free-model hydrator and backend-version query toasts for unavailable backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "t raising error toasts.\n- Added regression test in `__tests__/components/backends/manage-backends-modal.test.tsx` confirming that local backend version probe failures do not trigger error toasts.\n\n## Issue Number\n\nFixes #18160\n\n## How to Test\n\nRun the relevant Vitest test suites:\n```bash\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx __tests__/components/backends/manage-backends-modal.test.tsx\n```\n\nAll 34 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"recovery-gate-toasts-suppressed\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18164"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18369"
            ]
          },
          "number": 18369,
          "title": "fix(backends): silence expected recovery model and version probes",
          "url": "https://github.com/OpenHands/OpenHands/pull/18369",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:18Z",
          "updated_at": "2026-10-14T04:48:28Z",
          "head_sha": "c08a07c95c1733b7b7ead874049597d7566e4b55",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "| Recovery gate shows two generic \"An error occurred\" toasts when the stored backend answers 503 | confirmed 2/2, regression from #16685 (free-models hydrator mounted above the gate without `meta.disableToast`) | filed: #18160 |\n| Slack MCP probe words any failed tool call (`fetch failed`) as \"Credential check failed\" | confirmed 2/2, not a regression (interpreter from #1175) | filed: #18161 |\n| GitHub MCP install reports a wrong token (HTTP 401) as \"Connection failed\" | confirmed 2/2, not a regression; the Agent Server's `POST /api/mcp/test` returns the 401 as `error_k",
              " leaves the daemon healthy, a refused `tab new` leaves one tab open.\n\n## Video/Screenshots\n\nTaken by the CLI on the live runs (under `.pr/bugs/2026-10-08/`, removed on approval):\n\n![Recovery gate with the generic toast (#18160), pass 1](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/recovery-gate-toasts/gate-with-toast-pass1.png)``\n\n[Recovery gate with the generic toast (#18160), pass 1](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-0",
              "60), pass 1](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/recovery-gate-toasts/gate-with-toast-pass1.png)``\n\n[Recovery gate with the generic toast (#18160), pass 1](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/recovery-gate-toasts/gate-with-toast-pass1.png)``\n![Contrast: first-run frontend-only screen without a toast](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-1"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18164,
          "title": "fix(query): disable error toasts for free models hydrator and backend version probe",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18164",
          "created_at": "2026-10-08T14:37:20Z",
          "updated_at": "2026-10-08T14:37:39Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c485c41b4296491870b9c4c9fd6ef387afbf9615",
          "scope": "Silences free-model hydrator and backend-version query toasts for unavailable backends.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "t raising error toasts.\n- Added regression test in `__tests__/components/backends/manage-backends-modal.test.tsx` confirming that local backend version probe failures do not trigger error toasts.\n\n## Issue Number\n\nFixes #18160\n\n## How to Test\n\nRun the relevant Vitest test suites:\n```bash\nnpx vitest run __tests__/hooks/query/use-free-models.test.tsx __tests__/components/backends/manage-backends-modal.test.tsx\n```\n\nAll 34 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"recovery-gate-toasts-suppressed\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18164"
            ]
          },
          "direct_closer": false
        },
        {
          "scope": "Explicit implementation/fixing reference in the PR description; completion is not independently verified.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "explicit_fixing_reference_in_pr_body"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18369"
            ]
          },
          "number": 18369,
          "title": "fix(backends): silence expected recovery model and version probes",
          "url": "https://github.com/OpenHands/OpenHands/pull/18369",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "created_at": "2026-10-13T06:21:18Z",
          "updated_at": "2026-10-14T04:48:28Z",
          "head_sha": "c08a07c95c1733b7b7ead874049597d7566e4b55",
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18161,
      "title": "[Bug]: Slack MCP credential probe reports any failed tool call (e.g. \"fetch failed\") as \"Credential check failed\"",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18161",
      "created_at": "2026-10-08T13:47:46Z",
      "updated_at": "2026-10-12T05:05:27Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18166,
          "title": "fix(mcp): do not classify failed Slack probe tool calls as credential failures",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18166",
          "created_at": "2026-10-08T14:50:24Z",
          "updated_at": "2026-10-08T14:50:45Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f500de4b326cef594d88f47be9db090402c2347e",
          "scope": "Restricts Slack credential-failure classification to definitive authentication verdicts instead of arbitrary failed tool calls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "lse credential failure.\n- Updated `__tests__/api/mcp-service/mcp-service.api.test.ts` to verify that errored probe calls (e.g. `fetch failed` or timeouts) are not classified as credential errors.\n\n## Issue Number\n\nFixes #18161\n\n## How to Test\n\nRun the MCP service test suite:\n```bash\nnpx vitest run __tests__/api/mcp-service/mcp-service.api.test.ts __tests__/utils/mcp-test-error-message.test.ts\n```\n\nAll 23 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"slack-mcp-probe-error-kind\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19fb1940e3e5d78"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18166"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18166,
          "title": "fix(mcp): do not classify failed Slack probe tool calls as credential failures",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18166",
          "created_at": "2026-10-08T14:50:24Z",
          "updated_at": "2026-10-08T14:50:45Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f500de4b326cef594d88f47be9db090402c2347e",
          "scope": "Restricts Slack credential-failure classification to definitive authentication verdicts instead of arbitrary failed tool calls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "lse credential failure.\n- Updated `__tests__/api/mcp-service/mcp-service.api.test.ts` to verify that errored probe calls (e.g. `fetch failed` or timeouts) are not classified as credential errors.\n\n## Issue Number\n\nFixes #18161\n\n## How to Test\n\nRun the MCP service test suite:\n```bash\nnpx vitest run __tests__/api/mcp-service/mcp-service.api.test.ts __tests__/utils/mcp-test-error-message.test.ts\n```\n\nAll 23 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"slack-mcp-probe-error-kind\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19fb1940e3e5d78"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18166"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18162,
          "title": "feat(verify-openhands): close the harness gaps, re-drive the recipes, and file the reproduced defects",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18162",
          "created_at": "2026-10-08T13:49:04Z",
          "updated_at": "2026-10-08T20:36:48Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T19:50:20Z",
          "closed_at": "2026-10-08T19:50:20Z",
          "head_sha": "8332e962497c76328d9bc74bedab85f1a39a0252",
          "scope": "Reproduces or files the product defect and records it as a known failure in the feature map.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "bove the gate without `meta.disableToast`) | filed: #18160 |\n| Slack MCP probe words any failed tool call (`fetch failed`) as \"Credential check failed\" | confirmed 2/2, not a regression (interpreter from #1175) | filed: #18161 |\n| GitHub MCP install reports a wrong token (HTTP 401) as \"Connection failed\" | confirmed 2/2, not a regression; the Agent Server's `POST /api/mcp/test` returns the 401 as `error_kind` `unknown`, so only the SDK can classify it | filed: OpenHands/software-agent-sdk#5607 |\n| `--allow-lan-session-key` ignored by the npm launcher | confirmed 2/2 | a",
              "(``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/mcp-github-401/install-modal-401-pass1.png)``\n![Slack install modal with the misworded probe failure (#18161)](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/mcp-slack-fetch-failed/install-modal-fetch-failed-pass1.png)``\n\n[Slack install modal with the misworded probe failure (#18161)](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/b",
              "thubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/mcp-slack-fetch-failed/install-modal-fetch-failed-pass1.png)``\n\n[Slack install modal with the misworded probe failure (#18161)](``https://raw.githubusercontent.com/OpenHands/OpenHands/8a2e7fa0be754968a23eccb97f432f17b0793510/.pr/bugs/2026-10-08/mcp-slack-fetch-failed/install-modal-fetch-failed-pass1.png)``\n\n## Design Doc\n\nNot included; the change is confined to `.agents/skills/verify-openhands/` and `.pr/`.\n\n## Type\n\n- [ ] Bug fix\n- [x] Feature\n- [ ] Refactor\n- [ ] Break"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18162"
            ]
          },
          "direct_closer": false,
          "reason": "Issue-filing and verification-map evidence do not implement a fix for this product bug."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18166,
          "title": "fix(mcp): do not classify failed Slack probe tool calls as credential failures",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18166",
          "created_at": "2026-10-08T14:50:24Z",
          "updated_at": "2026-10-08T14:50:45Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f500de4b326cef594d88f47be9db090402c2347e",
          "scope": "Restricts Slack credential-failure classification to definitive authentication verdicts instead of arbitrary failed tool calls.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "lse credential failure.\n- Updated `__tests__/api/mcp-service/mcp-service.api.test.ts` to verify that errored probe calls (e.g. `fetch failed` or timeouts) are not classified as credential errors.\n\n## Issue Number\n\nFixes #18161\n\n## How to Test\n\nRun the MCP service test suite:\n```bash\nnpx vitest run __tests__/api/mcp-service/mcp-service.api.test.ts __tests__/utils/mcp-test-error-message.test.ts\n```\n\nAll 23 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"slack-mcp-probe-error-kind\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/d19fb1940e3e5d78"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18166"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18172,
      "title": "[Bug]: Escape does not close the composer \"More input actions\" overflow menu at narrow widths",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18172",
      "created_at": "2026-10-08T17:21:43Z",
      "updated_at": "2026-10-09T00:44:05Z",
      "state": "closed",
      "closed_at": "2026-10-09T00:44:05Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Adds Escape handling and trigger-focus restoration to the overflow input-actions menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " #18095 did for the `+` tools menu: Escape closes the menu and any open submenu and returns focus to the trigger.\n- Add a unit test in the existing overflow-menu suite (it fails without the fix).\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx` → 21 passed; with the component change reverted the new test fails (`closes on Escape and returns focus to the trigger`). Prettier and ESLint are clean on both files.\n\nLive, on a real local stack (Agent Server 1.53.0, deepseek-flash), "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18189,
          "title": "fix(chat): close composer overflow menu on Escape",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18189",
          "created_at": "2026-10-08T20:02:40Z",
          "updated_at": "2026-10-08T20:02:58Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "10cdb09fd30e32b0b8d1de1b0a54f4b9b7dcdafa",
          "scope": "Adds Escape handling and focus restoration to the composer overflow menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "low menu and returns focus to the trigger when focus is on the trigger.\n  2. Escape closes the overflow menu and open submenus and returns focus to the trigger when an inner menu item is focused.\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"composer-overflow-menu-open\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/71e4fe8db536ec985aaa2e86d109e28a28ee4df3/.pr/bugs/2026-10-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18189"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Adds Escape handling and trigger-focus restoration to the overflow input-actions menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " #18095 did for the `+` tools menu: Escape closes the menu and any open submenu and returns focus to the trigger.\n- Add a unit test in the existing overflow-menu suite (it fails without the fix).\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx` → 21 passed; with the component change reverted the new test fails (`closes on Escape and returns focus to the trigger`). Prettier and ESLint are clean on both files.\n\nLive, on a real local stack (Agent Server 1.53.0, deepseek-flash), "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18189,
          "title": "fix(chat): close composer overflow menu on Escape",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18189",
          "created_at": "2026-10-08T20:02:40Z",
          "updated_at": "2026-10-08T20:02:58Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "10cdb09fd30e32b0b8d1de1b0a54f4b9b7dcdafa",
          "scope": "Adds Escape handling and focus restoration to the composer overflow menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "low menu and returns focus to the trigger when focus is on the trigger.\n  2. Escape closes the overflow menu and open submenus and returns focus to the trigger when an inner menu item is focused.\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"composer-overflow-menu-open\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/71e4fe8db536ec985aaa2e86d109e28a28ee4df3/.pr/bugs/2026-10-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18189"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "that row verified. |\r\n| F05.plus-menu, F07.status-menu, F08.tabs-menu | Original PR claims Escape/focus recovery after #18095; fresh literal desktop/phone reruns still pending here. F05.overflow-menu keeps known failure #18172. |\r\n| F16.analytics | Historical build-time DNT claim is limited to that build; browser-level DNT/network verification is not established. |\r\n| F02.super-admin-setup-guide | Positive guide/setup path blocked: genuine Enterprise backend with ENABLE_SUPER_ADMIN, first Super Admin and the required setup state. Local absence is a separate negative che",
              "x/source-issue state reconciled; BASE retained. Positive #18138/#18139 continuation/tour flows explicitly remain not live-mapped with their real Enterprise/context prerequisites. |\r\n\r\nExisting issue links are preserved: #18172, #18173, #18178, #18181 and OpenHands/automation#551. Linked product fix PRs are separate work; no product fix or new issue was filed by this continuation. Do not infer a regression or a merged fix from those links. Current issue/fix status before publication: #18172/#18173/#18178/#18181 remain open; their separate fix PRs#18174/#18175/#18180/#181",
              "omation#551. Linked product fix PRs are separate work; no product fix or new issue was filed by this continuation. Do not infer a regression or a merged fix from those links. Current issue/fix status before publication: #18172/#18173/#18178/#18181 remain open; their separate fix PRs#18174/#18175/#18180/#18182 are unmerged. Automation#551 is closed upstream but the reproduced defect remains in the pinned1.19.0; no claim of a Canvas regression. Final refresh follows the serial checks..\r\n\r\n## Why\r\n\r\nKeep verification recipes, coverage accounting and retained evidence consi"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "s, `automation-run-display` to F03/F21/F23, `telemetry` to F16, `use-add-mcp-server` to F17, and `settings-input` to F10/F14/F19. The unmapped `settings-input.tsx` is now owned by F10. Closed since BASE: #18088, #18090, #18172. Also re-driven: automation#551, which closed before BASE but was still listed as a Known failure.\n\n### Live results (verify-openhands evidence ledgers; Local stacks, Agent Server 1.53.0, automation 1.19.0, Chromium, desktop 1440×1000 and phone 390×844)\n\n| Run | Scope | Checks | Pass | Fail | Blocked | Not-run |\n|---|---|---:|---:|---:|---:|---:|\n",
              "F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | Live result |\n|---|---|---|\n| F05.overflow-menu + Escape gotcha | Escape closes the More input actions menu and returns focus (#18174); #18172 failure wording removed | pass, narrow + phone, independently re-run |\n| F05/F06/F07 Send-disabled gotchas | \"not filed yet\" now links #18202; suggestion/macro prefill added as Known failure | fail reproduced (W1); #18202 open, fix PR #18203 open |\n| F07 Hooks fetch-error gotcha | expects `Failed to fetch hooks. Please try again later.` (#18177); "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Adds Escape handling and trigger-focus restoration to the overflow input-actions menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " #18095 did for the `+` tools menu: Escape closes the menu and any open submenu and returns focus to the trigger.\n- Add a unit test in the existing overflow-menu suite (it fails without the fix).\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx` → 21 passed; with the component change reverted the new test fails (`closes on Escape and returns focus to the trigger`). Prettier and ESLint are clean on both files.\n\nLive, on a real local stack (Agent Server 1.53.0, deepseek-flash), "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18189,
          "title": "fix(chat): close composer overflow menu on Escape",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18189",
          "created_at": "2026-10-08T20:02:40Z",
          "updated_at": "2026-10-08T20:02:58Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "10cdb09fd30e32b0b8d1de1b0a54f4b9b7dcdafa",
          "scope": "Adds Escape handling and focus restoration to the composer overflow menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "low menu and returns focus to the trigger when focus is on the trigger.\n  2. Escape closes the overflow menu and open submenus and returns focus to the trigger when an inner menu item is focused.\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"composer-overflow-menu-open\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/71e4fe8db536ec985aaa2e86d109e28a28ee4df3/.pr/bugs/2026-10-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18189"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18174,
          "title": "fix(a11y): close the composer's More input actions menu on Escape",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18174",
          "created_at": "2026-10-08T17:23:20Z",
          "updated_at": "2026-10-12T15:08:51Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "closed_at": "2026-10-09T00:44:04Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Adds Escape handling and trigger-focus restoration to the overflow input-actions menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " #18095 did for the `+` tools menu: Escape closes the menu and any open submenu and returns focus to the trigger.\n- Add a unit test in the existing overflow-menu suite (it fails without the fix).\n\n## Issue Number\n\nFixes #18172\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/features/chat/components/chat-input-actions.test.tsx` → 21 passed; with the component change reverted the new test fails (`closes on Escape and returns focus to the trigger`). Prettier and ESLint are clean on both files.\n\nLive, on a real local stack (Agent Server 1.53.0, deepseek-flash), "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18174"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18174; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18173,
      "title": "[Bug]: Automation run Logs dialog overflows its panel with a long task summary; tabs and output unreachable at phone width",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18173",
      "created_at": "2026-10-08T17:22:02Z",
      "updated_at": "2026-10-09T19:43:51Z",
      "state": "closed",
      "closed_at": "2026-10-09T19:43:51Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18175,
          "title": "fix(automations): keep a long run's Logs dialog inside its panel",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18175",
          "created_at": "2026-10-08T17:23:35Z",
          "updated_at": "2026-10-12T15:08:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T19:43:49Z",
          "closed_at": "2026-10-09T19:43:49Z",
          "head_sha": "2741623fb9f5075747e09e1de8608717ba5b6cae",
          "scope": "Makes the long automation Logs dialog scroll within its viewport-capped panel.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ld not be reached.\n\n## Summary\n\n- Add `overflow-y-auto` to the dialog panel in `run-logs-modal.tsx`, so content taller than 80vh scrolls inside the panel. Short runs are unchanged (no scrollbar).\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/automations/detail/` → 16 files, 174 tests passed. No unit test is added: jsdom does no layout, and a test asserting the class string would only mirror the source (AGENTS.md). The behavior is proven live below.\n\nLive, on a real local stack (Agent Server 1.53.0, automation 1.19.0, deepseek",
              "ol-openhands launch --new` from a worktree of main@7af57f8 plus this commit. Arrange a run with a 12-line `outcome_summary` and long metadata (`control-openhands api POST /api/automation/v1/preset/prompt --write …`, see #18173), Run now, then at 390x844 open `testid=automation-activity-log >> title=View logs` and measure the `max-h-[80vh]` panel:\n\n| Run, viewport | Before (main) | After (this branch) |\n|---|---|---|\n| Long, 390x844 | panel y 84–760; tabs at y 946 and Output box y 997–1189, below the viewport; scrolling to the Error tab leaves it at y 946 | panel scrolls"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18175"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18217,
          "title": "fix(automations): enable vertical scrolling on run logs modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18217",
          "created_at": "2026-10-09T03:53:14Z",
          "updated_at": "2026-10-13T18:09:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a818fd58e519aabf9ea42b45b86f72d89d22be0a",
          "scope": "Enables vertical scrolling in an oversized automation Logs dialog.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ey dismissal continue to function properly.\n- Added automated unit test in `__tests__/components/automations/detail/run-logs-modal.test.tsx` verifying that the dialog panel has `overflow-y-auto`.\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/automations/detail/run-logs-modal.test.tsx __tests__/components/automations/detail/run-logs-modal-script-run.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"run-logs-modal-overflow\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHan"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18217"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18175,
          "title": "fix(automations): keep a long run's Logs dialog inside its panel",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18175",
          "created_at": "2026-10-08T17:23:35Z",
          "updated_at": "2026-10-12T15:08:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T19:43:49Z",
          "closed_at": "2026-10-09T19:43:49Z",
          "head_sha": "2741623fb9f5075747e09e1de8608717ba5b6cae",
          "scope": "Makes the long automation Logs dialog scroll within its viewport-capped panel.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ld not be reached.\n\n## Summary\n\n- Add `overflow-y-auto` to the dialog panel in `run-logs-modal.tsx`, so content taller than 80vh scrolls inside the panel. Short runs are unchanged (no scrollbar).\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/automations/detail/` → 16 files, 174 tests passed. No unit test is added: jsdom does no layout, and a test asserting the class string would only mirror the source (AGENTS.md). The behavior is proven live below.\n\nLive, on a real local stack (Agent Server 1.53.0, automation 1.19.0, deepseek",
              "ol-openhands launch --new` from a worktree of main@7af57f8 plus this commit. Arrange a run with a 12-line `outcome_summary` and long metadata (`control-openhands api POST /api/automation/v1/preset/prompt --write …`, see #18173), Run now, then at 390x844 open `testid=automation-activity-log >> title=View logs` and measure the `max-h-[80vh]` panel:\n\n| Run, viewport | Before (main) | After (this branch) |\n|---|---|---|\n| Long, 390x844 | panel y 84–760; tabs at y 946 and Output box y 997–1189, below the viewport; scrolling to the Error tab leaves it at y 946 | panel scrolls"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18175"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18217,
          "title": "fix(automations): enable vertical scrolling on run logs modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18217",
          "created_at": "2026-10-09T03:53:14Z",
          "updated_at": "2026-10-13T18:09:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a818fd58e519aabf9ea42b45b86f72d89d22be0a",
          "scope": "Enables vertical scrolling in an oversized automation Logs dialog.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ey dismissal continue to function properly.\n- Added automated unit test in `__tests__/components/automations/detail/run-logs-modal.test.tsx` verifying that the dialog panel has `overflow-y-auto`.\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/automations/detail/run-logs-modal.test.tsx __tests__/components/automations/detail/run-logs-modal-script-run.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"run-logs-modal-overflow\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHan"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18217"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ustom-finish checks pending. Ordinary pinned prompt dispatch has an unbounded 500-iteration path; do not use it without a confident bound. No-finish Completed does not prove summary-only/custom/non-string finish shapes. #18173 remains a known phone Logs failure. |\r\n| F24.encryption | Six genuine failures: set, rotate and clear a key without editing an otherwise non-dirty automation, on desktop and phone. Sync complete/dirty_count0 did not rewrite export files. Keep Expected + Known failure linking OpenHands/automation#551; conditional PATCH cannot waive this check. Actu",
              "-issue state reconciled; BASE retained. Positive #18138/#18139 continuation/tour flows explicitly remain not live-mapped with their real Enterprise/context prerequisites. |\r\n\r\nExisting issue links are preserved: #18172, #18173, #18178, #18181 and OpenHands/automation#551. Linked product fix PRs are separate work; no product fix or new issue was filed by this continuation. Do not infer a regression or a merged fix from those links. Current issue/fix status before publication: #18172/#18173/#18178/#18181 remain open; their separate fix PRs#18174/#18175/#18180/#18182 are u"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "defect, each kept as Expected + Known failure. #18063 is the overflow Model submenu off-screen. #18206 is an agent hook showing `prompt`. software-agent-sdk#5496 is plugin Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | Live result |\n|---|---|---|\n| F05.overflo",
              "```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F19.refresh-fail-sdk5496.png);''``` F23 phone Logs dialog overflows with a long summary (#18173) [F23 18173](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F23.run-logs-modal-phone-fail-18173.png)''```\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [ ] Refactor\n- [ ] Breaking change\n- [x] Docs / chore\n\n## Notes\n\nThe working branch `claude/clever-cori-tsitrj` holds t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "hortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source-verified only. Both call sites use `SETTINGS$SUBSCRIPTION_MODEL"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18175,
          "title": "fix(automations): keep a long run's Logs dialog inside its panel",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18175",
          "created_at": "2026-10-08T17:23:35Z",
          "updated_at": "2026-10-12T15:08:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T19:43:49Z",
          "closed_at": "2026-10-09T19:43:49Z",
          "head_sha": "2741623fb9f5075747e09e1de8608717ba5b6cae",
          "scope": "Makes the long automation Logs dialog scroll within its viewport-capped panel.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ld not be reached.\n\n## Summary\n\n- Add `overflow-y-auto` to the dialog panel in `run-logs-modal.tsx`, so content taller than 80vh scrolls inside the panel. Short runs are unchanged (no scrollbar).\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/automations/detail/` → 16 files, 174 tests passed. No unit test is added: jsdom does no layout, and a test asserting the class string would only mirror the source (AGENTS.md). The behavior is proven live below.\n\nLive, on a real local stack (Agent Server 1.53.0, automation 1.19.0, deepseek",
              "ol-openhands launch --new` from a worktree of main@7af57f8 plus this commit. Arrange a run with a 12-line `outcome_summary` and long metadata (`control-openhands api POST /api/automation/v1/preset/prompt --write …`, see #18173), Run now, then at 390x844 open `testid=automation-activity-log >> title=View logs` and measure the `max-h-[80vh]` panel:\n\n| Run, viewport | Before (main) | After (this branch) |\n|---|---|---|\n| Long, 390x844 | panel y 84–760; tabs at y 946 and Output box y 997–1189, below the viewport; scrolling to the Error tab leaves it at y 946 | panel scrolls"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18175"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18217,
          "title": "fix(automations): enable vertical scrolling on run logs modal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18217",
          "created_at": "2026-10-09T03:53:14Z",
          "updated_at": "2026-10-13T18:09:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "a818fd58e519aabf9ea42b45b86f72d89d22be0a",
          "scope": "Enables vertical scrolling in an oversized automation Logs dialog.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ey dismissal continue to function properly.\n- Added automated unit test in `__tests__/components/automations/detail/run-logs-modal.test.tsx` verifying that the dialog panel has `overflow-y-auto`.\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nRun the unit tests:\n```bash\nnpx vitest run __tests__/components/automations/detail/run-logs-modal.test.tsx __tests__/components/automations/detail/run-logs-modal-script-run.test.tsx\n```\n\nAll 22 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"run-logs-modal-overflow\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHan"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18217"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18175,
          "title": "fix(automations): keep a long run's Logs dialog inside its panel",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18175",
          "created_at": "2026-10-08T17:23:35Z",
          "updated_at": "2026-10-12T15:08:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T19:43:49Z",
          "closed_at": "2026-10-09T19:43:49Z",
          "head_sha": "2741623fb9f5075747e09e1de8608717ba5b6cae",
          "scope": "Makes the long automation Logs dialog scroll within its viewport-capped panel.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ld not be reached.\n\n## Summary\n\n- Add `overflow-y-auto` to the dialog panel in `run-logs-modal.tsx`, so content taller than 80vh scrolls inside the panel. Short runs are unchanged (no scrollbar).\n\n## Issue Number\n\nFixes #18173\n\n## How to Test\n\nUnit: `npx vitest run __tests__/components/automations/detail/` → 16 files, 174 tests passed. No unit test is added: jsdom does no layout, and a test asserting the class string would only mirror the source (AGENTS.md). The behavior is proven live below.\n\nLive, on a real local stack (Agent Server 1.53.0, automation 1.19.0, deepseek",
              "ol-openhands launch --new` from a worktree of main@7af57f8 plus this commit. Arrange a run with a 12-line `outcome_summary` and long metadata (`control-openhands api POST /api/automation/v1/preset/prompt --write …`, see #18173), Run now, then at 390x844 open `testid=automation-activity-log >> title=View logs` and measure the `max-h-[80vh]` panel:\n\n| Run, viewport | Before (main) | After (this branch) |\n|---|---|---|\n| Long, 390x844 | panel y 84–760; tabs at y 946 and Output box y 997–1189, below the viewport; scrolling to the Error tab leaves it at y 946 | panel scrolls"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18175"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18175; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18178,
      "title": "[Bug]: Docker image exits on hosts without IPv6: static server binds \"::\" and fails with EAFNOSUPPORT",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18178",
      "created_at": "2026-10-08T17:34:40Z",
      "updated_at": "2026-10-10T10:25:30Z",
      "state": "closed",
      "closed_at": "2026-10-10T10:25:30Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18180,
          "title": "fix(docker): bind the frontend to 0.0.0.0 when the kernel has no IPv6",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18180",
          "created_at": "2026-10-08T17:35:09Z",
          "updated_at": "2026-10-12T15:08:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:25:29Z",
          "closed_at": "2026-10-10T10:25:29Z",
          "head_sha": "60e95f3b6a427a050022fb3f27294f495e526614",
          "scope": "Adds an IPv4 fallback to the static server when IPv6 binding is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " line saying so. Both the main and the `PUBLIC_MODE_PORT` static servers use it.\r\n- The session-key policy block is unchanged: injection still needs `AGENT_CANVAS_ALLOW_LAN_SESSION_KEY=true`.\r\n\r\n## Issue Number\r\n\r\nFixes #18178\r\n\r\n## How to Test\r\n\r\n`bash -n docker/entrypoint.sh`; `npx vitest run __tests__/scripts/docker-session-key-policy.test.ts` → 2 passed.\r\n\r\nLive, on a Linux VM without IPv6 (`/proc/net/if_inet6` absent on the host and in the container), with the CI image of main, `ghcr.io/openhands/agent-canvas:sha-7af57f8`:\r\n\r\n- **Before** (image as built): `docker ",
              "ature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\nThe container exits with status 0 after this crash, so `--restart on-failure` does not restart it; that is left out of this PR and noted in #18178 for a maintainer decision. `PUBLIC_MODE_PORT=8001` collides with the in-image VS Code server (`EADDRINUSE`), unrelated to this change.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\n\r\n---\r\n_Generated by [Claude Code](https://claude.ai/code)_\r\n\r\n<!-- AGENT_CANVAS_DOCKER_START -->\r\n---\r\n**🐳 Docker images for this PR**\r\n\r\n• **GH"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18180"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18223,
          "title": "fix(docker): fall back to 0.0.0.0 bind when IPv6 is unavailable",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18223",
          "created_at": "2026-10-09T04:57:35Z",
          "updated_at": "2026-10-09T04:57:49Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b9994a8d734f958f0277958d835409de8c617475",
          "scope": "Selects an IPv4 static-server bind when IPv6 is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying that `--host ::` is not hardcoded, that `::` is selected when IPv6 is available, that `0.0.0.0` is selected when `/proc/net/if_inet6` is missing, and that `OH_BIND_HOST` is respected.\n\n## Issue Number\n\nFixes #18178\n\n## How to Test\n\nRun the docker bind host tests:\n```bash\nnpm test -- __tests__/scripts/docker-bind-host.test.ts\n```\n\nAll 4 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"fixed-entrypoint-canvas\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/2c767fcfb5dc9e11bcf228ca0503a970d8ec1f77/.pr/bugs/2026-10-08/docker-ipv6/fixed-entryp"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18223"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18180,
          "title": "fix(docker): bind the frontend to 0.0.0.0 when the kernel has no IPv6",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18180",
          "created_at": "2026-10-08T17:35:09Z",
          "updated_at": "2026-10-12T15:08:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:25:29Z",
          "closed_at": "2026-10-10T10:25:29Z",
          "head_sha": "60e95f3b6a427a050022fb3f27294f495e526614",
          "scope": "Adds an IPv4 fallback to the static server when IPv6 binding is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " line saying so. Both the main and the `PUBLIC_MODE_PORT` static servers use it.\r\n- The session-key policy block is unchanged: injection still needs `AGENT_CANVAS_ALLOW_LAN_SESSION_KEY=true`.\r\n\r\n## Issue Number\r\n\r\nFixes #18178\r\n\r\n## How to Test\r\n\r\n`bash -n docker/entrypoint.sh`; `npx vitest run __tests__/scripts/docker-session-key-policy.test.ts` → 2 passed.\r\n\r\nLive, on a Linux VM without IPv6 (`/proc/net/if_inet6` absent on the host and in the container), with the CI image of main, `ghcr.io/openhands/agent-canvas:sha-7af57f8`:\r\n\r\n- **Before** (image as built): `docker ",
              "ature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\nThe container exits with status 0 after this crash, so `--restart on-failure` does not restart it; that is left out of this PR and noted in #18178 for a maintainer decision. `PUBLIC_MODE_PORT=8001` collides with the in-image VS Code server (`EADDRINUSE`), unrelated to this change.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\n\r\n---\r\n_Generated by [Claude Code](https://claude.ai/code)_\r\n\r\n<!-- AGENT_CANVAS_DOCKER_START -->\r\n---\r\n**🐳 Docker images for this PR**\r\n\r\n• **GH"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18180"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18223,
          "title": "fix(docker): fall back to 0.0.0.0 bind when IPv6 is unavailable",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18223",
          "created_at": "2026-10-09T04:57:35Z",
          "updated_at": "2026-10-09T04:57:49Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b9994a8d734f958f0277958d835409de8c617475",
          "scope": "Selects an IPv4 static-server bind when IPv6 is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying that `--host ::` is not hardcoded, that `::` is selected when IPv6 is available, that `0.0.0.0` is selected when `/proc/net/if_inet6` is missing, and that `OH_BIND_HOST` is respected.\n\n## Issue Number\n\nFixes #18178\n\n## How to Test\n\nRun the docker bind host tests:\n```bash\nnpm test -- __tests__/scripts/docker-bind-host.test.ts\n```\n\nAll 4 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"fixed-entrypoint-canvas\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/2c767fcfb5dc9e11bcf228ca0503a970d8ec1f77/.pr/bugs/2026-10-08/docker-ipv6/fixed-entryp"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18223"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ive macOS is available, but positive titlebar/fullscreen proof is not-run until an isolated Electron build and native window controls are exercised. A patched-entrypoint historical image is not the released-image proof. #18178 remains linked. |\r\n| README / F27 / setup continuation and tours | Counts/index/source-issue state reconciled; BASE retained. Positive #18138/#18139 continuation/tour flows explicitly remain not live-mapped with their real Enterprise/context prerequisites. |\r\n\r\nExisting issue links are preserved: #18172, #18173, #18178, #18181 and OpenHands/automa",
              "tate reconciled; BASE retained. Positive #18138/#18139 continuation/tour flows explicitly remain not live-mapped with their real Enterprise/context prerequisites. |\r\n\r\nExisting issue links are preserved: #18172, #18173, #18178, #18181 and OpenHands/automation#551. Linked product fix PRs are separate work; no product fix or new issue was filed by this continuation. Do not infer a regression or a merged fix from those links. Current issue/fix status before publication: #18172/#18173/#18178/#18181 remain open; their separate fix PRs#18174/#18175/#18180/#18182 are unmerged."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "screen. #18206 is an agent hook showing `prompt`. software-agent-sdk#5496 is plugin Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | Live result |\n|---|---|---|\n| F05.overflow-menu + Escape gotcha | Escape closes the More input actions menu and returns focus (#1",
              "dently re-run |\n| F25 gotchas | selector-Escape Known failure #18233; probe cadence observation | fail reproduced twice |\n| F26.docker-image | re-dated with an image built from this checkout; concrete build steps | fail #18178 (unpatched), pass with the bind workaround |\n| README | tooltip-reuse note, counts 745, baseline | n/a |\n\n### New defects (filed, with fix PRs)\n\n- #18233 [Bug]: Escape on the closed backend selector clears it. Downshift's default `InputKeyDownEscape` reducer is the cause. Not a regression in range; the behaviour dates from #145. Fix: #18235, verif"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              " taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source-verified only. Both call sites use `SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED`, which is trans"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18180,
          "title": "fix(docker): bind the frontend to 0.0.0.0 when the kernel has no IPv6",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18180",
          "created_at": "2026-10-08T17:35:09Z",
          "updated_at": "2026-10-12T15:08:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:25:29Z",
          "closed_at": "2026-10-10T10:25:29Z",
          "head_sha": "60e95f3b6a427a050022fb3f27294f495e526614",
          "scope": "Adds an IPv4 fallback to the static server when IPv6 binding is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " line saying so. Both the main and the `PUBLIC_MODE_PORT` static servers use it.\r\n- The session-key policy block is unchanged: injection still needs `AGENT_CANVAS_ALLOW_LAN_SESSION_KEY=true`.\r\n\r\n## Issue Number\r\n\r\nFixes #18178\r\n\r\n## How to Test\r\n\r\n`bash -n docker/entrypoint.sh`; `npx vitest run __tests__/scripts/docker-session-key-policy.test.ts` → 2 passed.\r\n\r\nLive, on a Linux VM without IPv6 (`/proc/net/if_inet6` absent on the host and in the container), with the CI image of main, `ghcr.io/openhands/agent-canvas:sha-7af57f8`:\r\n\r\n- **Before** (image as built): `docker ",
              "ature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\nThe container exits with status 0 after this crash, so `--restart on-failure` does not restart it; that is left out of this PR and noted in #18178 for a maintainer decision. `PUBLIC_MODE_PORT=8001` collides with the in-image VS Code server (`EADDRINUSE`), unrelated to this change.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\n\r\n---\r\n_Generated by [Claude Code](https://claude.ai/code)_\r\n\r\n<!-- AGENT_CANVAS_DOCKER_START -->\r\n---\r\n**🐳 Docker images for this PR**\r\n\r\n• **GH"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18180"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18223,
          "title": "fix(docker): fall back to 0.0.0.0 bind when IPv6 is unavailable",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18223",
          "created_at": "2026-10-09T04:57:35Z",
          "updated_at": "2026-10-09T04:57:49Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b9994a8d734f958f0277958d835409de8c617475",
          "scope": "Selects an IPv4 static-server bind when IPv6 is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "` verifying that `--host ::` is not hardcoded, that `::` is selected when IPv6 is available, that `0.0.0.0` is selected when `/proc/net/if_inet6` is missing, and that `OH_BIND_HOST` is respected.\n\n## Issue Number\n\nFixes #18178\n\n## How to Test\n\nRun the docker bind host tests:\n```bash\nnpm test -- __tests__/scripts/docker-bind-host.test.ts\n```\n\nAll 4 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"fixed-entrypoint-canvas\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/2c767fcfb5dc9e11bcf228ca0503a970d8ec1f77/.pr/bugs/2026-10-08/docker-ipv6/fixed-entryp"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18223"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18180,
          "title": "fix(docker): bind the frontend to 0.0.0.0 when the kernel has no IPv6",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18180",
          "created_at": "2026-10-08T17:35:09Z",
          "updated_at": "2026-10-12T15:08:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:25:29Z",
          "closed_at": "2026-10-10T10:25:29Z",
          "head_sha": "60e95f3b6a427a050022fb3f27294f495e526614",
          "scope": "Adds an IPv4 fallback to the static server when IPv6 binding is unavailable.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " line saying so. Both the main and the `PUBLIC_MODE_PORT` static servers use it.\r\n- The session-key policy block is unchanged: injection still needs `AGENT_CANVAS_ALLOW_LAN_SESSION_KEY=true`.\r\n\r\n## Issue Number\r\n\r\nFixes #18178\r\n\r\n## How to Test\r\n\r\n`bash -n docker/entrypoint.sh`; `npx vitest run __tests__/scripts/docker-session-key-policy.test.ts` → 2 passed.\r\n\r\nLive, on a Linux VM without IPv6 (`/proc/net/if_inet6` absent on the host and in the container), with the CI image of main, `ghcr.io/openhands/agent-canvas:sha-7af57f8`:\r\n\r\n- **Before** (image as built): `docker ",
              "ature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [ ] Docs / chore\r\n\r\n## Notes\r\n\r\nThe container exits with status 0 after this crash, so `--restart on-failure` does not restart it; that is left out of this PR and noted in #18178 for a maintainer decision. `PUBLIC_MODE_PORT=8001` collides with the in-image VS Code server (`EADDRINUSE`), unrelated to this change.\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\r\n\r\n\r\n---\r\n_Generated by [Claude Code](https://claude.ai/code)_\r\n\r\n<!-- AGENT_CANVAS_DOCKER_START -->\r\n---\r\n**🐳 Docker images for this PR**\r\n\r\n• **GH"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18180"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18180; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18181,
      "title": "[Bug]: A failed MCP server save, toggle or delete shows two identical error toasts",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18181",
      "created_at": "2026-10-08T17:45:25Z",
      "updated_at": "2026-10-10T10:21:21Z",
      "state": "closed",
      "closed_at": "2026-10-10T10:21:21Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18182,
          "title": "fix(mcp): show one error toast when an MCP server change fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18182",
          "created_at": "2026-10-08T17:45:58Z",
          "updated_at": "2026-10-12T15:08:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:21:20Z",
          "closed_at": "2026-10-10T10:21:20Z",
          "head_sha": "79281049862c3f2140d566ff5ff48fa90f8548b3",
          "scope": "Removes the extra global error toast from add/update/delete MCP mutations; pre-save connection-test duplication was explicitly deferred to separate work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " goes silent.\n- New test `use-mcp-server-mutations-error-toast.test.ts`: with the app's query client, a failed delete and a failed update each show exactly one toast (both fail on main with two).\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\n`npx vitest run __tests__/hooks/mutation/ __tests__/components/features/mcp-page/ __tests__/components/features/conversation/ __tests__/routes/` → 94 files, 887 tests passed; with the hook changes reverted the new test fails (2 toasts). ESLint is clean on the changed files.\n\nLive, on two fresh local stacks (Agent Server 1.53.0), m",
              "eTestMcpServer`) and still shows `An error occurred` twice. The editor's **Test connection** button has no `onError` and relies on the global toast, so silencing the test mutation needs its callers changed too; noted in #18181.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_013ieCEW8u9LSoBj11TFWpJG)_\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/agent-canvas\n\n| Component | Value |\n|---|---|\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18182"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18188,
          "title": "fix(mcp): disable duplicate global toast on MCP mutations",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18188",
          "created_at": "2026-10-08T19:37:06Z",
          "updated_at": "2026-10-09T10:07:34Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c3b5e625a0cb9f84dd5269683f307e4c7ab85c7a",
          "scope": "Disables duplicate global error toasts for add/update/delete MCP mutations and preserves caller error handling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".tsx` backed by `createAgentServerQueryClient()`, asserting exactly one toast for failed delete, update, add, client-side credential rename errors, and zero toasts for inline-only error handlers.\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\nRun the unit test suite:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-mcp-mutations-toast.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"before-stale-delete-double-toast\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/abe3bd95c176e8e75ff643ce3e17efc392a0ca17/.pr/bugs/2026-10-08/mcp-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18188"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18182,
          "title": "fix(mcp): show one error toast when an MCP server change fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18182",
          "created_at": "2026-10-08T17:45:58Z",
          "updated_at": "2026-10-12T15:08:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:21:20Z",
          "closed_at": "2026-10-10T10:21:20Z",
          "head_sha": "79281049862c3f2140d566ff5ff48fa90f8548b3",
          "scope": "Removes the extra global error toast from add/update/delete MCP mutations; pre-save connection-test duplication was explicitly deferred to separate work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " goes silent.\n- New test `use-mcp-server-mutations-error-toast.test.ts`: with the app's query client, a failed delete and a failed update each show exactly one toast (both fail on main with two).\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\n`npx vitest run __tests__/hooks/mutation/ __tests__/components/features/mcp-page/ __tests__/components/features/conversation/ __tests__/routes/` → 94 files, 887 tests passed; with the hook changes reverted the new test fails (2 toasts). ESLint is clean on the changed files.\n\nLive, on two fresh local stacks (Agent Server 1.53.0), m",
              "eTestMcpServer`) and still shows `An error occurred` twice. The editor's **Test connection** button has no `onError` and relies on the global toast, so silencing the test mutation needs its callers changed too; noted in #18181.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_013ieCEW8u9LSoBj11TFWpJG)_\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/agent-canvas\n\n| Component | Value |\n|---|---|\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18182"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18188,
          "title": "fix(mcp): disable duplicate global toast on MCP mutations",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18188",
          "created_at": "2026-10-08T19:37:06Z",
          "updated_at": "2026-10-09T10:07:34Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c3b5e625a0cb9f84dd5269683f307e4c7ab85c7a",
          "scope": "Disables duplicate global error toasts for add/update/delete MCP mutations and preserves caller error handling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".tsx` backed by `createAgentServerQueryClient()`, asserting exactly one toast for failed delete, update, add, client-side credential rename errors, and zero toasts for inline-only error handlers.\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\nRun the unit test suite:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-mcp-mutations-toast.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"before-stale-delete-double-toast\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/abe3bd95c176e8e75ff643ce3e17efc392a0ca17/.pr/bugs/2026-10-08/mcp-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18188"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18183,
          "title": "docs(verify-openhands): map maintenance 2026-10-08",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18183",
          "created_at": "2026-10-08T17:47:01Z",
          "updated_at": "2026-10-12T15:08:38Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "closed_at": "2026-10-09T04:25:22Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "wn hint and two generic error toasts are a separate Expected/Known failure path; fresh literal verification is still required for that observation. |\r\n| F17 duplicate-error gotcha | Known duplicate MCP error toast links #18181; fresh consumer rerun remains pending. |\r\n| F26.docker-image/desktop-macos-titlebar | Blocked: Docker CLI/daemon and a real built image are unavailable/unexecuted; Helm needs its absent CLI and a real cluster. Native macOS is available, but positive titlebar/fullscreen proof is not-run until an isolated Electron build and native window controls ar",
              "onciled; BASE retained. Positive #18138/#18139 continuation/tour flows explicitly remain not live-mapped with their real Enterprise/context prerequisites. |\r\n\r\nExisting issue links are preserved: #18172, #18173, #18178, #18181 and OpenHands/automation#551. Linked product fix PRs are separate work; no product fix or new issue was filed by this continuation. Do not infer a regression or a merged fix from those links. Current issue/fix status before publication: #18172/#18173/#18178/#18181 remain open; their separate fix PRs#18174/#18175/#18180/#18182 are unmerged. Automat"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18183"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "|\n\nEvery fail is a known or newly filed defect, each kept as Expected + Known failure. #18063 is the overflow Model submenu off-screen. #18206 is an agent hook showing `prompt`. software-agent-sdk#5496 is plugin Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | L",
              "githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F07.hooks-modal-agent-prompt-fail-18206.png);''``` F17 two identical toasts on an already-removed server (#18181) [F17 18181](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F17.delete-server-fail-18181.png);''``` F19 source reads `local` so Update fails (sdk#5496) [F19 5496](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18325,
          "title": "docs(verify-openhands): map maintenance 2026-10-12",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18325",
          "created_at": "2026-10-12T07:48:05Z",
          "updated_at": "2026-10-12T19:34:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T17:44:03Z",
          "closed_at": "2026-10-12T17:44:03Z",
          "head_sha": "f6990463c4223f3099be60dcdb91ab6915c89417",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "coverage and closure checks remain incomplete.\n\nProven rows: `F17.save-as-secret` native keyboard/theme selection passes; `F17.delete-server` / `F17.enable-disable` stale 404 paths each show one toast after #18182 fixed #18181. `F18.facets` duplicates a local source after filter changes, matching existing #18287 (origin unconfirmed; no causal regression claim). Desktop and phone, actual Local SDK/Agent Server 1.54.0 + automation 1.19.3, independently fresh stacks; all stopped. No new issue, product fix, provider key, model or mock; USD 0/10.\n\nScoped outcomes: latest roo"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18325"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "tion resolves its group)\n  - #17926 (F05 fast draft flush)\n  - #17928 (F06 Ctrl shortcuts)\n  - #17938 (F10/F13 taken-name message)\n  - #17957 (F18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#1830"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18182,
          "title": "fix(mcp): show one error toast when an MCP server change fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18182",
          "created_at": "2026-10-08T17:45:58Z",
          "updated_at": "2026-10-12T15:08:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:21:20Z",
          "closed_at": "2026-10-10T10:21:20Z",
          "head_sha": "79281049862c3f2140d566ff5ff48fa90f8548b3",
          "scope": "Removes the extra global error toast from add/update/delete MCP mutations; pre-save connection-test duplication was explicitly deferred to separate work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " goes silent.\n- New test `use-mcp-server-mutations-error-toast.test.ts`: with the app's query client, a failed delete and a failed update each show exactly one toast (both fail on main with two).\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\n`npx vitest run __tests__/hooks/mutation/ __tests__/components/features/mcp-page/ __tests__/components/features/conversation/ __tests__/routes/` → 94 files, 887 tests passed; with the hook changes reverted the new test fails (2 toasts). ESLint is clean on the changed files.\n\nLive, on two fresh local stacks (Agent Server 1.53.0), m",
              "eTestMcpServer`) and still shows `An error occurred` twice. The editor's **Test connection** button has no `onError` and relies on the global toast, so silencing the test mutation needs its callers changed too; noted in #18181.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_013ieCEW8u9LSoBj11TFWpJG)_\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/agent-canvas\n\n| Component | Value |\n|---|---|\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18182"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18188,
          "title": "fix(mcp): disable duplicate global toast on MCP mutations",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18188",
          "created_at": "2026-10-08T19:37:06Z",
          "updated_at": "2026-10-09T10:07:34Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "c3b5e625a0cb9f84dd5269683f307e4c7ab85c7a",
          "scope": "Disables duplicate global error toasts for add/update/delete MCP mutations and preserves caller error handling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".tsx` backed by `createAgentServerQueryClient()`, asserting exactly one toast for failed delete, update, add, client-side credential rename errors, and zero toasts for inline-only error handlers.\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\nRun the unit test suite:\n```bash\nnpx vitest run __tests__/hooks/mutation/use-mcp-mutations-toast.test.tsx\n```\n\nAll 5 tests pass.\n\n## Video/Screenshots\n\n<img width=\"800\" alt=\"before-stale-delete-double-toast\" src=\"https://raw.githubusercontent.com/OpenHands/OpenHands/abe3bd95c176e8e75ff643ce3e17efc392a0ca17/.pr/bugs/2026-10-08/mcp-"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18188"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18182,
          "title": "fix(mcp): show one error toast when an MCP server change fails",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18182",
          "created_at": "2026-10-08T17:45:58Z",
          "updated_at": "2026-10-12T15:08:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:21:20Z",
          "closed_at": "2026-10-10T10:21:20Z",
          "head_sha": "79281049862c3f2140d566ff5ff48fa90f8548b3",
          "scope": "Removes the extra global error toast from add/update/delete MCP mutations; pre-save connection-test duplication was explicitly deferred to separate work.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " goes silent.\n- New test `use-mcp-server-mutations-error-toast.test.ts`: with the app's query client, a failed delete and a failed update each show exactly one toast (both fail on main with two).\n\n## Issue Number\n\nFixes #18181\n\n## How to Test\n\n`npx vitest run __tests__/hooks/mutation/ __tests__/components/features/mcp-page/ __tests__/components/features/conversation/ __tests__/routes/` → 94 files, 887 tests passed; with the hook changes reverted the new test fails (2 toasts). ESLint is clean on the changed files.\n\nLive, on two fresh local stacks (Agent Server 1.53.0), m",
              "eTestMcpServer`) and still shows `An error occurred` twice. The editor's **Test connection** button has no `onError` and relies on the global toast, so silencing the test mutation needs its callers changed too; noted in #18181.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_013ieCEW8u9LSoBj11TFWpJG)_\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR package:** https://github.com/OpenHands/OpenHands/pkgs/container/agent-canvas\n\n| Component | Value |\n|---|---|\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18182"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18182; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18192,
      "title": "Protect divider and toggle appearance with scoped no-restyle lint contracts",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18192",
      "created_at": "2026-10-08T22:41:41Z",
      "updated_at": "2026-10-10T10:19:36Z",
      "state": "closed",
      "closed_at": "2026-10-10T10:19:36Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18194,
          "title": "chore(lint): protect divider and toggle appearance contracts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18194",
          "created_at": "2026-10-08T22:44:10Z",
          "updated_at": "2026-10-12T15:08:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "closed_at": "2026-10-10T10:19:34Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Enables the requested scoped no-restyle lint contracts for divider and toggle appearances.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tive internals. The probe checks which usages are flagged without relying on diagnostic order or per-class count. No product source, rendered classes, dependencies, or component APIs change.\r\n\r\n## Issue Number\r\n\r\nCloses #18192.\r\n\r\n## How to Test\r\n\r\nBase: `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` (current main when this work started). Validation used the committed lockfile with `npm ci --ignore-scripts --no-audit --no-fund`; tests and lint ran with Node 24.19.0.\r\n\r\n1. `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18194"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18227,
          "title": "feat(lint): protect divider and toggle appearance with scoped no-restyle contracts",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18227",
          "created_at": "2026-10-09T06:17:47Z",
          "updated_at": "2026-10-10T22:14:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e068b4713ed6e1f41feba79fd736fba3eac956ef",
          "scope": "Proposes scoped no-restyle lint contracts for divider and toggle appearance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "shadcn/no-restyle` was previously disabled (`off`), allowing consumers of shared primitives to override internal divider and toggle styling with custom colors, shapes, or spacing rather than using component props (issue #18192).\n\n## Summary\n\n- Enabled `@shadcn/lint`'s `shadcn/no-restyle` rule with scoped `componentImports` and `contracts` for `Divider`, `ToggleSwitch`, and `ToggleSwitchVisual`.\n- Allowed `layout` utilities across all three primitives while reserving color, shape, and internal padding/margin to the component primitives.\n- Permitted `opacity-*` on `Toggle",
              "s/toggle-switch` re-export.\n- Exempted `src/ui/**/*.{ts,tsx}` primitive definitions from `shadcn/no-restyle`.\n- Added automated ESLint policy tests in `__tests__/scripts/no-restyle-lint.test.ts`.\n\n## Issue Number\n\nFixes #18192\n\n## How to Test\n\nRun the lint policy tests and full repo lint:\n```bash\nnpm test -- __tests__/scripts/no-restyle-lint.test.ts\nnpm run lint\n```\n\nAll tests and lint checks pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-restyle-lint-policy\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\""
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18227"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18194,
          "title": "chore(lint): protect divider and toggle appearance contracts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18194",
          "created_at": "2026-10-08T22:44:10Z",
          "updated_at": "2026-10-12T15:08:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "closed_at": "2026-10-10T10:19:34Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Enables the requested scoped no-restyle lint contracts for divider and toggle appearances.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tive internals. The probe checks which usages are flagged without relying on diagnostic order or per-class count. No product source, rendered classes, dependencies, or component APIs change.\r\n\r\n## Issue Number\r\n\r\nCloses #18192.\r\n\r\n## How to Test\r\n\r\nBase: `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` (current main when this work started). Validation used the committed lockfile with `npm ci --ignore-scripts --no-audit --no-fund`; tests and lint ran with Node 24.19.0.\r\n\r\n1. `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18194"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18227,
          "title": "feat(lint): protect divider and toggle appearance with scoped no-restyle contracts",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18227",
          "created_at": "2026-10-09T06:17:47Z",
          "updated_at": "2026-10-10T22:14:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e068b4713ed6e1f41feba79fd736fba3eac956ef",
          "scope": "Proposes scoped no-restyle lint contracts for divider and toggle appearance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "shadcn/no-restyle` was previously disabled (`off`), allowing consumers of shared primitives to override internal divider and toggle styling with custom colors, shapes, or spacing rather than using component props (issue #18192).\n\n## Summary\n\n- Enabled `@shadcn/lint`'s `shadcn/no-restyle` rule with scoped `componentImports` and `contracts` for `Divider`, `ToggleSwitch`, and `ToggleSwitchVisual`.\n- Allowed `layout` utilities across all three primitives while reserving color, shape, and internal padding/margin to the component primitives.\n- Permitted `opacity-*` on `Toggle",
              "s/toggle-switch` re-export.\n- Exempted `src/ui/**/*.{ts,tsx}` primitive definitions from `shadcn/no-restyle`.\n- Added automated ESLint policy tests in `__tests__/scripts/no-restyle-lint.test.ts`.\n\n## Issue Number\n\nFixes #18192\n\n## How to Test\n\nRun the lint policy tests and full repo lint:\n```bash\nnpm test -- __tests__/scripts/no-restyle-lint.test.ts\nnpm run lint\n```\n\nAll tests and lint checks pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-restyle-lint-policy\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\""
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18227"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18194,
          "title": "chore(lint): protect divider and toggle appearance contracts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18194",
          "created_at": "2026-10-08T22:44:10Z",
          "updated_at": "2026-10-12T15:08:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "closed_at": "2026-10-10T10:19:34Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Enables the requested scoped no-restyle lint contracts for divider and toggle appearances.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tive internals. The probe checks which usages are flagged without relying on diagnostic order or per-class count. No product source, rendered classes, dependencies, or component APIs change.\r\n\r\n## Issue Number\r\n\r\nCloses #18192.\r\n\r\n## How to Test\r\n\r\nBase: `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` (current main when this work started). Validation used the committed lockfile with `npm ci --ignore-scripts --no-audit --no-fund`; tests and lint ran with Node 24.19.0.\r\n\r\n1. `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18194"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18227,
          "title": "feat(lint): protect divider and toggle appearance with scoped no-restyle contracts",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18227",
          "created_at": "2026-10-09T06:17:47Z",
          "updated_at": "2026-10-10T22:14:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e068b4713ed6e1f41feba79fd736fba3eac956ef",
          "scope": "Proposes scoped no-restyle lint contracts for divider and toggle appearance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "shadcn/no-restyle` was previously disabled (`off`), allowing consumers of shared primitives to override internal divider and toggle styling with custom colors, shapes, or spacing rather than using component props (issue #18192).\n\n## Summary\n\n- Enabled `@shadcn/lint`'s `shadcn/no-restyle` rule with scoped `componentImports` and `contracts` for `Divider`, `ToggleSwitch`, and `ToggleSwitchVisual`.\n- Allowed `layout` utilities across all three primitives while reserving color, shape, and internal padding/margin to the component primitives.\n- Permitted `opacity-*` on `Toggle",
              "s/toggle-switch` re-export.\n- Exempted `src/ui/**/*.{ts,tsx}` primitive definitions from `shadcn/no-restyle`.\n- Added automated ESLint policy tests in `__tests__/scripts/no-restyle-lint.test.ts`.\n\n## Issue Number\n\nFixes #18192\n\n## How to Test\n\nRun the lint policy tests and full repo lint:\n```bash\nnpm test -- __tests__/scripts/no-restyle-lint.test.ts\nnpm run lint\n```\n\nAll tests and lint checks pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-restyle-lint-policy\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\""
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18227"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18194,
          "title": "chore(lint): protect divider and toggle appearance contracts",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18194",
          "created_at": "2026-10-08T22:44:10Z",
          "updated_at": "2026-10-12T15:08:09Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "closed_at": "2026-10-10T10:19:34Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Enables the requested scoped no-restyle lint contracts for divider and toggle appearances.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tive internals. The probe checks which usages are flagged without relying on diagnostic order or per-class count. No product source, rendered classes, dependencies, or component APIs change.\r\n\r\n## Issue Number\r\n\r\nCloses #18192.\r\n\r\n## How to Test\r\n\r\nBase: `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` (current main when this work started). Validation used the committed lockfile with `npm ci --ignore-scripts --no-audit --no-fund`; tests and lint ran with Node 24.19.0.\r\n\r\n1. `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/stati"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18194"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18194; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18193,
      "title": "Keep sibling Settings and Customize pages reachable on tablets",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18193",
      "created_at": "2026-10-08T22:43:04Z",
      "updated_at": "2026-10-11T00:05:16Z",
      "state": "closed",
      "closed_at": "2026-10-11T00:05:16Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18200,
          "title": "feat: add compact section navigation on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18200",
          "created_at": "2026-10-08T23:33:04Z",
          "updated_at": "2026-10-12T15:07:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "closed_at": "2026-10-11T00:05:15Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Adds the requested compact tablet navigation for sibling Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " F09/F17 verification recipes. The branch includes current main and has **no changes to the recording harness or SKILL.md**. Verification uses main’s merged `browser record` command from #18211.\n\n## Issue Number\n\nCloses #18193 (`ready-for-dev`), following the tablet layout work in #17910.\n\n## How to Test\n\n### Main integration — 9 October 2026\n\nMerged main at `95dcdcdf12bd78f02c52b80cccf2f5f4f35242a4`, retaining both source anchors in the MCP feature-map conflict. The first combined CI run passed 8,656 tests and failed only the shipped-map total: the two tablet entries m"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18200"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18232,
          "title": "feat(navigation): keep sibling settings and customize pages reachable on tablets",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18232",
          "created_at": "2026-10-09T08:21:19Z",
          "updated_at": "2026-10-09T08:39:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e32bd801a0322d5cad5d1c91bcbfb8a90ee81e66",
          "scope": "Adds tablet sibling navigation for Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or content, while the phone Back bar is also hidden. To switch between sibling sections (e.g. from MCP Servers to Skills, or from Agent to LLM Profiles), users had to navigate back to the hub via the main sidebar (issue #18193).\n\n## Summary\n\n- Created `TabletSiblingNav` (`src/components/shared/tablet-sibling-nav.tsx`), a compact dropdown control displayed only at tablet widths (`hidden md:block lg:hidden`), which displays the current section name and exposes sibling destinations directly.\n- Implemented `TabletSettingsNav` and `TabletCustomizeNav` to feed authoritative n",
              "px) and desktop secondary sidebar behavior (>=1024px) with zero horizontal overflow.\n- Updated F09 and F17 feature maps and added responsive assertions in `tests/e2e/settings-responsive.spec.ts`.\n\n## Issue Number\n\nFixes #18193\n\n## How to Test\n\nRun the tablet sibling navigation and settings tests:\n```bash\nnpm test -- __tests__/components/shared/tablet-sibling-nav.test.tsx \\\n  __tests__/components/features/settings/tablet-settings-nav.test.tsx \\\n  __tests__/components/features/skills/tablet-customize-nav.test.tsx\n```\n\nAll 14 tests pass cleanly.\n\n## Video/Screenshots\n\n<img"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18232"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18200,
          "title": "feat: add compact section navigation on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18200",
          "created_at": "2026-10-08T23:33:04Z",
          "updated_at": "2026-10-12T15:07:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "closed_at": "2026-10-11T00:05:15Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Adds the requested compact tablet navigation for sibling Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " F09/F17 verification recipes. The branch includes current main and has **no changes to the recording harness or SKILL.md**. Verification uses main’s merged `browser record` command from #18211.\n\n## Issue Number\n\nCloses #18193 (`ready-for-dev`), following the tablet layout work in #17910.\n\n## How to Test\n\n### Main integration — 9 October 2026\n\nMerged main at `95dcdcdf12bd78f02c52b80cccf2f5f4f35242a4`, retaining both source anchors in the MCP feature-map conflict. The first combined CI run passed 8,656 tests and failed only the shipped-map total: the two tablet entries m"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18200"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18232,
          "title": "feat(navigation): keep sibling settings and customize pages reachable on tablets",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18232",
          "created_at": "2026-10-09T08:21:19Z",
          "updated_at": "2026-10-09T08:39:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e32bd801a0322d5cad5d1c91bcbfb8a90ee81e66",
          "scope": "Adds tablet sibling navigation for Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or content, while the phone Back bar is also hidden. To switch between sibling sections (e.g. from MCP Servers to Skills, or from Agent to LLM Profiles), users had to navigate back to the hub via the main sidebar (issue #18193).\n\n## Summary\n\n- Created `TabletSiblingNav` (`src/components/shared/tablet-sibling-nav.tsx`), a compact dropdown control displayed only at tablet widths (`hidden md:block lg:hidden`), which displays the current section name and exposes sibling destinations directly.\n- Implemented `TabletSettingsNav` and `TabletCustomizeNav` to feed authoritative n",
              "px) and desktop secondary sidebar behavior (>=1024px) with zero horizontal overflow.\n- Updated F09 and F17 feature maps and added responsive assertions in `tests/e2e/settings-responsive.spec.ts`.\n\n## Issue Number\n\nFixes #18193\n\n## How to Test\n\nRun the tablet sibling navigation and settings tests:\n```bash\nnpm test -- __tests__/components/shared/tablet-sibling-nav.test.tsx \\\n  __tests__/components/features/settings/tablet-settings-nav.test.tsx \\\n  __tests__/components/features/skills/tablet-customize-nav.test.tsx\n```\n\nAll 14 tests pass cleanly.\n\n## Video/Screenshots\n\n<img"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18232"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18200,
          "title": "feat: add compact section navigation on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18200",
          "created_at": "2026-10-08T23:33:04Z",
          "updated_at": "2026-10-12T15:07:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "closed_at": "2026-10-11T00:05:15Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Adds the requested compact tablet navigation for sibling Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " F09/F17 verification recipes. The branch includes current main and has **no changes to the recording harness or SKILL.md**. Verification uses main’s merged `browser record` command from #18211.\n\n## Issue Number\n\nCloses #18193 (`ready-for-dev`), following the tablet layout work in #17910.\n\n## How to Test\n\n### Main integration — 9 October 2026\n\nMerged main at `95dcdcdf12bd78f02c52b80cccf2f5f4f35242a4`, retaining both source anchors in the MCP feature-map conflict. The first combined CI run passed 8,656 tests and failed only the shipped-map total: the two tablet entries m"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18200"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18232,
          "title": "feat(navigation): keep sibling settings and customize pages reachable on tablets",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18232",
          "created_at": "2026-10-09T08:21:19Z",
          "updated_at": "2026-10-09T08:39:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "e32bd801a0322d5cad5d1c91bcbfb8a90ee81e66",
          "scope": "Adds tablet sibling navigation for Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "or content, while the phone Back bar is also hidden. To switch between sibling sections (e.g. from MCP Servers to Skills, or from Agent to LLM Profiles), users had to navigate back to the hub via the main sidebar (issue #18193).\n\n## Summary\n\n- Created `TabletSiblingNav` (`src/components/shared/tablet-sibling-nav.tsx`), a compact dropdown control displayed only at tablet widths (`hidden md:block lg:hidden`), which displays the current section name and exposes sibling destinations directly.\n- Implemented `TabletSettingsNav` and `TabletCustomizeNav` to feed authoritative n",
              "px) and desktop secondary sidebar behavior (>=1024px) with zero horizontal overflow.\n- Updated F09 and F17 feature maps and added responsive assertions in `tests/e2e/settings-responsive.spec.ts`.\n\n## Issue Number\n\nFixes #18193\n\n## How to Test\n\nRun the tablet sibling navigation and settings tests:\n```bash\nnpm test -- __tests__/components/shared/tablet-sibling-nav.test.tsx \\\n  __tests__/components/features/settings/tablet-settings-nav.test.tsx \\\n  __tests__/components/features/skills/tablet-customize-nav.test.tsx\n```\n\nAll 14 tests pass cleanly.\n\n## Video/Screenshots\n\n<img"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18232"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18200,
          "title": "feat: add compact section navigation on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18200",
          "created_at": "2026-10-08T23:33:04Z",
          "updated_at": "2026-10-12T15:07:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "closed_at": "2026-10-11T00:05:15Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Adds the requested compact tablet navigation for sibling Settings and Customize sections.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " F09/F17 verification recipes. The branch includes current main and has **no changes to the recording harness or SKILL.md**. Verification uses main’s merged `browser record` command from #18211.\n\n## Issue Number\n\nCloses #18193 (`ready-for-dev`), following the tablet layout work in #17910.\n\n## How to Test\n\n### Main integration — 9 October 2026\n\nMerged main at `95dcdcdf12bd78f02c52b80cccf2f5f4f35242a4`, retaining both source anchors in the MCP feature-map conflict. The first combined CI run passed 8,656 tests and failed only the shipped-map total: the two tablet entries m"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18200"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18200; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18195,
      "title": "[Bug]: Edit backend dialog clips its controls at phone width",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18195",
      "created_at": "2026-10-08T22:57:32Z",
      "updated_at": "2026-10-09T12:49:01Z",
      "state": "closed",
      "closed_at": "2026-10-09T12:49:01Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18219,
          "title": "fix: fit Edit backend dialog to small viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18219",
          "created_at": "2026-10-09T03:53:44Z",
          "updated_at": "2026-10-12T15:08:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T12:48:59Z",
          "closed_at": "2026-10-09T12:48:59Z",
          "head_sha": "302014f543f3ddd4987123954ebaa11d2305c540",
          "scope": "Caps Edit backend dialog width and height and makes its form scroll on small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " desktop width.\n- Limit height to 92dvh and scroll the form internally; the title and close control remain visible.\n- Add a regression contract test and extend the F25 phone verification recipe.\n\n## Issue Number\n\nCloses #18195 (`bug`, `ready-for-dev`).\n\n## How to Test\n\nVerified through `verify-openhands` with production builds and a **real Local Agent Server/SDK 1.53.0**, automation 1.19.0, Chrome 155, English and the default neutral theme. Both runs used fresh isolated state on the same ports. No LLM is needed or was called.\n\nBefore: current-main starting point `937d0d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18219"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18216,
          "title": "fix(backends): cap the Edit backend modal to the viewport at phone widths",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18216",
          "created_at": "2026-10-09T03:31:46Z",
          "updated_at": "2026-10-09T13:12:45Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T13:12:45Z",
          "head_sha": "134bc5e57df795fa8e4fa0a98faafa9c88c7ec2f",
          "scope": "Caps Edit backend modal dimensions and scrolls its form at small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vh]` and an internal `overflow-y-auto` form region, close control kept outside it.\n- Tests: new edit-mode viewport-fit contract tests (token pin, body class list, scroll region, close placement).\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\n1. Open the app at a 390×844 viewport (or 320px wide), go to **Manage Backends** → **Edit** a backend. The dialog fits inside the viewport; the title, close, Cancel, and Save controls are visible; at desktop width the dialog is still the compact 520px editor.\n2. Force validation state (clear the name) and confirm the fields and ac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18216"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18220,
          "title": "fix(backends): cap edit backend dialog width to viewport and enable vertical scrolling",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18220",
          "created_at": "2026-10-09T04:22:23Z",
          "updated_at": "2026-10-10T23:01:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "438089e859b483e41bfd94fdf88e5d00e7229bc0",
          "scope": "Caps Edit backend dialog width and enables vertical scrolling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt beyond the visible height.\n- Added regression unit test in `__tests__/components/backends/backend-form-modal.test.tsx` verifying that the edit modal body carries the shared tokens and classes.\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\nRun the backend form modal tests:\n```bash\nnpm test -- __tests__/components/backends/backend-form-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"390\" alt=\"edit-backend-clipped\" src=\"https://raw.githubusercontent.com/enyst/enyst.github.io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-valid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18220"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18216,
          "title": "fix(backends): cap the Edit backend modal to the viewport at phone widths",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18216",
          "created_at": "2026-10-09T03:31:46Z",
          "updated_at": "2026-10-09T13:12:45Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T13:12:45Z",
          "head_sha": "134bc5e57df795fa8e4fa0a98faafa9c88c7ec2f",
          "scope": "Caps Edit backend modal dimensions and scrolls its form at small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vh]` and an internal `overflow-y-auto` form region, close control kept outside it.\n- Tests: new edit-mode viewport-fit contract tests (token pin, body class list, scroll region, close placement).\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\n1. Open the app at a 390×844 viewport (or 320px wide), go to **Manage Backends** → **Edit** a backend. The dialog fits inside the viewport; the title, close, Cancel, and Save controls are visible; at desktop width the dialog is still the compact 520px editor.\n2. Force validation state (clear the name) and confirm the fields and ac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18216"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18219,
          "title": "fix: fit Edit backend dialog to small viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18219",
          "created_at": "2026-10-09T03:53:44Z",
          "updated_at": "2026-10-12T15:08:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T12:48:59Z",
          "closed_at": "2026-10-09T12:48:59Z",
          "head_sha": "302014f543f3ddd4987123954ebaa11d2305c540",
          "scope": "Caps Edit backend dialog width and height and makes its form scroll on small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " desktop width.\n- Limit height to 92dvh and scroll the form internally; the title and close control remain visible.\n- Add a regression contract test and extend the F25 phone verification recipe.\n\n## Issue Number\n\nCloses #18195 (`bug`, `ready-for-dev`).\n\n## How to Test\n\nVerified through `verify-openhands` with production builds and a **real Local Agent Server/SDK 1.53.0**, automation 1.19.0, Chrome 155, English and the default neutral theme. Both runs used fresh isolated state on the same ports. No LLM is needed or was called.\n\nBefore: current-main starting point `937d0d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18219"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18220,
          "title": "fix(backends): cap edit backend dialog width to viewport and enable vertical scrolling",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18220",
          "created_at": "2026-10-09T04:22:23Z",
          "updated_at": "2026-10-10T23:01:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "438089e859b483e41bfd94fdf88e5d00e7229bc0",
          "scope": "Caps Edit backend dialog width and enables vertical scrolling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt beyond the visible height.\n- Added regression unit test in `__tests__/components/backends/backend-form-modal.test.tsx` verifying that the edit modal body carries the shared tokens and classes.\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\nRun the backend form modal tests:\n```bash\nnpm test -- __tests__/components/backends/backend-form-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"390\" alt=\"edit-backend-clipped\" src=\"https://raw.githubusercontent.com/enyst/enyst.github.io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-valid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18220"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18199,
          "title": "fix: use theme colors for form validation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18199",
          "created_at": "2026-10-08T23:33:02Z",
          "updated_at": "2026-10-12T15:08:36Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T07:29:47Z",
          "closed_at": "2026-10-09T07:29:47Z",
          "head_sha": "091d6e62ded74c586a2157adf7cf82617a655e23",
          "scope": "Uses theme colors for form validation and records the phone layout defect found during testing.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ext token remains a design follow-up in #18004. No palette values are changed.\n\nThe phone pass found an existing layout bug: Edit backend keeps a 520px width at a 390px viewport, clipping controls. Tracked separately at https://github.com/OpenHands/OpenHands/issues/18195. This change does not alter dialog layout.\n"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18199"
            ]
          },
          "direct_closer": false,
          "reason": "The PR explicitly states dialog layout is unchanged and tracks #18195 separately."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18219,
          "title": "fix: fit Edit backend dialog to small viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18219",
          "created_at": "2026-10-09T03:53:44Z",
          "updated_at": "2026-10-12T15:08:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T12:48:59Z",
          "closed_at": "2026-10-09T12:48:59Z",
          "head_sha": "302014f543f3ddd4987123954ebaa11d2305c540",
          "scope": "Caps Edit backend dialog width and height and makes its form scroll on small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " desktop width.\n- Limit height to 92dvh and scroll the form internally; the title and close control remain visible.\n- Add a regression contract test and extend the F25 phone verification recipe.\n\n## Issue Number\n\nCloses #18195 (`bug`, `ready-for-dev`).\n\n## How to Test\n\nVerified through `verify-openhands` with production builds and a **real Local Agent Server/SDK 1.53.0**, automation 1.19.0, Chrome 155, English and the default neutral theme. Both runs used fresh isolated state on the same ports. No LLM is needed or was called.\n\nBefore: current-main starting point `937d0d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18219"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18220,
          "title": "fix(backends): cap edit backend dialog width to viewport and enable vertical scrolling",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18220",
          "created_at": "2026-10-09T04:22:23Z",
          "updated_at": "2026-10-10T23:01:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "438089e859b483e41bfd94fdf88e5d00e7229bc0",
          "scope": "Caps Edit backend dialog width and enables vertical scrolling.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt beyond the visible height.\n- Added regression unit test in `__tests__/components/backends/backend-form-modal.test.tsx` verifying that the edit modal body carries the shared tokens and classes.\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\nRun the backend form modal tests:\n```bash\nnpm test -- __tests__/components/backends/backend-form-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"390\" alt=\"edit-backend-clipped\" src=\"https://raw.githubusercontent.com/enyst/enyst.github.io/412df47c056f21405d646fee8c50118602cb688a/assets/openhands/theme-valid"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18220"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18219,
          "title": "fix: fit Edit backend dialog to small viewports",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18219",
          "created_at": "2026-10-09T03:53:44Z",
          "updated_at": "2026-10-12T15:08:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T12:48:59Z",
          "closed_at": "2026-10-09T12:48:59Z",
          "head_sha": "302014f543f3ddd4987123954ebaa11d2305c540",
          "scope": "Caps Edit backend dialog width and height and makes its form scroll on small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " desktop width.\n- Limit height to 92dvh and scroll the form internally; the title and close control remain visible.\n- Add a regression contract test and extend the F25 phone verification recipe.\n\n## Issue Number\n\nCloses #18195 (`bug`, `ready-for-dev`).\n\n## How to Test\n\nVerified through `verify-openhands` with production builds and a **real Local Agent Server/SDK 1.53.0**, automation 1.19.0, Chrome 155, English and the default neutral theme. Both runs used fresh isolated state on the same ports. No LLM is needed or was called.\n\nBefore: current-main starting point `937d0d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18219"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18216,
          "title": "fix(backends): cap the Edit backend modal to the viewport at phone widths",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18216",
          "created_at": "2026-10-09T03:31:46Z",
          "updated_at": "2026-10-09T13:12:45Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T13:12:45Z",
          "head_sha": "134bc5e57df795fa8e4fa0a98faafa9c88c7ec2f",
          "scope": "Caps Edit backend modal dimensions and scrolls its form at small viewports.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "vh]` and an internal `overflow-y-auto` form region, close control kept outside it.\n- Tests: new edit-mode viewport-fit contract tests (token pin, body class list, scroll region, close placement).\n\n## Issue Number\n\nFixes #18195\n\n## How to Test\n\n1. Open the app at a 390×844 viewport (or 320px wide), go to **Manage Backends** → **Edit** a backend. The dialog fits inside the viewport; the title, close, Cancel, and Save controls are visible; at desktop width the dialog is still the compact 520px editor.\n2. Force validation state (clear the name) and confirm the fields and ac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18216"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18219; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18196,
      "title": "[Bug]: Canvas App trust confirmation lets keyboard focus activate background Update",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18196",
      "created_at": "2026-10-08T23:08:08Z",
      "updated_at": "2026-10-09T21:41:28Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18197,
          "title": "fix(a11y): contain focus in Canvas App trust confirmation",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18197",
          "created_at": "2026-10-08T23:21:12Z",
          "updated_at": "2026-10-14T04:29:37Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "02f372cef169b25d3435f506771a5b9c31d3388a",
          "scope": "Contains keyboard focus within the Canvas App trust confirmation and restores focus on close.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ore focus to the opener when the dialog closes, if that element still exists.\n- Add route-level regression tests and commit authentic before/after videos of the same Space → Tab → Enter sequence.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\n1. Start Canvas and install the repository's `tests/fixtures/canvas-extensions/demo-page` app disabled. On `/apps`, focus its Enable switch.\n2. Press Space. **Before:** the trust dialog opens but focus stays on the switch; Tab reaches the background Update button and Enter sends `POST /api/canvas-extensions/install`, leaving the d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18197"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18222,
          "title": "fix(modals): manage initial focus, trap focus, and restore focus on ConfirmationModal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18222",
          "created_at": "2026-10-09T04:44:13Z",
          "updated_at": "2026-10-13T18:45:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8c0d9eeb43172b2eb565e2d891b18808af249532",
          "scope": "Adds initial focus, keyboard focus containment and restoration to confirmation dialogs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "res focus to the opener element upon dismissal.\n\n---\n\nAGENT:\n\n## Why\n\nIn `src/components/shared/modals/confirmation-modal.tsx`, `ConfirmationModal` used `ModalBackdrop` for dismissal but managed no keyboard focus (issue #18196). When opened from an interactive element (e.g., an app's Enable switch), focus remained on the background page, allowing Tab and Enter to activate obscured background actions (such as an app Update button) while the confirmation dialog remained open.\n\n## Summary\n\n- Added initial focus management to `ConfirmationModal` to focus the first enabled c",
              "sal when the opener remains in the DOM.\n- Added comprehensive unit test suite in `__tests__/components/shared/modals/confirmation-modal.test.tsx` and updated `mock-llm-canvas-extensions.spec.ts`.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\nRun the confirmation modal test suite:\n```bash\nnpm test -- __tests__/components/shared/modals/confirmation-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"confirmation-modal-focus-containment\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n``"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18222"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18197,
          "title": "fix(a11y): contain focus in Canvas App trust confirmation",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18197",
          "created_at": "2026-10-08T23:21:12Z",
          "updated_at": "2026-10-14T04:29:37Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "02f372cef169b25d3435f506771a5b9c31d3388a",
          "scope": "Contains keyboard focus within the Canvas App trust confirmation and restores focus on close.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ore focus to the opener when the dialog closes, if that element still exists.\n- Add route-level regression tests and commit authentic before/after videos of the same Space → Tab → Enter sequence.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\n1. Start Canvas and install the repository's `tests/fixtures/canvas-extensions/demo-page` app disabled. On `/apps`, focus its Enable switch.\n2. Press Space. **Before:** the trust dialog opens but focus stays on the switch; Tab reaches the background Update button and Enter sends `POST /api/canvas-extensions/install`, leaving the d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18197"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18222,
          "title": "fix(modals): manage initial focus, trap focus, and restore focus on ConfirmationModal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18222",
          "created_at": "2026-10-09T04:44:13Z",
          "updated_at": "2026-10-13T18:45:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8c0d9eeb43172b2eb565e2d891b18808af249532",
          "scope": "Adds initial focus, keyboard focus containment and restoration to confirmation dialogs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "res focus to the opener element upon dismissal.\n\n---\n\nAGENT:\n\n## Why\n\nIn `src/components/shared/modals/confirmation-modal.tsx`, `ConfirmationModal` used `ModalBackdrop` for dismissal but managed no keyboard focus (issue #18196). When opened from an interactive element (e.g., an app's Enable switch), focus remained on the background page, allowing Tab and Enter to activate obscured background actions (such as an app Update button) while the confirmation dialog remained open.\n\n## Summary\n\n- Added initial focus management to `ConfirmationModal` to focus the first enabled c",
              "sal when the opener remains in the DOM.\n- Added comprehensive unit test suite in `__tests__/components/shared/modals/confirmation-modal.test.tsx` and updated `mock-llm-canvas-extensions.spec.ts`.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\nRun the confirmation modal test suite:\n```bash\nnpm test -- __tests__/components/shared/modals/confirmation-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"confirmation-modal-focus-containment\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n``"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18222"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18197,
          "title": "fix(a11y): contain focus in Canvas App trust confirmation",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18197",
          "created_at": "2026-10-08T23:21:12Z",
          "updated_at": "2026-10-14T04:29:37Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "02f372cef169b25d3435f506771a5b9c31d3388a",
          "scope": "Contains keyboard focus within the Canvas App trust confirmation and restores focus on close.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ore focus to the opener when the dialog closes, if that element still exists.\n- Add route-level regression tests and commit authentic before/after videos of the same Space → Tab → Enter sequence.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\n1. Start Canvas and install the repository's `tests/fixtures/canvas-extensions/demo-page` app disabled. On `/apps`, focus its Enable switch.\n2. Press Space. **Before:** the trust dialog opens but focus stays on the switch; Tab reaches the background Update button and Enter sends `POST /api/canvas-extensions/install`, leaving the d"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18197"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18222,
          "title": "fix(modals): manage initial focus, trap focus, and restore focus on ConfirmationModal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18222",
          "created_at": "2026-10-09T04:44:13Z",
          "updated_at": "2026-10-13T18:45:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8c0d9eeb43172b2eb565e2d891b18808af249532",
          "scope": "Adds initial focus, keyboard focus containment and restoration to confirmation dialogs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "res focus to the opener element upon dismissal.\n\n---\n\nAGENT:\n\n## Why\n\nIn `src/components/shared/modals/confirmation-modal.tsx`, `ConfirmationModal` used `ModalBackdrop` for dismissal but managed no keyboard focus (issue #18196). When opened from an interactive element (e.g., an app's Enable switch), focus remained on the background page, allowing Tab and Enter to activate obscured background actions (such as an app Update button) while the confirmation dialog remained open.\n\n## Summary\n\n- Added initial focus management to `ConfirmationModal` to focus the first enabled c",
              "sal when the opener remains in the DOM.\n- Added comprehensive unit test suite in `__tests__/components/shared/modals/confirmation-modal.test.tsx` and updated `mock-llm-canvas-extensions.spec.ts`.\n\n## Issue Number\n\nFixes #18196\n\n## How to Test\n\nRun the confirmation modal test suite:\n```bash\nnpm test -- __tests__/components/shared/modals/confirmation-modal.test.tsx\n```\n\nAll 7 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"confirmation-modal-focus-containment\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n``"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18222"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18202,
      "title": "[Bug]: Send stays disabled after branching from a user message with prefilled text",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18202",
      "created_at": "2026-10-08T23:41:01Z",
      "updated_at": "2026-10-09T08:30:15Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18203,
          "title": "fix: enable Send after composer prefill",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18203",
          "created_at": "2026-10-08T23:49:01Z",
          "updated_at": "2026-10-11T22:53:14Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T22:53:14Z",
          "head_sha": "f07f39016ab9b448937bf4583bda1f9a27078041",
          "scope": "Refreshes composer submit state after programmatic prefill so Send is enabled immediately.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "estion interaction tests to require immediately enabled Send and submission without extra typing.\n- Include reviewed before/after screenshots from isolated real Canvas runs for both entry points.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\n1. In a local Canvas conversation, send a user message. Hover it and choose **Branch from here**. **Before:** the new branch shows the original text, but Send is disabled until another character is typed. **After:** Send is enabled immediately. Click it without editing; the new branch receives one user message containing the origi",
              "ns menu and choose **Pull**. On the frozen target, `Please pull the latest code from the repository.` fills the composer, no user message is sent yet, and Send remains disabled until the user types ([sweep reproduction](https://github.com/OpenHands/OpenHands/issues/18202#issuecomment-6072193111)). This menu uses the same queued composer prefill path; the below-composer Git control bar is a separate direct-send action. This entry point was reproduced before the fix but has not yet been live-tested after it.\n4. The branch after-fix run used Canvas code commit `0e1e0e49845b5cd529a83995a6e9651ff072c8a8` and Agent Serv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18203"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18226,
          "title": "fix(chat): dispatch input event on draft restore to enable send button",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18226",
          "created_at": "2026-10-09T06:04:27Z",
          "updated_at": "2026-10-10T22:19:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b433dad4cf095ff216d4057cee053696c0d316be",
          "scope": "Dispatches input events after programmatic draft restoration to enable the Send button.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ly without manual typing.\n\n---\n\nAGENT:\n\n## Why\n\nWhen branching from a user message in conversation view, the forked conversation pre-fills the message text into the composer, but the Send button remained disabled (issue #18202). `useDraftPersistence` restored the draft into the contentEditable DOM element (`element.textContent = draftMessage`) without dispatching an `input` event, leaving `CustomChatInput`'s `canSubmit` state as `false` until the user manually typed a character.\n\n## Summary\n\n- Dispatched an `input` event (`new InputEvent(\"input\", { bubbles: true })`) in",
              " Updated `.agents/skills/verify-openhands/references/feature-map/F06-agent-activity.md` and `F07-conversation-page.md` to document that the Send button is now enabled immediately after branching.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test -- __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 41 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"branch-prefill-send-enabled\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```text\n RUN  v5.0.0\n\n ✓ |jsdom|"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18226"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18203,
          "title": "fix: enable Send after composer prefill",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18203",
          "created_at": "2026-10-08T23:49:01Z",
          "updated_at": "2026-10-11T22:53:14Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T22:53:14Z",
          "head_sha": "f07f39016ab9b448937bf4583bda1f9a27078041",
          "scope": "Refreshes composer submit state after programmatic prefill so Send is enabled immediately.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "estion interaction tests to require immediately enabled Send and submission without extra typing.\n- Include reviewed before/after screenshots from isolated real Canvas runs for both entry points.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\n1. In a local Canvas conversation, send a user message. Hover it and choose **Branch from here**. **Before:** the new branch shows the original text, but Send is disabled until another character is typed. **After:** Send is enabled immediately. Click it without editing; the new branch receives one user message containing the origi",
              "ns menu and choose **Pull**. On the frozen target, `Please pull the latest code from the repository.` fills the composer, no user message is sent yet, and Send remains disabled until the user types ([sweep reproduction](https://github.com/OpenHands/OpenHands/issues/18202#issuecomment-6072193111)). This menu uses the same queued composer prefill path; the below-composer Git control bar is a separate direct-send action. This entry point was reproduced before the fix but has not yet been live-tested after it.\n4. The branch after-fix run used Canvas code commit `0e1e0e49845b5cd529a83995a6e9651ff072c8a8` and Agent Serv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18203"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18226,
          "title": "fix(chat): dispatch input event on draft restore to enable send button",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18226",
          "created_at": "2026-10-09T06:04:27Z",
          "updated_at": "2026-10-10T22:19:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b433dad4cf095ff216d4057cee053696c0d316be",
          "scope": "Dispatches input events after programmatic draft restoration to enable the Send button.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ly without manual typing.\n\n---\n\nAGENT:\n\n## Why\n\nWhen branching from a user message in conversation view, the forked conversation pre-fills the message text into the composer, but the Send button remained disabled (issue #18202). `useDraftPersistence` restored the draft into the contentEditable DOM element (`element.textContent = draftMessage`) without dispatching an `input` event, leaving `CustomChatInput`'s `canSubmit` state as `false` until the user manually typed a character.\n\n## Summary\n\n- Dispatched an `input` event (`new InputEvent(\"input\", { bubbles: true })`) in",
              " Updated `.agents/skills/verify-openhands/references/feature-map/F06-agent-activity.md` and `F07-conversation-page.md` to document that the Send button is now enabled immediately after branching.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test -- __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 41 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"branch-prefill-send-enabled\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```text\n RUN  v5.0.0\n\n ✓ |jsdom|"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18226"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "otcha | Escape closes the More input actions menu and returns focus (#18174); #18172 failure wording removed | pass, narrow + phone, independently re-run |\n| F05/F06/F07 Send-disabled gotchas | \"not filed yet\" now links #18202; suggestion/macro prefill added as Known failure | fail reproduced (W1); #18202 open, fix PR #18203 open |\n| F07 Hooks fetch-error gotcha | expects `Failed to fetch hooks. Please try again later.` (#18177); #18088 removed | pass, desktop + phone, independently re-run |\n| F19 duplicate-install gotcha, F19.add-plugin-error, F19.page wait; F20 409 li",
              "8172 failure wording removed | pass, narrow + phone, independently re-run |\n| F05/F06/F07 Send-disabled gotchas | \"not filed yet\" now links #18202; suggestion/macro prefill added as Known failure | fail reproduced (W1); #18202 open, fix PR #18203 open |\n| F07 Hooks fetch-error gotcha | expects `Failed to fetch hooks. Please try again later.` (#18177); #18088 removed | pass, desktop + phone, independently re-run |\n| F19 duplicate-install gotcha, F19.add-plugin-error, F19.page wait; F20 409 line | expects `This plugin is already installed. Open its card to Update or Unins",
              "y sits beside an auto-basis title link. Not a regression in range; introduced by #16937. Fix: #18236, verified live.\n\nBoth were reproduced a second time by an independent agent on a fresh stack. One more entry point for #18202 (the `+` > Macros items) was added as a comment there.\n\n### Blocked checks and prerequisites\n\n- F02.super-admin-setup-guide / setup-tour positive paths (#17969, #18138): OpenHands Enterprise backend with `ENABLE_SUPER_ADMIN`, first Super Admin.\n- F25.cloud-org-suspended / cloud-org-rows / Cloud health cadence / cloud-sandbox-states, F07.cloud-only"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18295,
          "title": "docs(verify-openhands): recover map corrections from the closed 2026-10-09 sweep",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18295",
          "created_at": "2026-10-11T22:25:27Z",
          "updated_at": "2026-10-12T15:07:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T22:53:13Z",
          "closed_at": "2026-10-11T22:53:13Z",
          "head_sha": "8c08bf3d818b0502da12d609eb51dec83af71019",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ur instructions** and **Custom persona** system-prompt modes from #17843, with a save/reload recipe checking `persona` and `system_message_suffix`. Main's newer tool-list recipe is kept as is.\r\n- Links to the still-open #18202 and its draft fix #18203 in F05 and F06.\r\n\r\nLeft out on purpose:\r\n- The dated report files (`run-history.md`, `run-results-2026-10-09.md`, `pr-intent-2026-10-09.md`), since the skill's maintenance flow keeps reports in PR descriptions.\r\n- #18213's reading of the narrow Model submenu (it found the `LLM Profiles` link still clickable). Main's later ",
              "n against source on main and against GitHub:\r\n- `src/routes/agent-settings.tsx` has the `agent-settings-system-prompt-mode` and `agent-settings-system-prompt` test ids and saves `persona` and `system_message_suffix`.\r\n- #18202, #18204, #18210, #18063, #18203, #18205 and #18212 are all still open.\r\n\r\n```text\r\n$ control-openhands map check\r\n{\"ok\": true, \"files\": 27, \"ids\": 747, \"checked\": \"all\", \"problems\": []}\r\n$ git diff --check   # clean\r\n```\r\n\r\nThese recipes were not re-driven on a live stack for this PR. The observations come from the 2026-10-09 run recorded in #1821"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18295"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18296,
          "title": "docs(verify-openhands): carry over #18213's map corrections, re-checked on main",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18296",
          "created_at": "2026-10-11T22:30:29Z",
          "updated_at": "2026-10-13T21:09:33Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dfc70f343f8b0dfd84a0337138532070e6338ff",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "story (about 1,000 lines describing one partial run) are not carried over.\n\n## Why\n\nWithout these, the next run of the affected recipes would report correct behaviour as failures (F11, F04, F03), miss two open bugs (F07 #18202 and F21 #18210), and keep calling the missing-manifest 404 blocked.\n\n## Summary\n\n- **`F11-provider-connections.md`**\n  - `F11.create-error` now passes: the toast reads the server's validation message, `String should have at most 128 characters`.\n  - The `F11.row-menu-focus` failure is still real. The row now links #18204 and its fix PR #18205.\n  -",
              "toast, so the row records it as a Known failure.\n- **`F07-conversation-page.md`:** a Git actions prefill should leave Send enabled. From an empty composer it stays disabled; an item picked over existing text enables it (#18202, fix in #18203).\n- **`F21-automations-dashboard.md`:** `F21.manifest-404` is no longer blocked.\n  - A new recipe builds a private worktree whose copy of `@openhands/extensions` lacks the `AUTOMATION_INTERFACE` export. The recipe tells you to replace that one file, never edit it in place, because `cp -al` shares it with the checkout.\n  - That build",
              "-width **LLM Profiles** link (y 726, below the 700 px viewport) still can't be clicked; the click times out.\n\nNo IDs were added or removed, so the README counts are unchanged.\n\n## Issue Number\n\nCarries over #18213. Refs #18202, #18204, #18210. The feature map's issue is #17568.\n\n## How to Test\n\nI ran this live on a fresh stack built from main `1104f0af1d` (Agent Server 1.54.0, `deepseek/deepseek-flash`). F21 ran on a second, fault-injected build of the same commit.\n\n| Check | Result |\n|---|---|\n| F11 name over 128 characters | pass: modal stays open, toast `String shoul",
              "ailed with status code 502` toast (new known failure) |\n| F07 Git actions from an empty composer | known failure reproduced: Send `false` after Commits, Pull and Create New Branch; `true` when picked over existing text (#18202) |\n| F21 without the manifest | Automate link `0`, rail `0`, `/automations` `404 Not Found`; known failure reproduced: **Schedule a task** present and two manifest toasts (#18210) |\n| F07 Available Tools | `9` (main's value; #18213's `23` left out) |\n| F05 narrow LLM Profiles click | times out (main's text; #18213's \"click lands\" left out) |\n\nAn i"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18296"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "a new path for #17948; open PR #18260 changes only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-disco"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 1,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18226,
          "title": "fix(chat): dispatch input event on draft restore to enable send button",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18226",
          "created_at": "2026-10-09T06:04:27Z",
          "updated_at": "2026-10-10T22:19:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b433dad4cf095ff216d4057cee053696c0d316be",
          "scope": "Dispatches input events after programmatic draft restoration to enable the Send button.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ly without manual typing.\n\n---\n\nAGENT:\n\n## Why\n\nWhen branching from a user message in conversation view, the forked conversation pre-fills the message text into the composer, but the Send button remained disabled (issue #18202). `useDraftPersistence` restored the draft into the contentEditable DOM element (`element.textContent = draftMessage`) without dispatching an `input` event, leaving `CustomChatInput`'s `canSubmit` state as `false` until the user manually typed a character.\n\n## Summary\n\n- Dispatched an `input` event (`new InputEvent(\"input\", { bubbles: true })`) in",
              " Updated `.agents/skills/verify-openhands/references/feature-map/F06-agent-activity.md` and `F07-conversation-page.md` to document that the Send button is now enabled immediately after branching.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\nRun the draft persistence tests:\n```bash\nnpm test -- __tests__/hooks/use-draft-persistence.test.tsx\n```\n\nAll 41 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"branch-prefill-send-enabled\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```text\n RUN  v5.0.0\n\n ✓ |jsdom|"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18226"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18203,
          "title": "fix: enable Send after composer prefill",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18203",
          "created_at": "2026-10-08T23:49:01Z",
          "updated_at": "2026-10-11T22:53:14Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T22:53:14Z",
          "head_sha": "f07f39016ab9b448937bf4583bda1f9a27078041",
          "scope": "Refreshes composer submit state after programmatic prefill so Send is enabled immediately.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "estion interaction tests to require immediately enabled Send and submission without extra typing.\n- Include reviewed before/after screenshots from isolated real Canvas runs for both entry points.\n\n## Issue Number\n\nFixes #18202\n\n## How to Test\n\n1. In a local Canvas conversation, send a user message. Hover it and choose **Branch from here**. **Before:** the new branch shows the original text, but Send is disabled until another character is typed. **After:** Send is enabled immediately. Click it without editing; the new branch receives one user message containing the origi",
              "ns menu and choose **Pull**. On the frozen target, `Please pull the latest code from the repository.` fills the composer, no user message is sent yet, and Send remains disabled until the user types ([sweep reproduction](https://github.com/OpenHands/OpenHands/issues/18202#issuecomment-6072193111)). This menu uses the same queued composer prefill path; the below-composer Git control bar is a separate direct-send action. This entry point was reproduced before the fix but has not yet been live-tested after it.\n4. The branch after-fix run used Canvas code commit `0e1e0e49845b5cd529a83995a6e9651ff072c8a8` and Agent Serv"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18203"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18204,
      "title": "[Bug]: Provider connection menu does not focus its first action",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18204",
      "created_at": "2026-10-08T23:57:18Z",
      "updated_at": "2026-10-09T00:08:06Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18205,
          "title": "fix: focus provider connection menu actions after portal mount",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18205",
          "created_at": "2026-10-09T00:03:43Z",
          "updated_at": "2026-10-14T04:29:41Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3aa7343100e15c749b2fba29e5e6fc9f5b1153e9",
          "scope": "Focuses the provider connection menu first action after portal mount.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "first menu action once the portal is ready, and retain the existing arrow-key and Escape behavior.\n- Extend the existing manager test to exercise initial focus and immediate ArrowDown navigation.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\n1. Start Agent Canvas with a local Agent Server, open Settings → LLM, and create a disposable provider connection.\n2. Open its `…` row menu. Before this fix, `document.activeElement` remains the menu trigger and ArrowDown does not select an action. With this fix, `document.activeElement.getAttribute('data-testid')` is `provider-co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18205"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18221,
          "title": "fix(settings): focus first action on provider connection menu open and restore focus on dismiss",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18221",
          "created_at": "2026-10-09T04:31:10Z",
          "updated_at": "2026-10-09T11:13:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5381474ac29b3756ffceb1175afa736d295e5831",
          "scope": "Focuses the provider menu first action after portal mount and restores focus on dismissal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "oggle, and arrow wrap-around navigation behavior.\n- Added comprehensive unit tests in `provider-connections-manager.test.tsx` covering initial focus, arrow navigation cycle, and Escape dismissal.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\nRun the provider connections manager test suite:\n```bash\nnpm test -- src/components/features/settings/llm-profiles/provider-connections-manager.test.tsx\n```\n\nAll 9 tests pass.\n\n## Video/Screenshots\n\n![after: focus inside the open menu on the first action](https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18221"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18205,
          "title": "fix: focus provider connection menu actions after portal mount",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18205",
          "created_at": "2026-10-09T00:03:43Z",
          "updated_at": "2026-10-14T04:29:41Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3aa7343100e15c749b2fba29e5e6fc9f5b1153e9",
          "scope": "Focuses the provider connection menu first action after portal mount.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "first menu action once the portal is ready, and retain the existing arrow-key and Escape behavior.\n- Extend the existing manager test to exercise initial focus and immediate ArrowDown navigation.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\n1. Start Agent Canvas with a local Agent Server, open Settings → LLM, and create a disposable provider connection.\n2. Open its `…` row menu. Before this fix, `document.activeElement` remains the menu trigger and ArrowDown does not select an action. With this fix, `document.activeElement.getAttribute('data-testid')` is `provider-co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18205"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18221,
          "title": "fix(settings): focus first action on provider connection menu open and restore focus on dismiss",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18221",
          "created_at": "2026-10-09T04:31:10Z",
          "updated_at": "2026-10-09T11:13:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5381474ac29b3756ffceb1175afa736d295e5831",
          "scope": "Focuses the provider menu first action after portal mount and restores focus on dismissal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "oggle, and arrow wrap-around navigation behavior.\n- Added comprehensive unit tests in `provider-connections-manager.test.tsx` covering initial focus, arrow navigation cycle, and Escape dismissal.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\nRun the provider connections manager test suite:\n```bash\nnpm test -- src/components/features/settings/llm-profiles/provider-connections-manager.test.tsx\n```\n\nAll 9 tests pass.\n\n## Video/Screenshots\n\n![after: focus inside the open menu on the first action](https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18221"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18295,
          "title": "docs(verify-openhands): recover map corrections from the closed 2026-10-09 sweep",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18295",
          "created_at": "2026-10-11T22:25:27Z",
          "updated_at": "2026-10-12T15:07:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T22:53:13Z",
          "closed_at": "2026-10-11T22:53:13Z",
          "head_sha": "8c08bf3d818b0502da12d609eb51dec83af71019",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "allback toast for a plain-text 502), `F07.agent-tools-modal` (tool count comes from the backend) and `F07.git-actions-menu` (Send should enable after a prefill), `F11.create-error` (now passes) and `F11.row-menu` (links #18204 / #18205), `F21.manifest-404` (a fault-injection recipe and the dead Home link, #18210 / #18212).\r\n- `F13.openhands-options`: the **Default + your instructions** and **Custom persona** system-prompt modes from #17843, with a save/reload recipe checking `persona` and `system_message_suffix`. Main's newer tool-list recipe is kept as is.\r\n- Links to ",
              "t source on main and against GitHub:\r\n- `src/routes/agent-settings.tsx` has the `agent-settings-system-prompt-mode` and `agent-settings-system-prompt` test ids and saves `persona` and `system_message_suffix`.\r\n- #18202, #18204, #18210, #18063, #18203, #18205 and #18212 are all still open.\r\n\r\n```text\r\n$ control-openhands map check\r\n{\"ok\": true, \"files\": 27, \"ids\": 747, \"checked\": \"all\", \"problems\": []}\r\n$ git diff --check   # clean\r\n```\r\n\r\nThese recipes were not re-driven on a live stack for this PR. The observations come from the 2026-10-09 run recorded in #18213.\r\n\r\n##"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18295"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18296,
          "title": "docs(verify-openhands): carry over #18213's map corrections, re-checked on main",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18296",
          "created_at": "2026-10-11T22:30:29Z",
          "updated_at": "2026-10-13T21:09:33Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dfc70f343f8b0dfd84a0337138532070e6338ff",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "er-connections.md`**\n  - `F11.create-error` now passes: the toast reads the server's validation message, `String should have at most 128 characters`.\n  - The `F11.row-menu-focus` failure is still real. The row now links #18204 and its fix PR #18205.\n  - Wording from the re-run: `digitalocean` joins the verified providers, and a provider typed but not picked puts the picked label back (it only clears when nothing was picked yet).\n- **`F04-conversation-list.md`:** with the Agent Server down, the download toast is `Couldn't download the conversation data: An error occurred",
              "*LLM Profiles** link (y 726, below the 700 px viewport) still can't be clicked; the click times out.\n\nNo IDs were added or removed, so the README counts are unchanged.\n\n## Issue Number\n\nCarries over #18213. Refs #18202, #18204, #18210. The feature map's issue is #17568.\n\n## How to Test\n\nI ran this live on a fresh stack built from main `1104f0af1d` (Agent Server 1.54.0, `deepseek/deepseek-flash`). F21 ran on a second, fault-injected build of the same commit.\n\n| Check | Result |\n|---|---|\n| F11 name over 128 characters | pass: modal stays open, toast `String should have a",
              "\n|---|---|\n| F11 name over 128 characters | pass: modal stays open, toast `String should have at most 128 characters` |\n| F11 row menu focus | known failure reproduced: focus stays on `provider-connection-menu-trigger` (#18204) |\n| F04 download with the Agent Server down | pass: one toast `Couldn't download the conversation data: An error occurred`, menu closed, `pageErrors` `0` |\n| F03 automation service down | list `0`, grid `0`, rail `1`, composer enabled, card opens **Before you start**; one raw `Request failed with status code 502` toast (new known failure) |\n| F07"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18296"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18205,
          "title": "fix: focus provider connection menu actions after portal mount",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18205",
          "created_at": "2026-10-09T00:03:43Z",
          "updated_at": "2026-10-14T04:29:41Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3aa7343100e15c749b2fba29e5e6fc9f5b1153e9",
          "scope": "Focuses the provider connection menu first action after portal mount.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "first menu action once the portal is ready, and retain the existing arrow-key and Escape behavior.\n- Extend the existing manager test to exercise initial focus and immediate ArrowDown navigation.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\n1. Start Agent Canvas with a local Agent Server, open Settings → LLM, and create a disposable provider connection.\n2. Open its `…` row menu. Before this fix, `document.activeElement` remains the menu trigger and ArrowDown does not select an action. With this fix, `document.activeElement.getAttribute('data-testid')` is `provider-co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18205"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18221,
          "title": "fix(settings): focus first action on provider connection menu open and restore focus on dismiss",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18221",
          "created_at": "2026-10-09T04:31:10Z",
          "updated_at": "2026-10-09T11:13:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "5381474ac29b3756ffceb1175afa736d295e5831",
          "scope": "Focuses the provider menu first action after portal mount and restores focus on dismissal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "oggle, and arrow wrap-around navigation behavior.\n- Added comprehensive unit tests in `provider-connections-manager.test.tsx` covering initial focus, arrow navigation cycle, and Escape dismissal.\n\n## Issue Number\n\nFixes #18204\n\n## How to Test\n\nRun the provider connections manager test suite:\n```bash\nnpm test -- src/components/features/settings/llm-profiles/provider-connections-manager.test.tsx\n```\n\nAll 9 tests pass.\n\n## Video/Screenshots\n\n![after: focus inside the open menu on the first action](https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18221"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18206,
      "title": "[Bug]: Available Hooks dialog shows an agent hook's prompt instead of its system_prompt",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18206",
      "created_at": "2026-10-09T00:23:10Z",
      "updated_at": "2026-10-11T02:36:49Z",
      "state": "closed",
      "closed_at": "2026-10-11T02:36:49Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18215,
          "title": "fix(hooks): pick the Available Hooks text by hook type",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18215",
          "created_at": "2026-10-09T03:26:34Z",
          "updated_at": "2026-10-12T15:07:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "closed_at": "2026-10-11T02:36:48Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "gent with `system_prompt` only, and reads `prompt` for prompt hooks only), and an agent hook with only `prompt` showed text its hook never reads. #18107 added the display; this is the gap noted in its review, tracked as #18206.\n\n## Summary\n\n- UI: `hook-matcher-content.tsx` selects the row text by hook type (`command` / `prompt` / `system_prompt`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n##",
              "`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\n1. In a workspace, write `.openhands/hooks.json` with an agent hook that has both `prompt` and `system_prompt`, and one that has only `prompt`; start a conversation there, open **Available Hooks** from the conversation header, and expand both events. The first row shows its `system_prompt`; the second shows no text box while its `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18215"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18231,
          "title": "fix(hooks): pick hook display text by type to favor system prompt on agent hooks",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18231",
          "created_at": "2026-10-09T07:26:36Z",
          "updated_at": "2026-10-11T23:06:01Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:01Z",
          "head_sha": "baa5f65698189e5434404dd84f2278501df8425d",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "rc/components/features/conversation-panel/hook-matcher-content.tsx`, the Available Hooks modal previously picked display text with `hook.command || hook.prompt || hook.system_prompt` regardless of the hook's type (issue #18206). For agent hooks carrying a `prompt` field, this showed the unused `prompt` instead of the `system_prompt` that the agent hook actually executes with, and rendered a stray text box for agent hooks that only carried a `prompt`.\n\n## Summary\n\n- Picked hook display text strictly by hook type:\n  - Agent hooks (`hook.type === \"agent\"`) display `hook.sy",
              "both `prompt` and `system_prompt` rendering `system_prompt` and not `prompt`.\n  - Agent hook with only `prompt` rendering no `<pre>` text box while keeping `Type: agent` and `Timeout: 60s` pills.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\nRun the hooks modal test suite:\n```bash\nnpm test -- __tests__/components/features/conversation-panel/hooks-modal.test.tsx\n```\n\nAll 27 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"hooks-modal-system-prompt\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18231"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18215,
          "title": "fix(hooks): pick the Available Hooks text by hook type",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18215",
          "created_at": "2026-10-09T03:26:34Z",
          "updated_at": "2026-10-12T15:07:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "closed_at": "2026-10-11T02:36:48Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "gent with `system_prompt` only, and reads `prompt` for prompt hooks only), and an agent hook with only `prompt` showed text its hook never reads. #18107 added the display; this is the gap noted in its review, tracked as #18206.\n\n## Summary\n\n- UI: `hook-matcher-content.tsx` selects the row text by hook type (`command` / `prompt` / `system_prompt`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n##",
              "`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\n1. In a workspace, write `.openhands/hooks.json` with an agent hook that has both `prompt` and `system_prompt`, and one that has only `prompt`; start a conversation there, open **Available Hooks** from the conversation header, and expand both events. The first row shows its `system_prompt`; the second shows no text box while its `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18215"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18231,
          "title": "fix(hooks): pick hook display text by type to favor system prompt on agent hooks",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18231",
          "created_at": "2026-10-09T07:26:36Z",
          "updated_at": "2026-10-11T23:06:01Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:01Z",
          "head_sha": "baa5f65698189e5434404dd84f2278501df8425d",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "rc/components/features/conversation-panel/hook-matcher-content.tsx`, the Available Hooks modal previously picked display text with `hook.command || hook.prompt || hook.system_prompt` regardless of the hook's type (issue #18206). For agent hooks carrying a `prompt` field, this showed the unused `prompt` instead of the `system_prompt` that the agent hook actually executes with, and rendered a stray text box for agent hooks that only carried a `prompt`.\n\n## Summary\n\n- Picked hook display text strictly by hook type:\n  - Agent hooks (`hook.type === \"agent\"`) display `hook.sy",
              "both `prompt` and `system_prompt` rendering `system_prompt` and not `prompt`.\n  - Agent hook with only `prompt` rendering no `<pre>` text box while keeping `Type: agent` and `Timeout: 60s` pills.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\nRun the hooks modal test suite:\n```bash\nnpm test -- __tests__/components/features/conversation-panel/hooks-modal.test.tsx\n```\n\nAll 27 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"hooks-modal-system-prompt\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18231"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18207,
          "title": "docs(verify-openhands): map the Available Hooks text fix from #18107",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18207",
          "created_at": "2026-10-09T00:53:12Z",
          "updated_at": "2026-10-12T15:08:45Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T02:40:31Z",
          "closed_at": "2026-10-09T02:40:31Z",
          "head_sha": "c5fe25e1dbd4777d508ca3c5264cf89bd94a47c8",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "the `Maintenance baseline` line stays where it is.\n\n## Why\n\nF07 still described #18089 as a Known failure, so the next run of that recipe would report the fixed behavior as a mismatch. #18107 also left one gap, filed as #18206, which the map should record.\n\n## Summary\n\n- `F07-conversation-page.md`: the #18089 row now expects the fix. Prompt and agent hooks show their text under Commands, and an agent hook without `system_prompt` shows no box. The recipe starts from a reopened dialog, because an event expanded before a Refresh stays expanded and a second click collapses ",
              " Commands, and an agent hook without `system_prompt` shows no box. The recipe starts from a reopened dialog, because an event expanded before a Refresh stays expanded and a second click collapses it.\n- A new row records #18206 as a Known failure (reproduced 2026-10-09): an agent hook that also carries a `prompt` shows that prompt instead of the `system_prompt` it runs with.\n- Evidence under `.pr/map-hooks-18107/`.\n\n## Issue Number\n\nRefs #18089 (fixed by #18107) and #18206 (the new known failure). The feature map's issue is #17568.\n\n## How to Test\n\nLive, on a fresh stack",
              "roduced 2026-10-09): an agent hook that also carries a `prompt` shows that prompt instead of the `system_prompt` it runs with.\n- Evidence under `.pr/map-hooks-18107/`.\n\n## Issue Number\n\nRefs #18089 (fixed by #18107) and #18206 (the new known failure). The feature map's issue is #17568.\n\n## How to Test\n\nLive, on a fresh stack built from main `91fcf4372d` (Agent Server 1.53.0, `deepseek/deepseek-flash` for the conversation), with this branch's verify-openhands CLI:\n\n```sh\ncontrol-openhands launch --new --build auto\ncontrol-openhands doctor\ncontrol-openhands onboard --skip",
              " |\n| Row 1: an agent hook without `system_prompt` | pass: `Matcher * Commands Type: agent Timeout: 60s`, and `browser count 'testid=hooks-modal >> pre'` is `0` |\n| Row 2: an agent hook with `prompt` and `system_prompt` (#18206) | known failure reproduced: `Matcher * Commands QA_F07 stray prompt Type: agent Timeout: 60s`, `browser count 'text=QA_F07 agent system prompt'` is `0`, and `POST /api/hooks` returns both fields |\n\nAn independent agent then re-ran both rows literally on its own fresh stack from the same commit and got the same results. Its wording fixes are in: t",
              "ok\" and Stop shows the prompt hook's \"QA_F07 prompt hook\"](https://raw.githubusercontent.com/OpenHands/OpenHands/2c767c25dcb77521e5a456cea1be9de03e7f1494/.pr/map-hooks-18107/F07-prompt-agent-hooks.png)\n\n[Screenshot: the #18206 known failure: an agent hook with both fields shows its prompt \"QA_F07 stray prompt\" instead of its system_prompt](https://raw.githubusercontent.com/OpenHands/OpenHands/2c767c25dcb77521e5a456cea1be9de03e7f1494/.pr/map-hooks-18107/F07-agent-hook-prompt-18206.png)\n\n## Design Doc\n\nNot needed: two rows in one map file.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Fe"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18207"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n | 2 | 2 | 0 | 0 | 0 |\n| **Total** | | **214** | **181** | **19** | **14** | **0** |\n\nEvery fail is a known or newly filed defect, each kept as Expected + Known failure. #18063 is the overflow Model submenu off-screen. #18206 is an agent hook showing `prompt`. software-agent-sdk#5496 is plugin Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F",
              "```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F05.overflow-menu-model-submenu-fail-18063.png);''``` F07 agent hook shows its `prompt` (#18206) [F07 18206](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F07.hooks-modal-agent-prompt-fail-18206.png);''``` F17 two identical toasts on an already-removed server (#18181) [F17 18181](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad5"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "18 Escape)\n  - #17958 and #18181 (F17)\n  - #18060 (F13 menu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source-verified only. Both call sites use `SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED`, which is translated in every locale. A live driv",
              "eccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F06.long-table-cell-fail-18356.png)``````\n- F07.hooks-modal: an agent hook shows its system_prompt (#18206 fixed).\n  ![F07](```````https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F07.hooks-modal-system-prompt.png)```````\n- F08.f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18215,
          "title": "fix(hooks): pick the Available Hooks text by hook type",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18215",
          "created_at": "2026-10-09T03:26:34Z",
          "updated_at": "2026-10-12T15:07:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "closed_at": "2026-10-11T02:36:48Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "gent with `system_prompt` only, and reads `prompt` for prompt hooks only), and an agent hook with only `prompt` showed text its hook never reads. #18107 added the display; this is the gap noted in its review, tracked as #18206.\n\n## Summary\n\n- UI: `hook-matcher-content.tsx` selects the row text by hook type (`command` / `prompt` / `system_prompt`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n##",
              "`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\n1. In a workspace, write `.openhands/hooks.json` with an agent hook that has both `prompt` and `system_prompt`, and one that has only `prompt`; start a conversation there, open **Available Hooks** from the conversation header, and expand both events. The first row shows its `system_prompt`; the second shows no text box while its `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18215"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18215,
          "title": "fix(hooks): pick the Available Hooks text by hook type",
          "author": "fengyue-xve",
          "author_url": "https://github.com/fengyue-xve",
          "url": "https://github.com/OpenHands/OpenHands/pull/18215",
          "created_at": "2026-10-09T03:26:34Z",
          "updated_at": "2026-10-12T15:07:55Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "closed_at": "2026-10-11T02:36:48Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "gent with `system_prompt` only, and reads `prompt` for prompt hooks only), and an agent hook with only `prompt` showed text its hook never reads. #18107 added the display; this is the gap noted in its review, tracked as #18206.\n\n## Summary\n\n- UI: `hook-matcher-content.tsx` selects the row text by hook type (`command` / `prompt` / `system_prompt`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n##",
              "`); the no-text-box behavior and the `Type`/`Timeout`/`Async` pills are unchanged.\n- Tests: two new `hooks-modal.test.tsx` cases cover an agent hook with both fields and a prompt-only agent hook.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\n1. In a workspace, write `.openhands/hooks.json` with an agent hook that has both `prompt` and `system_prompt`, and one that has only `prompt`; start a conversation there, open **Available Hooks** from the conversation header, and expand both events. The first row shows its `system_prompt`; the second shows no text box while its `"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18215"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18231,
          "title": "fix(hooks): pick hook display text by type to favor system prompt on agent hooks",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18231",
          "created_at": "2026-10-09T07:26:36Z",
          "updated_at": "2026-10-11T23:06:01Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T23:06:01Z",
          "head_sha": "baa5f65698189e5434404dd84f2278501df8425d",
          "scope": "Selects hook display text by hook type so an agent hook shows its system_prompt.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "rc/components/features/conversation-panel/hook-matcher-content.tsx`, the Available Hooks modal previously picked display text with `hook.command || hook.prompt || hook.system_prompt` regardless of the hook's type (issue #18206). For agent hooks carrying a `prompt` field, this showed the unused `prompt` instead of the `system_prompt` that the agent hook actually executes with, and rendered a stray text box for agent hooks that only carried a `prompt`.\n\n## Summary\n\n- Picked hook display text strictly by hook type:\n  - Agent hooks (`hook.type === \"agent\"`) display `hook.sy",
              "both `prompt` and `system_prompt` rendering `system_prompt` and not `prompt`.\n  - Agent hook with only `prompt` rendering no `<pre>` text box while keeping `Type: agent` and `Timeout: 60s` pills.\n\n## Issue Number\n\nFixes #18206\n\n## How to Test\n\nRun the hooks modal test suite:\n```bash\nnpm test -- __tests__/components/features/conversation-panel/hooks-modal.test.tsx\n```\n\nAll 27 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"hooks-modal-system-prompt\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots/18112/after-menu.png\" />\n\n```t"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18231"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18215; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18210,
      "title": "[Bug]: Home shows dead automation link and manifest errors when automation interface is absent",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18210",
      "created_at": "2026-10-09T01:26:51Z",
      "updated_at": "2026-10-12T05:05:26Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18212,
          "title": "fix(home): hide automation surfaces without interface manifest",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18212",
          "created_at": "2026-10-09T01:50:12Z",
          "updated_at": "2026-10-09T01:50:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "dc37715f9efccd20f7148892dc6bede11af1a29f",
          "scope": "Gates Home automation links and queries when the automation interface manifest is absent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Why\n\nWith no admitted automation interface manifest, Home still showed a **Schedule a task** link to the `/automations` 404 and emitted two internal manifest-error toasts. This is the fault-injected state documented in #18210; the normal pinned package currently provides the manifest.\n\n## Summary\n\n- Gate Home automation sections and the onboarding checklist task on `hasAutomationInterface()`.\n- Disable the checklist's automation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused ",
              "omation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused regression tests and `AIA-001` spec coverage.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nFor the live proof, I used the frozen baseline `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` and the fix source at `36dd858ada7e2100e951cb94be84ac7ed81655fe`, with Agent Server 1.53.0 on a healthy Local loopback backend. In each isolated build, I copied the pinned `@openhands/extensions` package and removed only the `AUTOMATION_INTER"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18212"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18225,
          "title": "fix(home): hide automation checklist item and recommendations when interface is absent",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18225",
          "created_at": "2026-10-09T05:52:31Z",
          "updated_at": "2026-10-12T08:28:24Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2e8f8486857cc0b496016164c79bef8198d81449",
          "scope": "Hides Home automation surfaces when no interface manifest exists and guards recommendation lookups.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "null without throwing `requireInterface` manifest errors.\n\n---\n\nAGENT:\n\n## Why\n\nWhen no automation interface manifest is admitted, Agent Canvas hides the Automate sidebar entry and renders a 404 on `/automations` (issue #18210). However, the Home page still exposed automation entry points:\n1. The **Getting started → Schedule a task** checklist item remained visible and linked to that 404 route because `useSidebarOnboardingChecklist` did not gate the item on `hasAutomationInterface()`.\n2. `RecommendedAutomationsSection` did not self-gate on `hasAutomationInterface()`, ca",
              "st is admitted.\n- Added comprehensive unit tests in `sidebar-onboarding-checklist.test.tsx` and `recommended-automations.test.tsx` verifying safe omission and rendering behavior without throwing.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/features/sidebar/sidebar-onboarding-checklist.test.tsx __tests__/components/automations/recommended-automations.test.tsx\n```\n\nAll 63 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-manifest-home-after\" src=\"https://github.com/smolpaws/OpenHands/blob"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18225"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18212,
          "title": "fix(home): hide automation surfaces without interface manifest",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18212",
          "created_at": "2026-10-09T01:50:12Z",
          "updated_at": "2026-10-09T01:50:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "dc37715f9efccd20f7148892dc6bede11af1a29f",
          "scope": "Gates Home automation links and queries when the automation interface manifest is absent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Why\n\nWith no admitted automation interface manifest, Home still showed a **Schedule a task** link to the `/automations` 404 and emitted two internal manifest-error toasts. This is the fault-injected state documented in #18210; the normal pinned package currently provides the manifest.\n\n## Summary\n\n- Gate Home automation sections and the onboarding checklist task on `hasAutomationInterface()`.\n- Disable the checklist's automation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused ",
              "omation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused regression tests and `AIA-001` spec coverage.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nFor the live proof, I used the frozen baseline `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` and the fix source at `36dd858ada7e2100e951cb94be84ac7ed81655fe`, with Agent Server 1.53.0 on a healthy Local loopback backend. In each isolated build, I copied the pinned `@openhands/extensions` package and removed only the `AUTOMATION_INTER"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18212"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18225,
          "title": "fix(home): hide automation checklist item and recommendations when interface is absent",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18225",
          "created_at": "2026-10-09T05:52:31Z",
          "updated_at": "2026-10-12T08:28:24Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2e8f8486857cc0b496016164c79bef8198d81449",
          "scope": "Hides Home automation surfaces when no interface manifest exists and guards recommendation lookups.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "null without throwing `requireInterface` manifest errors.\n\n---\n\nAGENT:\n\n## Why\n\nWhen no automation interface manifest is admitted, Agent Canvas hides the Automate sidebar entry and renders a 404 on `/automations` (issue #18210). However, the Home page still exposed automation entry points:\n1. The **Getting started → Schedule a task** checklist item remained visible and linked to that 404 route because `useSidebarOnboardingChecklist` did not gate the item on `hasAutomationInterface()`.\n2. `RecommendedAutomationsSection` did not self-gate on `hasAutomationInterface()`, ca",
              "st is admitted.\n- Added comprehensive unit tests in `sidebar-onboarding-checklist.test.tsx` and `recommended-automations.test.tsx` verifying safe omission and rendering behavior without throwing.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/features/sidebar/sidebar-onboarding-checklist.test.tsx __tests__/components/automations/recommended-automations.test.tsx\n```\n\nAll 63 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-manifest-home-after\" src=\"https://github.com/smolpaws/OpenHands/blob"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18225"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18295,
          "title": "docs(verify-openhands): recover map corrections from the closed 2026-10-09 sweep",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18295",
          "created_at": "2026-10-11T22:25:27Z",
          "updated_at": "2026-10-12T15:07:16Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T22:53:13Z",
          "closed_at": "2026-10-11T22:53:13Z",
          "head_sha": "8c08bf3d818b0502da12d609eb51dec83af71019",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " backend) and `F07.git-actions-menu` (Send should enable after a prefill), `F11.create-error` (now passes) and `F11.row-menu` (links #18204 / #18205), `F21.manifest-404` (a fault-injection recipe and the dead Home link, #18210 / #18212).\r\n- `F13.openhands-options`: the **Default + your instructions** and **Custom persona** system-prompt modes from #17843, with a save/reload recipe checking `persona` and `system_message_suffix`. Main's newer tool-list recipe is kept as is.\r\n- Links to the still-open #18202 and its draft fix #18203 in F05 and F06.\r\n\r\nLeft out on purpose:\r",
              " on main and against GitHub:\r\n- `src/routes/agent-settings.tsx` has the `agent-settings-system-prompt-mode` and `agent-settings-system-prompt` test ids and saves `persona` and `system_message_suffix`.\r\n- #18202, #18204, #18210, #18063, #18203, #18205 and #18212 are all still open.\r\n\r\n```text\r\n$ control-openhands map check\r\n{\"ok\": true, \"files\": 27, \"ids\": 747, \"checked\": \"all\", \"problems\": []}\r\n$ git diff --check   # clean\r\n```\r\n\r\nThese recipes were not re-driven on a live stack for this PR. The observations come from the 2026-10-09 run recorded in #18213.\r\n\r\n## Video/S"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18295"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18296,
          "title": "docs(verify-openhands): carry over #18213's map corrections, re-checked on main",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18296",
          "created_at": "2026-10-11T22:30:29Z",
          "updated_at": "2026-10-13T21:09:33Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dfc70f343f8b0dfd84a0337138532070e6338ff",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "000 lines describing one partial run) are not carried over.\n\n## Why\n\nWithout these, the next run of the affected recipes would report correct behaviour as failures (F11, F04, F03), miss two open bugs (F07 #18202 and F21 #18210), and keep calling the missing-manifest 404 blocked.\n\n## Summary\n\n- **`F11-provider-connections.md`**\n  - `F11.create-error` now passes: the toast reads the server's validation message, `String should have at most 128 characters`.\n  - The `F11.row-menu-focus` failure is still real. The row now links #18204 and its fix PR #18205.\n  - Wording from t",
              "ose copy of `@openhands/extensions` lacks the `AUTOMATION_INTERFACE` export. The recipe tells you to replace that one file, never edit it in place, because `cp -al` shares it with the checkout.\n  - That build reproduces #18210 (fix in #18212): the sidebar link and rail are hidden and `/automations` is a 404, but **Schedule a task** still links to it, and two `No automation interface manifest is admitted…` toasts appear.\n  - Home still offers the composer's Automate mode, which #18210 doesn't mention; noted in the recipe.\n- Evidence under `.pr/map-18213-followup/`.\n\n**Le",
              "nd rail are hidden and `/automations` is a 404, but **Schedule a task** still links to it, and two `No automation interface manifest is admitted…` toasts appear.\n  - Home still offers the composer's Automate mode, which #18210 doesn't mention; noted in the recipe.\n- Evidence under `.pr/map-18213-followup/`.\n\n**Left out** from #18213, because current main contradicts it:\n- F07 Available Tools is `9` on Agent Server 1.54, not `23`.\n- The narrow-width **LLM Profiles** link (y 726, below the 700 px viewport) still can't be clicked; the click times out.\n\nNo IDs were added or",
              "files** link (y 726, below the 700 px viewport) still can't be clicked; the click times out.\n\nNo IDs were added or removed, so the README counts are unchanged.\n\n## Issue Number\n\nCarries over #18213. Refs #18202, #18204, #18210. The feature map's issue is #17568.\n\n## How to Test\n\nI ran this live on a fresh stack built from main `1104f0af1d` (Agent Server 1.54.0, `deepseek/deepseek-flash`). F21 ran on a second, fault-injected build of the same commit.\n\n| Check | Result |\n|---|---|\n| F11 name over 128 characters | pass: modal stays open, toast `String should have at most 1",
              "; `true` when picked over existing text (#18202) |\n| F21 without the manifest | Automate link `0`, rail `0`, `/automations` `404 Not Found`; known failure reproduced: **Schedule a task** present and two manifest toasts (#18210) |\n| F07 Available Tools | `9` (main's value; #18213's `23` left out) |\n| F05 narrow LLM Profiles click | times out (main's text; #18213's \"click lands\" left out) |\n\nAn independent agent then re-ran every edited bullet literally on its own fresh stacks from the same commit. Every Known failure reproduced as described and every other assertion pass",
              "f343f8b0dfd84a0337138532070e6338ff/.pr/map-18213-followup/F03-automation-down-home.png)\n\n[Screenshot: F21: without the automation manifest: no Automate link or rail, but \"Schedule a task\" and two manifest toasts remain (#18210)](https://raw.githubusercontent.com/OpenHands/OpenHands/1dfc70f343f8b0dfd84a0337138532070e6338ff/.pr/map-18213-followup/F21-no-manifest-home.png)\n\n## Design Doc\n\nNot needed: rows in five map files.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [ ] Refactor\n- [ ] Breaking change\n- [x] Docs / chore\n\n## Notes\n\n- The F03 toast is new and not filed yet; the "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18296"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18212,
          "title": "fix(home): hide automation surfaces without interface manifest",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18212",
          "created_at": "2026-10-09T01:50:12Z",
          "updated_at": "2026-10-09T01:50:29Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "dc37715f9efccd20f7148892dc6bede11af1a29f",
          "scope": "Gates Home automation links and queries when the automation interface manifest is absent.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Why\n\nWith no admitted automation interface manifest, Home still showed a **Schedule a task** link to the `/automations` 404 and emitted two internal manifest-error toasts. This is the fault-injected state documented in #18210; the normal pinned package currently provides the manifest.\n\n## Summary\n\n- Gate Home automation sections and the onboarding checklist task on `hasAutomationInterface()`.\n- Disable the checklist's automation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused ",
              "omation health and list queries in the no-manifest state, preventing the internal error toasts while leaving other Home content usable.\n- Add focused regression tests and `AIA-001` spec coverage.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nFor the live proof, I used the frozen baseline `3500d9e5c7cbdfb5a2cbfe9499ce4448eb10c0a2` and the fix source at `36dd858ada7e2100e951cb94be84ac7ed81655fe`, with Agent Server 1.53.0 on a healthy Local loopback backend. In each isolated build, I copied the pinned `@openhands/extensions` package and removed only the `AUTOMATION_INTER"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18212"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18225,
          "title": "fix(home): hide automation checklist item and recommendations when interface is absent",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18225",
          "created_at": "2026-10-09T05:52:31Z",
          "updated_at": "2026-10-12T08:28:24Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2e8f8486857cc0b496016164c79bef8198d81449",
          "scope": "Hides Home automation surfaces when no interface manifest exists and guards recommendation lookups.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "null without throwing `requireInterface` manifest errors.\n\n---\n\nAGENT:\n\n## Why\n\nWhen no automation interface manifest is admitted, Agent Canvas hides the Automate sidebar entry and renders a 404 on `/automations` (issue #18210). However, the Home page still exposed automation entry points:\n1. The **Getting started → Schedule a task** checklist item remained visible and linked to that 404 route because `useSidebarOnboardingChecklist` did not gate the item on `hasAutomationInterface()`.\n2. `RecommendedAutomationsSection` did not self-gate on `hasAutomationInterface()`, ca",
              "st is admitted.\n- Added comprehensive unit tests in `sidebar-onboarding-checklist.test.tsx` and `recommended-automations.test.tsx` verifying safe omission and rendering behavior without throwing.\n\n## Issue Number\n\nFixes #18210\n\n## How to Test\n\nRun the affected test suites:\n```bash\nnpm test -- __tests__/components/features/sidebar/sidebar-onboarding-checklist.test.tsx __tests__/components/automations/recommended-automations.test.tsx\n```\n\nAll 63 tests pass.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"no-manifest-home-after\" src=\"https://github.com/smolpaws/OpenHands/blob"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18225"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18214,
      "title": "[Feature]: Make onboarding's LLM step edit a profile instead of raw LLM settings",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18214",
      "created_at": "2026-10-09T03:12:35Z",
      "updated_at": "2026-10-12T02:41:16Z",
      "state": "closed",
      "closed_at": "2026-10-12T02:41:16Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18218,
          "title": "refactor(onboarding): edit the active LLM profile instead of raw LLM settings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18218",
          "created_at": "2026-10-09T03:53:30Z",
          "updated_at": "2026-10-12T15:07:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T02:41:15Z",
          "closed_at": "2026-10-12T02:41:15Z",
          "head_sha": "5128da8129ea9ae79bd7c6bd8a403dc6ff71f4d1",
          "scope": "Changes onboarding LLM editing to use the active LLM profile instead of raw settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " with project maintenance work.\n\n---\n\nAGENT:\n\nI'm an AI agent based on Opus 5.5, helping Engel Nyst (@enyst) with project maintenance. This PR follows #17889 and makes onboarding's LLM step profile-first, as proposed in #18214.\n\n#17889 has landed, so the diff shows only this PR's changes.\n\n## Why\n\nOn a local backend, onboarding's LLM step treated the raw LLM settings as its source of truth:\n\n1. The form was filled from `agent_settings`.\n2. Next PATCHed the changes into it.\n3. A profile was then derived from the result.\n\n#17889 fixes the lost-endpoint bug (#17884) by rea",
              "ing.** `LLM_PROVIDER_CONNECTION_KEY` moves to `src/constants/`. The API-contracts guide and the verify-openhands map (F01) describe the new behavior. The new subtitle string has all 15 languages.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\n**Unit, lint, types**\n- `npx vitest run __tests__/components/onboarding __tests__/components/settings/llm-profiles __tests__/routes/llm-settings.test.tsx`: 323 passed, with today's `main` merged.\n  - 6 tests fail on `d0b8f7be8`: the model, keeping an unchanged profile, the backfill fallback, the retry, and both subscription cases.",
              "ation\" width=\"700\" src=\"https://github.com/OpenHands/OpenHands/blob/dfcda87691138c7d0ca4016dca96378a1e0e9ab4/.pr/profile-first-onboarding/08-legacy-after-conversation.png?raw=true\">\n\n## Design Doc\n\nN/A. The design is in #18214, and the Summary above covers the before and after.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [x] Refactor\n- [ ] Breaking change\n- [ ] Docs / chore\n\n## Notes\n\n- **Behavior changes for returning local users:**\n  - The form shows their current profile with its own model, instead of the default model paired with that profile's key.\n  - Next without cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18218"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18286,
          "title": "feat(onboarding): edit and activate profile directly in local LLM step",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18286",
          "created_at": "2026-10-11T12:27:23Z",
          "updated_at": "2026-10-12T23:51:38Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T23:51:30Z",
          "head_sha": "4f51e63b5a93ca9816e0663f145d7d8ec045ec68",
          "scope": "Proposes profile-first local onboarding instead of deriving profiles from raw LLM settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "oarding's LLM step previously treated raw LLM settings (`agent_settings.llm`) as the source of truth and derived an LLM profile only secondarily by issuing `PATCH /api/settings` and reading the diff back. As detailed in #18214, LLM profiles are the primary model, and clients should not need raw LLM settings. When settings and active profiles diverged, onboarding mixed unrelated profiles with user edits, or dropped unchanged values such as custom Base URLs.\n\n## Summary\n\n- **Profile-First Local Onboarding**:\n  - `src/components/features/onboarding/steps/setup-llm-step.tsx",
              "l.save()`, preservation of custom base URL and key, and agent profile re-pointing.\n  - `mock-llm-onboarding-regressions.spec.ts`: Added re-onboarding regression test with custom endpoint and key.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\nRun the profile helper and onboarding test suites:\n```bash\nnpm test -- __tests__/components/features/settings/llm-profiles/profile-form-helpers.test.ts\nnpm test -- __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx\nnpm test -- __tests__/components/onboarding/setup-llm-step.test.tsx\nnpm test -- __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18286"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18218,
          "title": "refactor(onboarding): edit the active LLM profile instead of raw LLM settings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18218",
          "created_at": "2026-10-09T03:53:30Z",
          "updated_at": "2026-10-12T15:07:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T02:41:15Z",
          "closed_at": "2026-10-12T02:41:15Z",
          "head_sha": "5128da8129ea9ae79bd7c6bd8a403dc6ff71f4d1",
          "scope": "Changes onboarding LLM editing to use the active LLM profile instead of raw settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " with project maintenance work.\n\n---\n\nAGENT:\n\nI'm an AI agent based on Opus 5.5, helping Engel Nyst (@enyst) with project maintenance. This PR follows #17889 and makes onboarding's LLM step profile-first, as proposed in #18214.\n\n#17889 has landed, so the diff shows only this PR's changes.\n\n## Why\n\nOn a local backend, onboarding's LLM step treated the raw LLM settings as its source of truth:\n\n1. The form was filled from `agent_settings`.\n2. Next PATCHed the changes into it.\n3. A profile was then derived from the result.\n\n#17889 fixes the lost-endpoint bug (#17884) by rea",
              "ing.** `LLM_PROVIDER_CONNECTION_KEY` moves to `src/constants/`. The API-contracts guide and the verify-openhands map (F01) describe the new behavior. The new subtitle string has all 15 languages.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\n**Unit, lint, types**\n- `npx vitest run __tests__/components/onboarding __tests__/components/settings/llm-profiles __tests__/routes/llm-settings.test.tsx`: 323 passed, with today's `main` merged.\n  - 6 tests fail on `d0b8f7be8`: the model, keeping an unchanged profile, the backfill fallback, the retry, and both subscription cases.",
              "ation\" width=\"700\" src=\"https://github.com/OpenHands/OpenHands/blob/dfcda87691138c7d0ca4016dca96378a1e0e9ab4/.pr/profile-first-onboarding/08-legacy-after-conversation.png?raw=true\">\n\n## Design Doc\n\nN/A. The design is in #18214, and the Summary above covers the before and after.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [x] Refactor\n- [ ] Breaking change\n- [ ] Docs / chore\n\n## Notes\n\n- **Behavior changes for returning local users:**\n  - The form shows their current profile with its own model, instead of the default model paired with that profile's key.\n  - Next without cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18218"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18286,
          "title": "feat(onboarding): edit and activate profile directly in local LLM step",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18286",
          "created_at": "2026-10-11T12:27:23Z",
          "updated_at": "2026-10-12T23:51:38Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T23:51:30Z",
          "head_sha": "4f51e63b5a93ca9816e0663f145d7d8ec045ec68",
          "scope": "Proposes profile-first local onboarding instead of deriving profiles from raw LLM settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "oarding's LLM step previously treated raw LLM settings (`agent_settings.llm`) as the source of truth and derived an LLM profile only secondarily by issuing `PATCH /api/settings` and reading the diff back. As detailed in #18214, LLM profiles are the primary model, and clients should not need raw LLM settings. When settings and active profiles diverged, onboarding mixed unrelated profiles with user edits, or dropped unchanged values such as custom Base URLs.\n\n## Summary\n\n- **Profile-First Local Onboarding**:\n  - `src/components/features/onboarding/steps/setup-llm-step.tsx",
              "l.save()`, preservation of custom base URL and key, and agent profile re-pointing.\n  - `mock-llm-onboarding-regressions.spec.ts`: Added re-onboarding regression test with custom endpoint and key.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\nRun the profile helper and onboarding test suites:\n```bash\nnpm test -- __tests__/components/features/settings/llm-profiles/profile-form-helpers.test.ts\nnpm test -- __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx\nnpm test -- __tests__/components/onboarding/setup-llm-step.test.tsx\nnpm test -- __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18286"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18218,
          "title": "refactor(onboarding): edit the active LLM profile instead of raw LLM settings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18218",
          "created_at": "2026-10-09T03:53:30Z",
          "updated_at": "2026-10-12T15:07:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T02:41:15Z",
          "closed_at": "2026-10-12T02:41:15Z",
          "head_sha": "5128da8129ea9ae79bd7c6bd8a403dc6ff71f4d1",
          "scope": "Changes onboarding LLM editing to use the active LLM profile instead of raw settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " with project maintenance work.\n\n---\n\nAGENT:\n\nI'm an AI agent based on Opus 5.5, helping Engel Nyst (@enyst) with project maintenance. This PR follows #17889 and makes onboarding's LLM step profile-first, as proposed in #18214.\n\n#17889 has landed, so the diff shows only this PR's changes.\n\n## Why\n\nOn a local backend, onboarding's LLM step treated the raw LLM settings as its source of truth:\n\n1. The form was filled from `agent_settings`.\n2. Next PATCHed the changes into it.\n3. A profile was then derived from the result.\n\n#17889 fixes the lost-endpoint bug (#17884) by rea",
              "ing.** `LLM_PROVIDER_CONNECTION_KEY` moves to `src/constants/`. The API-contracts guide and the verify-openhands map (F01) describe the new behavior. The new subtitle string has all 15 languages.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\n**Unit, lint, types**\n- `npx vitest run __tests__/components/onboarding __tests__/components/settings/llm-profiles __tests__/routes/llm-settings.test.tsx`: 323 passed, with today's `main` merged.\n  - 6 tests fail on `d0b8f7be8`: the model, keeping an unchanged profile, the backfill fallback, the retry, and both subscription cases.",
              "ation\" width=\"700\" src=\"https://github.com/OpenHands/OpenHands/blob/dfcda87691138c7d0ca4016dca96378a1e0e9ab4/.pr/profile-first-onboarding/08-legacy-after-conversation.png?raw=true\">\n\n## Design Doc\n\nN/A. The design is in #18214, and the Summary above covers the before and after.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [x] Refactor\n- [ ] Breaking change\n- [ ] Docs / chore\n\n## Notes\n\n- **Behavior changes for returning local users:**\n  - The form shows their current profile with its own model, instead of the default model paired with that profile's key.\n  - Next without cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18218"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18218,
          "title": "refactor(onboarding): edit the active LLM profile instead of raw LLM settings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18218",
          "created_at": "2026-10-09T03:53:30Z",
          "updated_at": "2026-10-12T15:07:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T02:41:15Z",
          "closed_at": "2026-10-12T02:41:15Z",
          "head_sha": "5128da8129ea9ae79bd7c6bd8a403dc6ff71f4d1",
          "scope": "Changes onboarding LLM editing to use the active LLM profile instead of raw settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " with project maintenance work.\n\n---\n\nAGENT:\n\nI'm an AI agent based on Opus 5.5, helping Engel Nyst (@enyst) with project maintenance. This PR follows #17889 and makes onboarding's LLM step profile-first, as proposed in #18214.\n\n#17889 has landed, so the diff shows only this PR's changes.\n\n## Why\n\nOn a local backend, onboarding's LLM step treated the raw LLM settings as its source of truth:\n\n1. The form was filled from `agent_settings`.\n2. Next PATCHed the changes into it.\n3. A profile was then derived from the result.\n\n#17889 fixes the lost-endpoint bug (#17884) by rea",
              "ing.** `LLM_PROVIDER_CONNECTION_KEY` moves to `src/constants/`. The API-contracts guide and the verify-openhands map (F01) describe the new behavior. The new subtitle string has all 15 languages.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\n**Unit, lint, types**\n- `npx vitest run __tests__/components/onboarding __tests__/components/settings/llm-profiles __tests__/routes/llm-settings.test.tsx`: 323 passed, with today's `main` merged.\n  - 6 tests fail on `d0b8f7be8`: the model, keeping an unchanged profile, the backfill fallback, the retry, and both subscription cases.",
              "ation\" width=\"700\" src=\"https://github.com/OpenHands/OpenHands/blob/dfcda87691138c7d0ca4016dca96378a1e0e9ab4/.pr/profile-first-onboarding/08-legacy-after-conversation.png?raw=true\">\n\n## Design Doc\n\nN/A. The design is in #18214, and the Summary above covers the before and after.\n\n## Type\n\n- [ ] Bug fix\n- [ ] Feature\n- [x] Refactor\n- [ ] Breaking change\n- [ ] Docs / chore\n\n## Notes\n\n- **Behavior changes for returning local users:**\n  - The form shows their current profile with its own model, instead of the default model paired with that profile's key.\n  - Next without cha"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18218"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18286,
          "title": "feat(onboarding): edit and activate profile directly in local LLM step",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18286",
          "created_at": "2026-10-11T12:27:23Z",
          "updated_at": "2026-10-12T23:51:38Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T23:51:30Z",
          "head_sha": "4f51e63b5a93ca9816e0663f145d7d8ec045ec68",
          "scope": "Proposes profile-first local onboarding instead of deriving profiles from raw LLM settings.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "oarding's LLM step previously treated raw LLM settings (`agent_settings.llm`) as the source of truth and derived an LLM profile only secondarily by issuing `PATCH /api/settings` and reading the diff back. As detailed in #18214, LLM profiles are the primary model, and clients should not need raw LLM settings. When settings and active profiles diverged, onboarding mixed unrelated profiles with user edits, or dropped unchanged values such as custom Base URLs.\n\n## Summary\n\n- **Profile-First Local Onboarding**:\n  - `src/components/features/onboarding/steps/setup-llm-step.tsx",
              "l.save()`, preservation of custom base URL and key, and agent profile re-pointing.\n  - `mock-llm-onboarding-regressions.spec.ts`: Added re-onboarding regression test with custom endpoint and key.\n\n## Issue Number\n\nFixes #18214\n\n## How to Test\n\nRun the profile helper and onboarding test suites:\n```bash\nnpm test -- __tests__/components/features/settings/llm-profiles/profile-form-helpers.test.ts\nnpm test -- __tests__/components/settings/llm-profiles/llm-settings-local-view.test.tsx\nnpm test -- __tests__/components/onboarding/setup-llm-step.test.tsx\nnpm test -- __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18286"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18218; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18233,
      "title": "[Bug]: Escape on the closed backend selector clears it: the backend name becomes a placeholder and the status dot disappears",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18233",
      "created_at": "2026-10-09T08:47:46Z",
      "updated_at": "2026-10-12T05:05:25Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18235,
          "title": "fix(backends): keep the backend selector's value when Escape is pressed on its closed menu",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18235",
          "created_at": "2026-10-09T08:54:14Z",
          "updated_at": "2026-10-09T18:45:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:26Z",
          "head_sha": "c4408408b099684ce53b3e23e72955af137e4607",
          "scope": "Preserves the non-clearable backend selection when Escape is pressed with its menu already closed.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n the closed backend selector (for example a second Escape after the one that closes its menu) blanked it: the active backend's name became an italic placeholder and the connection status dot disappeared until a reload (#18233). The shared `Dropdown` uses downshift 9's `useCombobox`, whose default `InputKeyDownEscape` reducer clears `selectedItem` and `inputValue` when the menu is already closed.\n\n## Summary\n\n- `src/ui/dropdown/dropdown.tsx`: the `stateReducer` keeps `selectedItem` and `inputValue` on an Escape with a closed menu unless the dropdown is `clearable`. Esca",
              "is not clearable.\n- Two tests in `__tests__/components/ui/dropdown.test.tsx`: the selection survives Escape on a closed menu (fails on `main`, passes here), and a clearable dropdown still clears.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\n- `npx vitest run __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/`: 9 files, 173 tests passed (the new \"keeps the selection\" test fails on `main`).\n- `npm run typecheck`, `npx eslint src/ui/dropdown/dropdown.tsx` and Prettier pass.\n- Live, with the verify-openhands harness on a stack built from this branch"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18235"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18238,
          "title": "fix(ui): preserve selection on escape when dropdown is closed",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18238",
          "created_at": "2026-10-09T09:13:59Z",
          "updated_at": "2026-10-13T07:17:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3900cca16de9fe8e783af7756e9a24ef845eb0fb",
          "scope": "Preserves the non-clearable dropdown selection when Escape is pressed on its closed menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "earable dropdowns such as `BackendSelector`, pressing Escape while the selector is closed inadvertently resets the selected backend to null, showing the placeholder and causing the backend status dot to disappear (issue #18233).\n\n## Summary\n\n- Updated `stateReducer` in `src/ui/dropdown/dropdown.tsx` to handle `InputKeyDownEscape`: when `!state.isOpen && !clearable`, returning `state` prevents Downshift from clearing the selection or input text on a closed dropdown.\n- Preserved existing Escape behavior when the menu is open (closing the menu and restoring the selected la",
              "ying:\n  - Escape on the closed backend selector keeps the active backend name and status dot intact.\n  - Double Escape on the backend selector keeps the active backend name and status dot intact.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\nRun the dropdown and backend selector unit tests:\n```bash\nnpm test -- __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/backend-selector.test.tsx\n```\n\nAll 72 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"dropdown-escape-preserve\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18238"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18235,
          "title": "fix(backends): keep the backend selector's value when Escape is pressed on its closed menu",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18235",
          "created_at": "2026-10-09T08:54:14Z",
          "updated_at": "2026-10-09T18:45:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:26Z",
          "head_sha": "c4408408b099684ce53b3e23e72955af137e4607",
          "scope": "Preserves the non-clearable backend selection when Escape is pressed with its menu already closed.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n the closed backend selector (for example a second Escape after the one that closes its menu) blanked it: the active backend's name became an italic placeholder and the connection status dot disappeared until a reload (#18233). The shared `Dropdown` uses downshift 9's `useCombobox`, whose default `InputKeyDownEscape` reducer clears `selectedItem` and `inputValue` when the menu is already closed.\n\n## Summary\n\n- `src/ui/dropdown/dropdown.tsx`: the `stateReducer` keeps `selectedItem` and `inputValue` on an Escape with a closed menu unless the dropdown is `clearable`. Esca",
              "is not clearable.\n- Two tests in `__tests__/components/ui/dropdown.test.tsx`: the selection survives Escape on a closed menu (fails on `main`, passes here), and a clearable dropdown still clears.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\n- `npx vitest run __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/`: 9 files, 173 tests passed (the new \"keeps the selection\" test fails on `main`).\n- `npm run typecheck`, `npx eslint src/ui/dropdown/dropdown.tsx` and Prettier pass.\n- Live, with the verify-openhands harness on a stack built from this branch"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18235"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18238,
          "title": "fix(ui): preserve selection on escape when dropdown is closed",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18238",
          "created_at": "2026-10-09T09:13:59Z",
          "updated_at": "2026-10-13T07:17:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3900cca16de9fe8e783af7756e9a24ef845eb0fb",
          "scope": "Preserves the non-clearable dropdown selection when Escape is pressed on its closed menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "earable dropdowns such as `BackendSelector`, pressing Escape while the selector is closed inadvertently resets the selected backend to null, showing the placeholder and causing the backend status dot to disappear (issue #18233).\n\n## Summary\n\n- Updated `stateReducer` in `src/ui/dropdown/dropdown.tsx` to handle `InputKeyDownEscape`: when `!state.isOpen && !clearable`, returning `state` prevents Downshift from clearing the selection or input text on a closed dropdown.\n- Preserved existing Escape behavior when the menu is open (closing the menu and restoring the selected la",
              "ying:\n  - Escape on the closed backend selector keeps the active backend name and status dot intact.\n  - Double Escape on the backend selector keeps the active backend name and status dot intact.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\nRun the dropdown and backend selector unit tests:\n```bash\nnpm test -- __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/backend-selector.test.tsx\n```\n\nAll 72 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"dropdown-escape-preserve\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18238"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "pendent re-run of F24 + F03 health | 8 | 5 | 2 | 1 | 0 |\n| R3 | independent re-run of settings edits | 8 | 8 | 0 | 0 | 0 |\n| R4 | independent re-run of the new F03 row | 5 | 4 | 1 | 0 | 0 |\n| R5 | second reproduction of #18233/#18234 | 5 | 1 | 4 | 0 | 0 |\n| C | coordinator: F10.rename, F13.name-validation | 2 | 2 | 0 | 0 | 0 |\n| **Total** | | **214** | **181** | **19** | **14** | **0** |\n\nEvery fail is a known or newly filed defect, each kept as Expected + Known failure. #18063 is the overflow Model submenu off-screen. #18206 is an agent hook showing `prompt`. software-",
              "in Update. #18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | Live result |\n|---|---|---|\n| F05.overflow-menu + Escape gotcha | Escape closes the More input actions menu and returns focus (#18174); #18172 failure wording removed | pass, narrow + phone, independently re-ru",
              "on automation main | fail on 1.19.0 (×3 + independent re-run), pass on main |\n| F24.save-and-sync | Save and sync now needs Enable Git Sync on | pass, independently re-run |\n| F25 gotchas | selector-Escape Known failure #18233; probe cadence observation | fail reproduced twice |\n| F26.docker-image | re-dated with an image built from this checkout; concrete build steps | fail #18178 (unpatched), pass with the bind workaround |\n| README | tooltip-reuse note, counts 745, baseline | n/a |\n\n### New defects (filed, with fix PRs)\n\n- #18233 [Bug]: Escape on the closed backend s",
              "th an image built from this checkout; concrete build steps | fail #18178 (unpatched), pass with the bind workaround |\n| README | tooltip-reuse note, counts 745, baseline | n/a |\n\n### New defects (filed, with fix PRs)\n\n- #18233 [Bug]: Escape on the closed backend selector clears it. Downshift's default `InputKeyDownEscape` reducer is the cause. Not a regression in range; the behaviour dates from #145. Fix: #18235, verified live.\n- #18234 [Bug]: the pinned automation card hides the run's task summary when the run has a conversation. A `flex-1` summary sits beside an auto-",
              "'https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F24.encryption-automation-main.png)''```\n- F25 selector after a second Escape, Known failure #18233: [F25 fail](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/bugs/2026-10-09/backend-selector-escape/desktop-after-second-escape.png)''```\n- Known failures still reproducing: F05 overflow Model submenu off-screen (#18063) [F05 18063](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1",
              "hange\n- [x] Docs / chore\n\n## Notes\n\nThe working branch `claude/clever-cori-tsitrj` holds the same tree as intermediate commits. This branch carries it as one commit so the author is consistent. The issue screenshots for #18233/#18234 are pinned to commit e6e91fe on that branch.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_0158EAXpUTegZZfh62cSX2io\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_0158EAXpUTegZZfh62cSX2io)_\n\n\n\n<!-- AGENT_CANVAS_DOCKER_START -->\n---\n**🐳 Docker images for this PR**\n\n• **GHCR p"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Verification-tooling PR uses the backend-selector defect and separate PR #18238 as a worked baseline/fix fixture; it does not implement the dropdown product fix.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "nt revisions. If the fix still reproduces the bug, the verdict is `not-fixed`. Everything else is `inconclusive`. SKILL.md, maintenance.md, daily.md, mapping.md, report.md and `--help` all describe the same rules. F25's #18233 note is the worked example.\r\n\r\n## Issue Number\r\n\r\nFixes #18347\r\n\r\n## How to Test\r\n\r\nLive proof, with this branch's CLI against two isolated stacks: main `f07aebdf5` and fix PR #18238 `77de0ad24`, both on Agent Server 1.54.0 and automation 1.19.3, desktop viewport. Evidence and a README are in [`.pr/known-bug-proof/`](https://github.com/OpenHands/O",
              ") |\r\n\r\n## Type\r\n\r\n- [ ] Bug fix\r\n- [ ] Feature\r\n- [ ] Refactor\r\n- [ ] Breaking change\r\n- [x] Docs / chore\r\n\r\n## Notes\r\n\r\n- Type is Docs / chore: contributor verification tooling only, no product code changes. Only F25's #18233 note has a block so far; other notes can gain one when a pass re-drives them.\r\n- `evidence add` still accepts only pass/fail/blocked/not-run. Only `bug run` writes xfail/xpass, so the expected-failure result always comes from the marked assertion.\r\n- Unrelated stale note spotted: F06 still lists the Ctrl+Enter confirmation shortcut (#17928) as a K"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": false,
          "reason": "Verification-tooling PR uses the backend-selector defect and separate PR #18238 as a worked baseline/fix fixture; it does not implement the dropdown product fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets and F13.acp-model-discovery\n  - F16.b"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 1,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18238,
          "title": "fix(ui): preserve selection on escape when dropdown is closed",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18238",
          "created_at": "2026-10-09T09:13:59Z",
          "updated_at": "2026-10-13T07:17:35Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3900cca16de9fe8e783af7756e9a24ef845eb0fb",
          "scope": "Preserves the non-clearable dropdown selection when Escape is pressed on its closed menu.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "earable dropdowns such as `BackendSelector`, pressing Escape while the selector is closed inadvertently resets the selected backend to null, showing the placeholder and causing the backend status dot to disappear (issue #18233).\n\n## Summary\n\n- Updated `stateReducer` in `src/ui/dropdown/dropdown.tsx` to handle `InputKeyDownEscape`: when `!state.isOpen && !clearable`, returning `state` prevents Downshift from clearing the selection or input text on a closed dropdown.\n- Preserved existing Escape behavior when the menu is open (closing the menu and restoring the selected la",
              "ying:\n  - Escape on the closed backend selector keeps the active backend name and status dot intact.\n  - Double Escape on the backend selector keeps the active backend name and status dot intact.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\nRun the dropdown and backend selector unit tests:\n```bash\nnpm test -- __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/backend-selector.test.tsx\n```\n\nAll 72 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"dropdown-escape-preserve\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18238"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18235,
          "title": "fix(backends): keep the backend selector's value when Escape is pressed on its closed menu",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18235",
          "created_at": "2026-10-09T08:54:14Z",
          "updated_at": "2026-10-09T18:45:36Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:26Z",
          "head_sha": "c4408408b099684ce53b3e23e72955af137e4607",
          "scope": "Preserves the non-clearable backend selection when Escape is pressed with its menu already closed.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n the closed backend selector (for example a second Escape after the one that closes its menu) blanked it: the active backend's name became an italic placeholder and the connection status dot disappeared until a reload (#18233). The shared `Dropdown` uses downshift 9's `useCombobox`, whose default `InputKeyDownEscape` reducer clears `selectedItem` and `inputValue` when the menu is already closed.\n\n## Summary\n\n- `src/ui/dropdown/dropdown.tsx`: the `stateReducer` keeps `selectedItem` and `inputValue` on an Escape with a closed menu unless the dropdown is `clearable`. Esca",
              "is not clearable.\n- Two tests in `__tests__/components/ui/dropdown.test.tsx`: the selection survives Escape on a closed menu (fails on `main`, passes here), and a clearable dropdown still clears.\n\n## Issue Number\n\nFixes #18233\n\n## How to Test\n\n- `npx vitest run __tests__/components/ui/dropdown.test.tsx __tests__/components/backends/`: 9 files, 173 tests passed (the new \"keeps the selection\" test fails on `main`).\n- `npm run typecheck`, `npx eslint src/ui/dropdown/dropdown.tsx` and Prettier pass.\n- Live, with the verify-openhands harness on a stack built from this branch"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18235"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18234,
      "title": "[Bug]: Pinned automation card on Home hides the run's task summary when the run has a conversation",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18234",
      "created_at": "2026-10-09T08:48:07Z",
      "updated_at": "2026-10-12T05:05:24Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18236,
          "title": "fix(automations): keep a pinned card's task summary visible next to its conversation title",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18236",
          "created_at": "2026-10-09T08:54:31Z",
          "updated_at": "2026-10-09T18:45:33Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:27Z",
          "head_sha": "356411aac7ef3e27e90daa0225f5a48d77d83f7c",
          "scope": "Keeps the pinned automation task summary visible beside a conversation title.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Nyst (@enyst) with project work. This fix came out of today's verify-openhands map maintenance pass.\n\n## Why\n\nA pinned automation card on Home never showed the latest run's task summary when the run had a conversation (#18234). The summary was `min-w-0 flex-1` (flex basis 0) beside the conversation link (basis auto), so a title wider than the strip took all the room and the summary rendered 0 px wide.\n\n## Summary\n\n- `pinned-automation-card.tsx`: the summary uses `flex-auto` (basis auto, grows into free space), and when a summary is present the conversation title link i",
              "d run that has both a summary and a conversation title keeps the summary out of zero-basis flex and caps the title (jsdom has no layout, so the test checks the flex contract; it fails on `main`).\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/home/`: 18 files, 192 tests passed.\n- `npm run typecheck`, `npx eslint` on the card (0 errors; 2 pre-existing warnings) and Prettier pass.\n- Live, verify-openhands harness on a stack built from this branch (`status` showed the branch HEAD, `doctor` ok, Agent Server 1.53.0, automation"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18236"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18240,
          "title": "fix(home): share pinned automation status strip space between summary and conversation link",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18240",
          "created_at": "2026-10-09T09:57:48Z",
          "updated_at": "2026-10-13T07:27:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dda46a544b2c50763966041e18f33fe08266f39",
          "scope": "Shares pinned automation status-strip space between summary and conversation link.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "avigationLink` (`inline-flex min-w-0`, basis auto). When the conversation title was wider than the strip, flex shrinking resolved the link down to container width while leaving the zero-basis summary at 0 px wide (issue #18234).\n\n## Summary\n\n- Updated `NavigationLink` in `PinnedAutomationCard` to include `flex-1` when `shortSummary` is present (`shortSummary && \"flex-1\"`), allowing both the task summary and the conversation title link to share available status strip space with non-zero bounding-box widths.\n- Preserved existing layout behavior when `shortSummary` is abse",
              "h summary and conversation link are present, both render visibly and share the strip space via `flex-1`.\n  - Verifying that when summary is absent, the conversation link renders without `flex-1`.\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\nRun the featured automations section test suite:\n```bash\nnpm test -- __tests__/components/features/home/featured-automations-section.test.tsx\n```\n\nAll 11 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"pinned-card-summary-and-conversation\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18240"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18236,
          "title": "fix(automations): keep a pinned card's task summary visible next to its conversation title",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18236",
          "created_at": "2026-10-09T08:54:31Z",
          "updated_at": "2026-10-09T18:45:33Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:27Z",
          "head_sha": "356411aac7ef3e27e90daa0225f5a48d77d83f7c",
          "scope": "Keeps the pinned automation task summary visible beside a conversation title.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Nyst (@enyst) with project work. This fix came out of today's verify-openhands map maintenance pass.\n\n## Why\n\nA pinned automation card on Home never showed the latest run's task summary when the run had a conversation (#18234). The summary was `min-w-0 flex-1` (flex basis 0) beside the conversation link (basis auto), so a title wider than the strip took all the room and the summary rendered 0 px wide.\n\n## Summary\n\n- `pinned-automation-card.tsx`: the summary uses `flex-auto` (basis auto, grows into free space), and when a summary is present the conversation title link i",
              "d run that has both a summary and a conversation title keeps the summary out of zero-basis flex and caps the title (jsdom has no layout, so the test checks the flex contract; it fails on `main`).\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/home/`: 18 files, 192 tests passed.\n- `npm run typecheck`, `npx eslint` on the card (0 errors; 2 pre-existing warnings) and Prettier pass.\n- Live, verify-openhands harness on a stack built from this branch (`status` showed the branch HEAD, `doctor` ok, Agent Server 1.53.0, automation"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18236"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18240,
          "title": "fix(home): share pinned automation status strip space between summary and conversation link",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18240",
          "created_at": "2026-10-09T09:57:48Z",
          "updated_at": "2026-10-13T07:27:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dda46a544b2c50763966041e18f33fe08266f39",
          "scope": "Shares pinned automation status-strip space between summary and conversation link.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "avigationLink` (`inline-flex min-w-0`, basis auto). When the conversation title was wider than the strip, flex shrinking resolved the link down to container width while leaving the zero-basis summary at 0 px wide (issue #18234).\n\n## Summary\n\n- Updated `NavigationLink` in `PinnedAutomationCard` to include `flex-1` when `shortSummary` is present (`shortSummary && \"flex-1\"`), allowing both the task summary and the conversation title link to share available status strip space with non-zero bounding-box widths.\n- Preserved existing layout behavior when `shortSummary` is abse",
              "h summary and conversation link are present, both render visibly and share the strip space via `flex-1`.\n  - Verifying that when summary is absent, the conversation link renders without `flex-1`.\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\nRun the featured automations section test suite:\n```bash\nnpm test -- __tests__/components/features/home/featured-automations-section.test.tsx\n```\n\nAll 11 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"pinned-card-summary-and-conversation\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18240"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18237,
          "title": "docs(verify-openhands): map maintenance 2026-10-09",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18237",
          "created_at": "2026-10-09T08:56:20Z",
          "updated_at": "2026-10-12T15:08:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T18:39:24Z",
          "closed_at": "2026-10-09T18:39:24Z",
          "head_sha": "3f15824bd4f2d78502e3b6efd8691f7e85b2025f",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "#18181 is the doubled MCP delete toast. #18173 is the phone Logs dialog. automation#551 is the encryption re-export, on 1.19.0. #18178 is the Docker IPv6 bind, reproduced on an image built from this checkout. #18233 and #18234 are new and filed below. The other fail was F13 drift, row rewritten.\n\n### Changed rows and their live result\n\n| Row | Change | Live result |\n|---|---|---|\n| F05.overflow-menu + Escape gotcha | Escape closes the More input actions menu and returns focus (#18174); #18172 failure wording removed | pass, narrow + phone, independently re-run |\n| F05/F",
              "server.ts`, adapter `toHooksResponse` | map affected re-run |\n| **new** F03.home-run-outcome-health | Home rows/tooltip/pinned strip show Blocked / Needs review (#17682) | list + tooltip pass; pinned strip Known failure #18234 |\n| **new** F02.super-admin-setup-tour | guided tour, `?setup_tour=` (#18138); Local ignores it | Local negative pass; positive blocked |\n| F24.encryption | Known failure re-dated 2026-10-09 on automation 1.19.0; automation#551 closed, fix automation#563 not in a release; passes on automation main | fail on 1.19.0 (×3 + independent re-run), pass o",
              "s)\n\n- #18233 [Bug]: Escape on the closed backend selector clears it. Downshift's default `InputKeyDownEscape` reducer is the cause. Not a regression in range; the behaviour dates from #145. Fix: #18235, verified live.\n- #18234 [Bug]: the pinned automation card hides the run's task summary when the run has a conversation. A `flex-1` summary sits beside an auto-basis title link. Not a regression in range; introduced by #16937. Fix: #18236, verified live.\n\nBoth were reproduced a second time by an independent agent on a fresh stack. One more entry point for #18202 (the `+` ",
              ": [F03 list](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/map-maintenance/2026-10-09/F03.home-run-outcome-health-list.png)''```\n- F03 pinned card, Known failure #18234 (summary hidden): [F03 pinned fail](```''https://raw.githubusercontent.com/OpenHands/OpenHands/1199344c10ece6acfad563a559bcc96f4208d3f9/.pr/bugs/2026-10-09/pinned-card-summary/desktop-pinned-card.png)''```\n- F02.super-admin-setup-tour on Local, `/?setup_tour=first-automation`: no tour, no guide: [F02 tour local](```''https://raw.githubusercontent."
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18237"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 1,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18240,
          "title": "fix(home): share pinned automation status strip space between summary and conversation link",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18240",
          "created_at": "2026-10-09T09:57:48Z",
          "updated_at": "2026-10-13T07:27:29Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "1dda46a544b2c50763966041e18f33fe08266f39",
          "scope": "Shares pinned automation status-strip space between summary and conversation link.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "avigationLink` (`inline-flex min-w-0`, basis auto). When the conversation title was wider than the strip, flex shrinking resolved the link down to container width while leaving the zero-basis summary at 0 px wide (issue #18234).\n\n## Summary\n\n- Updated `NavigationLink` in `PinnedAutomationCard` to include `flex-1` when `shortSummary` is present (`shortSummary && \"flex-1\"`), allowing both the task summary and the conversation title link to share available status strip space with non-zero bounding-box widths.\n- Preserved existing layout behavior when `shortSummary` is abse",
              "h summary and conversation link are present, both render visibly and share the strip space via `flex-1`.\n  - Verifying that when summary is absent, the conversation link renders without `flex-1`.\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\nRun the featured automations section test suite:\n```bash\nnpm test -- __tests__/components/features/home/featured-automations-section.test.tsx\n```\n\nAll 11 tests pass cleanly.\n\n## Video/Screenshots\n\n<img width=\"600\" alt=\"pinned-card-summary-and-conversation\" src=\"https://raw.githubusercontent.com/fengyue-xve/OpenHands/pr-screenshots"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18240"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18236,
          "title": "fix(automations): keep a pinned card's task summary visible next to its conversation title",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18236",
          "created_at": "2026-10-09T08:54:31Z",
          "updated_at": "2026-10-09T18:45:33Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-09T18:39:27Z",
          "head_sha": "356411aac7ef3e27e90daa0225f5a48d77d83f7c",
          "scope": "Keeps the pinned automation task summary visible beside a conversation title.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Nyst (@enyst) with project work. This fix came out of today's verify-openhands map maintenance pass.\n\n## Why\n\nA pinned automation card on Home never showed the latest run's task summary when the run had a conversation (#18234). The summary was `min-w-0 flex-1` (flex basis 0) beside the conversation link (basis auto), so a title wider than the strip took all the room and the summary rendered 0 px wide.\n\n## Summary\n\n- `pinned-automation-card.tsx`: the summary uses `flex-auto` (basis auto, grows into free space), and when a summary is present the conversation title link i",
              "d run that has both a summary and a conversation title keeps the summary out of zero-basis flex and caps the title (jsdom has no layout, so the test checks the flex contract; it fails on `main`).\n\n## Issue Number\n\nFixes #18234\n\n## How to Test\n\n- `npx vitest run __tests__/components/features/home/`: 18 files, 192 tests passed.\n- `npm run typecheck`, `npx eslint` on the card (0 errors; 2 pre-existing warnings) and Prettier pass.\n- Live, verify-openhands harness on a stack built from this branch (`status` showed the branch HEAD, `doctor` ok, Agent Server 1.53.0, automation"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18236"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18255,
      "title": "[Bug]: Settings content column is not full height below 1024 px, so the tablet section selector (#18200) is cut off on short pages",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18255",
      "created_at": "2026-10-09T20:32:06Z",
      "updated_at": "2026-10-10T10:29:45Z",
      "state": "closed",
      "closed_at": "2026-10-10T10:29:45Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18256,
          "title": "fix(settings): give the settings screen a definite height",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18256",
          "created_at": "2026-10-09T20:58:31Z",
          "updated_at": "2026-10-12T15:08:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:29:43Z",
          "closed_at": "2026-10-10T10:29:43Z",
          "head_sha": "2351e55f00b72099f9caaff00d974ffea645c76b",
          "scope": "Gives the Settings screen a definite height so short-page tablet navigation can fit.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ort bottom on `/settings/secrets` and scrolls its own content on `/settings/app`. Before the fix it failed at 390, 767, 768, 820 and 1023 px, with `<main>` ending 614–674 px above the bottom.\r\n\r\n## Issue Number\r\n\r\nFixes #18255\r\n\r\n## How to Test\r\n\r\n**Live, with `verify-openhands`.** I used four isolated real stacks: Agent Server/SDK 1.53.0, automation 1.19.0, fresh state, no LLM calls. `doctor` passed on each.\r\n\r\n| Run | Revision |\r\n| --- | --- |\r\n| `main` | `4a8f77e` |\r\n| `main` + this fix | `adcdaee` |\r\n| #18200 | `d84357b` |\r\n| #18200 + this fix | `c9d32fe` (local che"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18256"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18257,
          "title": "fix(settings): establish full-height flex shell for settings content column",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18257",
          "created_at": "2026-10-09T21:50:25Z",
          "updated_at": "2026-10-11T00:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T00:05:54Z",
          "head_sha": "f803b5d0752e5044073517da6304d18240a4b859",
          "scope": "Gives the Settings content column a full-height flex shell.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "in>` occupies the full viewport height.\n\n---\n\nAGENT:\n\n## Why\n\nBelow 1024 px, the Settings `<main>` (`SettingsLayout`) only expanded to the natural height of the page content rather than filling the content column (issue #18255). On short pages like `/settings/secrets` and `/settings/agents`, internal popovers (such as the tablet section selector introduced in #18200) were clipped by `<main>`'s bottom edge because `<main>` is `overflow-y-auto`.\n\nThe root cause was that `[data-testid=\"settings-screen\"]` in `src/routes/settings.tsx` only had `min-h-0` and lacked a height p",
              "__/routes/settings.test.tsx` verifying the functional CSS contract that `settings-screen` establishes the full-height flex column context and propagates height and scrolling behavior to `<main>`.\n\n## Issue Number\n\nFixes #18255\n\n## How to Test\n\nRun the settings route test suite:\n```bash\nnpm test -- __tests__/routes/settings.test.tsx\nnpm test -- __tests__/routes/\n```\n\nVerify TypeScript compilation and lint:\n```bash\nnpm run typecheck\nnpm run lint\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Settings content column height\" src=\"https://raw.githubusercontent.com/OpenHand"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18257"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18256,
          "title": "fix(settings): give the settings screen a definite height",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18256",
          "created_at": "2026-10-09T20:58:31Z",
          "updated_at": "2026-10-12T15:08:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:29:43Z",
          "closed_at": "2026-10-10T10:29:43Z",
          "head_sha": "2351e55f00b72099f9caaff00d974ffea645c76b",
          "scope": "Gives the Settings screen a definite height so short-page tablet navigation can fit.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ort bottom on `/settings/secrets` and scrolls its own content on `/settings/app`. Before the fix it failed at 390, 767, 768, 820 and 1023 px, with `<main>` ending 614–674 px above the bottom.\r\n\r\n## Issue Number\r\n\r\nFixes #18255\r\n\r\n## How to Test\r\n\r\n**Live, with `verify-openhands`.** I used four isolated real stacks: Agent Server/SDK 1.53.0, automation 1.19.0, fresh state, no LLM calls. `doctor` passed on each.\r\n\r\n| Run | Revision |\r\n| --- | --- |\r\n| `main` | `4a8f77e` |\r\n| `main` + this fix | `adcdaee` |\r\n| #18200 | `d84357b` |\r\n| #18200 + this fix | `c9d32fe` (local che"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18256"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18257,
          "title": "fix(settings): establish full-height flex shell for settings content column",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18257",
          "created_at": "2026-10-09T21:50:25Z",
          "updated_at": "2026-10-11T00:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T00:05:54Z",
          "head_sha": "f803b5d0752e5044073517da6304d18240a4b859",
          "scope": "Gives the Settings content column a full-height flex shell.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "in>` occupies the full viewport height.\n\n---\n\nAGENT:\n\n## Why\n\nBelow 1024 px, the Settings `<main>` (`SettingsLayout`) only expanded to the natural height of the page content rather than filling the content column (issue #18255). On short pages like `/settings/secrets` and `/settings/agents`, internal popovers (such as the tablet section selector introduced in #18200) were clipped by `<main>`'s bottom edge because `<main>` is `overflow-y-auto`.\n\nThe root cause was that `[data-testid=\"settings-screen\"]` in `src/routes/settings.tsx` only had `min-h-0` and lacked a height p",
              "__/routes/settings.test.tsx` verifying the functional CSS contract that `settings-screen` establishes the full-height flex column context and propagates height and scrolling behavior to `<main>`.\n\n## Issue Number\n\nFixes #18255\n\n## How to Test\n\nRun the settings route test suite:\n```bash\nnpm test -- __tests__/routes/settings.test.tsx\nnpm test -- __tests__/routes/\n```\n\nVerify TypeScript compilation and lint:\n```bash\nnpm run typecheck\nnpm run lint\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Settings content column height\" src=\"https://raw.githubusercontent.com/OpenHand"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18257"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18200,
          "title": "feat: add compact section navigation on tablets",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18200",
          "created_at": "2026-10-08T23:33:04Z",
          "updated_at": "2026-10-12T15:07:57Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "closed_at": "2026-10-11T00:05:15Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Adds tablet navigation and links the separate Settings height defect discovered while recording its evidence.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "or opened on Application shows all eight sections; opened on Secrets, the list is cut off at the Secrets item\">\n\nFound while recording the before/after video for #18200 ([comment](https://github.com/OpenHands/OpenHands/pull/18200#issuecomment-6088511233)).\n\n### Expected Behavior\n\nBelow 1024 px, the Settings `<main>` fills the content column to the bottom of the viewport and is the scroll container, as on Customize pages. Popovers inside it, like the tablet section "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18200"
            ]
          },
          "direct_closer": false,
          "reason": "The candidate comes from an issue-body citation saying the height defect was found during #18200 testing; #18200 is not the height fix."
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18256,
          "title": "fix(settings): give the settings screen a definite height",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18256",
          "created_at": "2026-10-09T20:58:31Z",
          "updated_at": "2026-10-12T15:08:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:29:43Z",
          "closed_at": "2026-10-10T10:29:43Z",
          "head_sha": "2351e55f00b72099f9caaff00d974ffea645c76b",
          "scope": "Gives the Settings screen a definite height so short-page tablet navigation can fit.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ort bottom on `/settings/secrets` and scrolls its own content on `/settings/app`. Before the fix it failed at 390, 767, 768, 820 and 1023 px, with `<main>` ending 614–674 px above the bottom.\r\n\r\n## Issue Number\r\n\r\nFixes #18255\r\n\r\n## How to Test\r\n\r\n**Live, with `verify-openhands`.** I used four isolated real stacks: Agent Server/SDK 1.53.0, automation 1.19.0, fresh state, no LLM calls. `doctor` passed on each.\r\n\r\n| Run | Revision |\r\n| --- | --- |\r\n| `main` | `4a8f77e` |\r\n| `main` + this fix | `adcdaee` |\r\n| #18200 | `d84357b` |\r\n| #18200 + this fix | `c9d32fe` (local che"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18256"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18256,
          "title": "fix(settings): give the settings screen a definite height",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18256",
          "created_at": "2026-10-09T20:58:31Z",
          "updated_at": "2026-10-12T15:08:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:29:43Z",
          "closed_at": "2026-10-10T10:29:43Z",
          "head_sha": "2351e55f00b72099f9caaff00d974ffea645c76b",
          "scope": "Gives the Settings screen a definite height so short-page tablet navigation can fit.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ort bottom on `/settings/secrets` and scrolls its own content on `/settings/app`. Before the fix it failed at 390, 767, 768, 820 and 1023 px, with `<main>` ending 614–674 px above the bottom.\r\n\r\n## Issue Number\r\n\r\nFixes #18255\r\n\r\n## How to Test\r\n\r\n**Live, with `verify-openhands`.** I used four isolated real stacks: Agent Server/SDK 1.53.0, automation 1.19.0, fresh state, no LLM calls. `doctor` passed on each.\r\n\r\n| Run | Revision |\r\n| --- | --- |\r\n| `main` | `4a8f77e` |\r\n| `main` + this fix | `adcdaee` |\r\n| #18200 | `d84357b` |\r\n| #18200 + this fix | `c9d32fe` (local che"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18256"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18257,
          "title": "fix(settings): establish full-height flex shell for settings content column",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18257",
          "created_at": "2026-10-09T21:50:25Z",
          "updated_at": "2026-10-11T00:05:55Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-11T00:05:54Z",
          "head_sha": "f803b5d0752e5044073517da6304d18240a4b859",
          "scope": "Gives the Settings content column a full-height flex shell.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "in>` occupies the full viewport height.\n\n---\n\nAGENT:\n\n## Why\n\nBelow 1024 px, the Settings `<main>` (`SettingsLayout`) only expanded to the natural height of the page content rather than filling the content column (issue #18255). On short pages like `/settings/secrets` and `/settings/agents`, internal popovers (such as the tablet section selector introduced in #18200) were clipped by `<main>`'s bottom edge because `<main>` is `overflow-y-auto`.\n\nThe root cause was that `[data-testid=\"settings-screen\"]` in `src/routes/settings.tsx` only had `min-h-0` and lacked a height p",
              "__/routes/settings.test.tsx` verifying the functional CSS contract that `settings-screen` establishes the full-height flex column context and propagates height and scrolling behavior to `<main>`.\n\n## Issue Number\n\nFixes #18255\n\n## How to Test\n\nRun the settings route test suite:\n```bash\nnpm test -- __tests__/routes/settings.test.tsx\nnpm test -- __tests__/routes/\n```\n\nVerify TypeScript compilation and lint:\n```bash\nnpm run typecheck\nnpm run lint\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Settings content column height\" src=\"https://raw.githubusercontent.com/OpenHand"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18257"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": "GitHub’s latest issue-closing event names #18256; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18263,
      "title": "[Bug]: Automation draft test runs stay Pending after completion",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18263",
      "created_at": "2026-10-10T07:46:38Z",
      "updated_at": "2026-10-10T23:24:07Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18265,
          "title": "fix(automations): poll in-flight draft test runs until terminal status is reached",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18265",
          "created_at": "2026-10-10T08:37:27Z",
          "updated_at": "2026-10-10T11:46:57Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-10T11:46:56Z",
          "head_sha": "ee41c2f14d7840fe6d67b3f2e006870e2efa8702",
          "scope": "Polls in-flight automation draft test runs until their status becomes terminal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ut the panel only fetched draft runs once on initial draft materialization. Because no background polling existed, the Test runs view remained stuck showing `Pending` for completed runs until a manual page reload (issue #18263).\n\n## Summary\n\n- **Active In-Flight Polling**:\n  - Added a 3-second polling interval in `AutomationSetupPanel` that activates whenever `draftAutomationId` exists and `draftRuns` contains at least one non-terminal run (`PENDING` or `RUNNING`).\n  - Calls `AutomationService.listAutomationRuns` and updates `draftRuns` with the latest server state, mer",
              "tomations/automation-setup-panel.test.tsx` verifying that in-flight test runs poll until reaching terminal status (`COMPLETED` -> `Successful` and `FAILED`), and that polling stops once terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the automation setup panel test suite:\n```bash\nnpm test -- __tests__/components/automations/automation-setup-panel.test.tsx\nnpm test -- __tests__/components/automations/ __tests__/routes/automation\n```\n\nVerify TypeScript types:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Draft test run completed "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18265"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18359,
          "title": "fix(automations): poll in-flight draft test runs until terminal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18359",
          "created_at": "2026-10-13T01:19:50Z",
          "updated_at": "2026-10-13T01:20:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2d2fe60df0f3fb858301c6fbd57bf39a8f4b208f",
          "scope": "Polls in-flight automation draft test runs and updates the test-run view until terminal status, directly proposing to fix #18263.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "s.\n- Add regression unit test in `__tests__/components/automations/automation-setup-panel.test.tsx` verifying polling of in-flight test runs and verifying polling stops when runs become terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the test suite:\n- `npm test -- __tests__/components/automations/automation-setup-panel.test.tsx`\n\n## Video/Screenshots\n\n<!-- Automation draft test run polling verified via vitest test suite -->\n![Draft Test Run Polling Verification](https://raw.githubusercontent.com/All-Hands-AI/OpenHands/main/.github/pr-assets/pr-16959-teleme"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18359"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18265,
          "title": "fix(automations): poll in-flight draft test runs until terminal status is reached",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18265",
          "created_at": "2026-10-10T08:37:27Z",
          "updated_at": "2026-10-10T11:46:57Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-10T11:46:56Z",
          "head_sha": "ee41c2f14d7840fe6d67b3f2e006870e2efa8702",
          "scope": "Polls in-flight automation draft test runs until their status becomes terminal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ut the panel only fetched draft runs once on initial draft materialization. Because no background polling existed, the Test runs view remained stuck showing `Pending` for completed runs until a manual page reload (issue #18263).\n\n## Summary\n\n- **Active In-Flight Polling**:\n  - Added a 3-second polling interval in `AutomationSetupPanel` that activates whenever `draftAutomationId` exists and `draftRuns` contains at least one non-terminal run (`PENDING` or `RUNNING`).\n  - Calls `AutomationService.listAutomationRuns` and updates `draftRuns` with the latest server state, mer",
              "tomations/automation-setup-panel.test.tsx` verifying that in-flight test runs poll until reaching terminal status (`COMPLETED` -> `Successful` and `FAILED`), and that polling stops once terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the automation setup panel test suite:\n```bash\nnpm test -- __tests__/components/automations/automation-setup-panel.test.tsx\nnpm test -- __tests__/components/automations/ __tests__/routes/automation\n```\n\nVerify TypeScript types:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Draft test run completed "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18265"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18359,
          "title": "fix(automations): poll in-flight draft test runs until terminal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18359",
          "created_at": "2026-10-13T01:19:50Z",
          "updated_at": "2026-10-13T01:20:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2d2fe60df0f3fb858301c6fbd57bf39a8f4b208f",
          "scope": "Polls in-flight automation draft test runs and updates the test-run view until terminal status, directly proposing to fix #18263.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "s.\n- Add regression unit test in `__tests__/components/automations/automation-setup-panel.test.tsx` verifying polling of in-flight test runs and verifying polling stops when runs become terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the test suite:\n- `npm test -- __tests__/components/automations/automation-setup-panel.test.tsx`\n\n## Video/Screenshots\n\n<!-- Automation draft test run polling verified via vitest test suite -->\n![Draft Test Run Polling Verification](https://raw.githubusercontent.com/All-Hands-AI/OpenHands/main/.github/pr-assets/pr-16959-teleme"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18359"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18264,
          "title": "docs(verify-openhands): map maintenance 2026-10-10",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18264",
          "created_at": "2026-10-10T07:53:03Z",
          "updated_at": "2026-10-12T15:07:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T23:58:55Z",
          "closed_at": "2026-10-10T23:58:55Z",
          "head_sha": "da4c2924d67fe68b1fa49ba59c379e6860a9c347",
          "scope": "Maintains or re-checks verification-map recipes and links this product defect or its separate fix PR.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " / SDK 1.54.0 / automation 1.19.3. The tested documentation revision `ac3ea58e42` has the same product source as TARGET. These are scoped entry checks rather than complete-ID or full-family passes.\n\nCurrent failures are #18263 (genuine desktop prompt and phone plugin draft Test stays Pending after backend COMPLETED; reload recovers), #17948's failed-prompt-as-script label on desktop/phone, and F22's credential-free #17959/#18061 findings. Ordinary final-automation Run now polling passes. The remaining model block requires a genuine legacy/custom-schema finish producer, ",
              "e exact exercised docked-composer form-tool prompts, view controls, associated-draft resume, prompt/plugin creation/execution and model-backed Test checks; preserve Expected automatic draft completion with known failure #18263.\n- F23: document reachable long finish-summary/metadata content, tabs, stdout end and close controls at four desktop/phone viewport sizes.\n- F24: document key-only set/rotate/clear exports on pinned automation 1.19.3 and the verified explicit PyPI launch flag.\n- Index and reports: identify verified setup paths, remaining prerequisites and current ",
              " flag.\n- Index and reports: identify verified setup paths, remaining prerequisites and current results, preserving stable IDs/counts and BASE.\n\n## Issue Number\n\nRefs #17568 (ready-for-dev), with independently reproduced #18263 and existing #17948, #17959 and #18061 linked from the map. Product fixes are tracked by their owning issues.\n\n## How to Test\n\nInstall locked dependencies with `npm ci --ignore-scripts` and put `.agents/skills/verify-openhands/scripts` on PATH. Run:\n\n```sh\ncontrol-openhands map check\ncontrol-openhands map coverage\ncontrol-openhands map testids\ncon"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18264"
            ]
          },
          "direct_closer": false,
          "reason": "The referenced issue is QA/map context; this documentation PR does not implement its product-bug fix."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "hanges only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets",
              "d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F22.setup-agent-profile-default.png)````````````````\n- F22 fail: a draft Test row stays Pending after completion (#18263).\n  ![F22 pending](`````````````````https://raw.githubusercontent.com/OpenHands/OpenHands/3ceccdf5fb0e6cb3d6604527084fe3cfb9f178ba/.pr/map-maintenance/2026-10-13/F22.draft-test-pending-fail-18263.png"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18359,
          "title": "fix(automations): poll in-flight draft test runs until terminal",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18359",
          "created_at": "2026-10-13T01:19:50Z",
          "updated_at": "2026-10-13T01:20:46Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "2d2fe60df0f3fb858301c6fbd57bf39a8f4b208f",
          "scope": "Polls in-flight automation draft test runs and updates the test-run view until terminal status, directly proposing to fix #18263.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "s.\n- Add regression unit test in `__tests__/components/automations/automation-setup-panel.test.tsx` verifying polling of in-flight test runs and verifying polling stops when runs become terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the test suite:\n- `npm test -- __tests__/components/automations/automation-setup-panel.test.tsx`\n\n## Video/Screenshots\n\n<!-- Automation draft test run polling verified via vitest test suite -->\n![Draft Test Run Polling Verification](https://raw.githubusercontent.com/All-Hands-AI/OpenHands/main/.github/pr-assets/pr-16959-teleme"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18359"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18265,
          "title": "fix(automations): poll in-flight draft test runs until terminal status is reached",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18265",
          "created_at": "2026-10-10T08:37:27Z",
          "updated_at": "2026-10-10T11:46:57Z",
          "state": "closed",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-10T11:46:56Z",
          "head_sha": "ee41c2f14d7840fe6d67b3f2e006870e2efa8702",
          "scope": "Polls in-flight automation draft test runs until their status becomes terminal.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ut the panel only fetched draft runs once on initial draft materialization. Because no background polling existed, the Test runs view remained stuck showing `Pending` for completed runs until a manual page reload (issue #18263).\n\n## Summary\n\n- **Active In-Flight Polling**:\n  - Added a 3-second polling interval in `AutomationSetupPanel` that activates whenever `draftAutomationId` exists and `draftRuns` contains at least one non-terminal run (`PENDING` or `RUNNING`).\n  - Calls `AutomationService.listAutomationRuns` and updates `draftRuns` with the latest server state, mer",
              "tomations/automation-setup-panel.test.tsx` verifying that in-flight test runs poll until reaching terminal status (`COMPLETED` -> `Successful` and `FAILED`), and that polling stops once terminal.\n\n## Issue Number\n\nFixes #18263\n\n## How to Test\n\nRun the automation setup panel test suite:\n```bash\nnpm test -- __tests__/components/automations/automation-setup-panel.test.tsx\nnpm test -- __tests__/components/automations/ __tests__/routes/automation\n```\n\nVerify TypeScript types:\n```bash\nnpm run typecheck\n```\n\n## Video/Screenshots\n\n<img width=\"720\" alt=\"Draft test run completed "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18265"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18266,
      "title": "[Bug]: Custom MCP Save still shows duplicate connection-test errors",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18266",
      "created_at": "2026-10-10T10:39:29Z",
      "updated_at": "2026-10-10T11:04:22Z",
      "state": "closed",
      "closed_at": "2026-10-10T11:04:22Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18267,
          "title": "fix(mcp): show one toast when the pre-save connection test fails",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18267",
          "created_at": "2026-10-10T10:48:13Z",
          "updated_at": "2026-10-12T15:08:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T11:04:20Z",
          "closed_at": "2026-10-10T11:04:20Z",
          "head_sha": "0783329540814297db5d502fe01f2857c7eeef51",
          "scope": "Shows one error toast when the custom MCP pre-save connection test fails, including manual Test connection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "he manual Test connection button.\r\n- Extend the editor tests using the app query client and real hooks. Both actions must show one toast, keep the editor open, and perform no save on failure.\r\n\r\n## Issue Number\r\n\r\nFixes #18266\r\n\r\n## How to Test\r\n\r\nOpen `/mcp`, add a working custom server and reopen its editor. Stop the Agent Server without reloading the frontend, then click **Save Server**. Expect one error toast and the editor to stay open. The manual **Test connection** action should also show one error toast.\r\n\r\nVerified with two isolated, compiled-source Canvas stac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18267"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18267,
          "title": "fix(mcp): show one toast when the pre-save connection test fails",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18267",
          "created_at": "2026-10-10T10:48:13Z",
          "updated_at": "2026-10-12T15:08:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T11:04:20Z",
          "closed_at": "2026-10-10T11:04:20Z",
          "head_sha": "0783329540814297db5d502fe01f2857c7eeef51",
          "scope": "Shows one error toast when the custom MCP pre-save connection test fails, including manual Test connection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "he manual Test connection button.\r\n- Extend the editor tests using the app query client and real hooks. Both actions must show one toast, keep the editor open, and perform no save on failure.\r\n\r\n## Issue Number\r\n\r\nFixes #18266\r\n\r\n## How to Test\r\n\r\nOpen `/mcp`, add a working custom server and reopen its editor. Stop the Agent Server without reloading the frontend, then click **Save Server**. Expect one error toast and the editor to stay open. The manual **Test connection** action should also show one error toast.\r\n\r\nVerified with two isolated, compiled-source Canvas stac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18267"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18267,
          "title": "fix(mcp): show one toast when the pre-save connection test fails",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18267",
          "created_at": "2026-10-10T10:48:13Z",
          "updated_at": "2026-10-12T15:08:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T11:04:20Z",
          "closed_at": "2026-10-10T11:04:20Z",
          "head_sha": "0783329540814297db5d502fe01f2857c7eeef51",
          "scope": "Shows one error toast when the custom MCP pre-save connection test fails, including manual Test connection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "he manual Test connection button.\r\n- Extend the editor tests using the app query client and real hooks. Both actions must show one toast, keep the editor open, and perform no save on failure.\r\n\r\n## Issue Number\r\n\r\nFixes #18266\r\n\r\n## How to Test\r\n\r\nOpen `/mcp`, add a working custom server and reopen its editor. Stop the Agent Server without reloading the frontend, then click **Save Server**. Expect one error toast and the editor to stay open. The manual **Test connection** action should also show one error toast.\r\n\r\nVerified with two isolated, compiled-source Canvas stac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18267"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18267,
          "title": "fix(mcp): show one toast when the pre-save connection test fails",
          "author": "smolpaws",
          "author_url": "https://github.com/smolpaws",
          "url": "https://github.com/OpenHands/OpenHands/pull/18267",
          "created_at": "2026-10-10T10:48:13Z",
          "updated_at": "2026-10-12T15:08:01Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T11:04:20Z",
          "closed_at": "2026-10-10T11:04:20Z",
          "head_sha": "0783329540814297db5d502fe01f2857c7eeef51",
          "scope": "Shows one error toast when the custom MCP pre-save connection test fails, including manual Test connection.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "he manual Test connection button.\r\n- Extend the editor tests using the app query client and real hooks. Both actions must show one toast, keep the editor open, and perform no save on failure.\r\n\r\n## Issue Number\r\n\r\nFixes #18266\r\n\r\n## How to Test\r\n\r\nOpen `/mcp`, add a working custom server and reopen its editor. Stop the Agent Server without reloading the frontend, then click **Save Server**. Expect one error toast and the editor to stay open. The manual **Test connection** action should also show one error toast.\r\n\r\nVerified with two isolated, compiled-source Canvas stac"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18267"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18267; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18269,
      "title": "Use readable theme colors for MCP form and connection feedback",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18269",
      "created_at": "2026-10-11T02:00:47Z",
      "updated_at": "2026-10-11T04:41:03Z",
      "state": "closed",
      "closed_at": "2026-10-11T04:41:03Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Moves MCP validation and connection feedback to readable semantic theme tokens.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ut remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone *"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18273,
          "title": "feat(theme): use readable semantic theme tokens for MCP feedback text",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18273",
          "created_at": "2026-10-11T02:49:32Z",
          "updated_at": "2026-10-12T10:18:52Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "21648e47fd151f9db66b093f1d6cdbd1ad391921",
          "scope": "Adds readable semantic MCP feedback theme tokens and migrates the requested feedback text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ". Furthermore, the general danger/success control fills (`--oh-color-danger` / `--oh-color-success`) can fall below 4.5:1 contrast against light modal surfaces, so feedback text requires dedicated readable tokens (issue #18269).\n\n## Summary\n\n- **Theme Tokens**:\n  - Defined `--oh-feedback-error` and `--oh-feedback-success` in `src/styles/agent-server-ui-style-scope.ts` with CSS variable aliases in `src/tailwind.css` (`--color-feedback-error` and `--color-feedback-success`).\n  - Configured semantic color values across all 5 built-in themes (`openhands-deepsea`, `openhands",
              "rast ratios against modal and base surfaces.\n  - Ran existing MCP test suites with 62 passing tests.\n  - Verified `npx eslint` reports 0 raw-color errors and full project lint and builds succeed.\n\n## Issue Number\n\nFixes #18269\n\n## How to Test\n\nRun the color themes test suite:\n```bash\nnpm test -- __tests__/themes/color-themes.test.tsx\n```\n\nRun MCP behavior test suites:\n```bash\nnpm test -- __tests__/components/features/mcp-page/install-server-modal.test.tsx __tests__/components/features/mcp-page/custom-server-editor.test.tsx __tests__/components/features/settings/mcp-sett"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18273"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Moves MCP validation and connection feedback to readable semantic theme tokens.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ut remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone *"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18273,
          "title": "feat(theme): use readable semantic theme tokens for MCP feedback text",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18273",
          "created_at": "2026-10-11T02:49:32Z",
          "updated_at": "2026-10-12T10:18:52Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "21648e47fd151f9db66b093f1d6cdbd1ad391921",
          "scope": "Adds readable semantic MCP feedback theme tokens and migrates the requested feedback text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ". Furthermore, the general danger/success control fills (`--oh-color-danger` / `--oh-color-success`) can fall below 4.5:1 contrast against light modal surfaces, so feedback text requires dedicated readable tokens (issue #18269).\n\n## Summary\n\n- **Theme Tokens**:\n  - Defined `--oh-feedback-error` and `--oh-feedback-success` in `src/styles/agent-server-ui-style-scope.ts` with CSS variable aliases in `src/tailwind.css` (`--color-feedback-error` and `--color-feedback-success`).\n  - Configured semantic color values across all 5 built-in themes (`openhands-deepsea`, `openhands",
              "rast ratios against modal and base surfaces.\n  - Ran existing MCP test suites with 62 passing tests.\n  - Verified `npx eslint` reports 0 raw-color errors and full project lint and builds succeed.\n\n## Issue Number\n\nFixes #18269\n\n## How to Test\n\nRun the color themes test suite:\n```bash\nnpm test -- __tests__/themes/color-themes.test.tsx\n```\n\nRun MCP behavior test suites:\n```bash\nnpm test -- __tests__/components/features/mcp-page/install-server-modal.test.tsx __tests__/components/features/mcp-page/custom-server-editor.test.tsx __tests__/components/features/settings/mcp-sett"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18273"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Moves MCP validation and connection feedback to readable semantic theme tokens.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ut remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone *"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18273,
          "title": "feat(theme): use readable semantic theme tokens for MCP feedback text",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18273",
          "created_at": "2026-10-11T02:49:32Z",
          "updated_at": "2026-10-12T10:18:52Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "21648e47fd151f9db66b093f1d6cdbd1ad391921",
          "scope": "Adds readable semantic MCP feedback theme tokens and migrates the requested feedback text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ". Furthermore, the general danger/success control fills (`--oh-color-danger` / `--oh-color-success`) can fall below 4.5:1 contrast against light modal surfaces, so feedback text requires dedicated readable tokens (issue #18269).\n\n## Summary\n\n- **Theme Tokens**:\n  - Defined `--oh-feedback-error` and `--oh-feedback-success` in `src/styles/agent-server-ui-style-scope.ts` with CSS variable aliases in `src/tailwind.css` (`--color-feedback-error` and `--color-feedback-success`).\n  - Configured semantic color values across all 5 built-in themes (`openhands-deepsea`, `openhands",
              "rast ratios against modal and base surfaces.\n  - Ran existing MCP test suites with 62 passing tests.\n  - Verified `npx eslint` reports 0 raw-color errors and full project lint and builds succeed.\n\n## Issue Number\n\nFixes #18269\n\n## How to Test\n\nRun the color themes test suite:\n```bash\nnpm test -- __tests__/themes/color-themes.test.tsx\n```\n\nRun MCP behavior test suites:\n```bash\nnpm test -- __tests__/components/features/mcp-page/install-server-modal.test.tsx __tests__/components/features/mcp-page/custom-server-editor.test.tsx __tests__/components/features/settings/mcp-sett"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18273"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18270,
          "title": "refactor(theme): use readable MCP feedback text tokens",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18270",
          "created_at": "2026-10-11T02:28:43Z",
          "updated_at": "2026-10-12T15:07:32Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "closed_at": "2026-10-11T04:41:01Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Moves MCP validation and connection feedback to readable semantic theme tokens.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ut remain unchanged.\n- Cover palette contrast and preservation of host overrides, and record the contract as MCP-004. This is a partial migration under #18004; `no-raw-colors` remains a warning.\n\n## Issue Number\n\nCloses #18269.\nRefs #18004; the broader migration remains open.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Product proposal: `0c3523ed038772e9f4e6d7160b9ade4227f9032c`.\n\nReal verification used two isolated production stacks through `control-openhands`, Agent Server **1.54.0**, Node **24.19.0**, Chrome, and desktop **1440×1000** / phone *"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18270"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18270; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18271,
      "title": "Protect shared combobox caret appearance and open-state rotation",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18271",
      "created_at": "2026-10-11T02:37:32Z",
      "updated_at": "2026-10-11T05:00:07Z",
      "state": "closed",
      "closed_at": "2026-10-11T05:00:07Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18274,
          "title": "chore(lint): protect caret appearance and state rotation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18274",
          "created_at": "2026-10-11T02:57:51Z",
          "updated_at": "2026-10-12T15:07:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T05:00:06Z",
          "closed_at": "2026-10-11T05:00:06Z",
          "head_sha": "469bf2a588e372ed00546af3673c47bd680991ea",
          "scope": "Protects combobox caret appearance and open-state rotation through lint contracts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ComboboxCaretIcon` orientation remains public.\n- Add concrete agent guidance and real-config probes for aliases, namespaces, negative/variant rotation, accepted classes, and primitive internals.\n\n## Issue Number\n\nCloses #18271.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `fdf2d1c19ce04c8c373004573b3a59ab2b1ac169`. No product source, CSS, component API or dependency changed.\n\n- `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lin"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18274"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18274,
          "title": "chore(lint): protect caret appearance and state rotation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18274",
          "created_at": "2026-10-11T02:57:51Z",
          "updated_at": "2026-10-12T15:07:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T05:00:06Z",
          "closed_at": "2026-10-11T05:00:06Z",
          "head_sha": "469bf2a588e372ed00546af3673c47bd680991ea",
          "scope": "Protects combobox caret appearance and open-state rotation through lint contracts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ComboboxCaretIcon` orientation remains public.\n- Add concrete agent guidance and real-config probes for aliases, namespaces, negative/variant rotation, accepted classes, and primitive internals.\n\n## Issue Number\n\nCloses #18271.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `fdf2d1c19ce04c8c373004573b3a59ab2b1ac169`. No product source, CSS, component API or dependency changed.\n\n- `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lin"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18274"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18274,
          "title": "chore(lint): protect caret appearance and state rotation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18274",
          "created_at": "2026-10-11T02:57:51Z",
          "updated_at": "2026-10-12T15:07:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T05:00:06Z",
          "closed_at": "2026-10-11T05:00:06Z",
          "head_sha": "469bf2a588e372ed00546af3673c47bd680991ea",
          "scope": "Protects combobox caret appearance and open-state rotation through lint contracts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ComboboxCaretIcon` orientation remains public.\n- Add concrete agent guidance and real-config probes for aliases, namespaces, negative/variant rotation, accepted classes, and primitive internals.\n\n## Issue Number\n\nCloses #18271.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `fdf2d1c19ce04c8c373004573b3a59ab2b1ac169`. No product source, CSS, component API or dependency changed.\n\n- `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lin"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18274"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18274,
          "title": "chore(lint): protect caret appearance and state rotation",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18274",
          "created_at": "2026-10-11T02:57:51Z",
          "updated_at": "2026-10-12T15:07:28Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T05:00:06Z",
          "closed_at": "2026-10-11T05:00:06Z",
          "head_sha": "469bf2a588e372ed00546af3673c47bd680991ea",
          "scope": "Protects combobox caret appearance and open-state rotation through lint contracts.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "ComboboxCaretIcon` orientation remains public.\n- Add concrete agent guidance and real-config probes for aliases, namespaces, negative/variant rotation, accepted classes, and primitive internals.\n\n## Issue Number\n\nCloses #18271.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `fdf2d1c19ce04c8c373004573b3a59ab2b1ac169`. No product source, CSS, component API or dependency changed.\n\n- `node node_modules/vitest/vitest.mjs run __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lin"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18274"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18274; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18272,
      "title": "Stage inline-style warnings with a documented embedding-owner exception",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18272",
      "created_at": "2026-10-11T02:47:20Z",
      "updated_at": "2026-10-11T04:54:48Z",
      "state": "closed",
      "closed_at": "2026-10-11T04:54:48Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18275,
          "title": "chore(lint): stage inline-style warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18275",
          "created_at": "2026-10-11T03:06:37Z",
          "updated_at": "2026-10-12T15:07:30Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:54:47Z",
          "closed_at": "2026-10-11T04:54:47Z",
          "head_sha": "335134efef02cd2aa65a9ee364b8fb7d892deede",
          "scope": "Stages inline-style warnings with the requested embedding-owner exception and guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tains its scope.\n- Keep the plugin's built-in numeric/custom-variable support and warnings for literal colors injected into variables. Add real-config regression probes and contributor guidance.\n\n## Issue Number\n\nCloses #18272.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `f931b462c4da0a994877c70428900efe8b0b20c0`.\n\n1. Run `node node_modules/vitest/vitest.mjs run __tests__/scripts/inline-styles-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lint.test.ts _"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18275"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18275,
          "title": "chore(lint): stage inline-style warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18275",
          "created_at": "2026-10-11T03:06:37Z",
          "updated_at": "2026-10-12T15:07:30Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:54:47Z",
          "closed_at": "2026-10-11T04:54:47Z",
          "head_sha": "335134efef02cd2aa65a9ee364b8fb7d892deede",
          "scope": "Stages inline-style warnings with the requested embedding-owner exception and guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tains its scope.\n- Keep the plugin's built-in numeric/custom-variable support and warnings for literal colors injected into variables. Add real-config regression probes and contributor guidance.\n\n## Issue Number\n\nCloses #18272.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `f931b462c4da0a994877c70428900efe8b0b20c0`.\n\n1. Run `node node_modules/vitest/vitest.mjs run __tests__/scripts/inline-styles-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lint.test.ts _"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18275"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18275,
          "title": "chore(lint): stage inline-style warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18275",
          "created_at": "2026-10-11T03:06:37Z",
          "updated_at": "2026-10-12T15:07:30Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:54:47Z",
          "closed_at": "2026-10-11T04:54:47Z",
          "head_sha": "335134efef02cd2aa65a9ee364b8fb7d892deede",
          "scope": "Stages inline-style warnings with the requested embedding-owner exception and guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tains its scope.\n- Keep the plugin's built-in numeric/custom-variable support and warnings for literal colors injected into variables. Add real-config regression probes and contributor guidance.\n\n## Issue Number\n\nCloses #18272.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `f931b462c4da0a994877c70428900efe8b0b20c0`.\n\n1. Run `node node_modules/vitest/vitest.mjs run __tests__/scripts/inline-styles-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lint.test.ts _"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18275"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18275,
          "title": "chore(lint): stage inline-style warnings",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18275",
          "created_at": "2026-10-11T03:06:37Z",
          "updated_at": "2026-10-12T15:07:30Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:54:47Z",
          "closed_at": "2026-10-11T04:54:47Z",
          "head_sha": "335134efef02cd2aa65a9ee364b8fb7d892deede",
          "scope": "Stages inline-style warnings with the requested embedding-owner exception and guidance.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "tains its scope.\n- Keep the plugin's built-in numeric/custom-variable support and warnings for literal colors injected into variables. Add real-config regression probes and contributor guidance.\n\n## Issue Number\n\nCloses #18272.\n\n## How to Test\n\nBase: `fd3a76f48327ac142473026a874dd917977b745c`. Policy commit: `f931b462c4da0a994877c70428900efe8b0b20c0`.\n\n1. Run `node node_modules/vitest/vitest.mjs run __tests__/scripts/inline-styles-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/raw-colors-lint.test.ts _"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18275"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18275; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18277,
      "title": "MCP save-as-secret selection is too bright and unreadable in light themes",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18277",
      "created_at": "2026-10-11T04:41:52Z",
      "updated_at": "2026-10-12T04:21:19Z",
      "state": "closed",
      "closed_at": "2026-10-12T04:21:19Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Uses theme-aware MCP save-as-secret selection and contains the help control on phone widths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "and a visible keyboard-focus outline.\n- Keep long secret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests pas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18279,
          "title": "fix(mcp): align save-as-secret row with theme tokens and prevent mobile overflow",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18279",
          "created_at": "2026-10-11T06:10:12Z",
          "updated_at": "2026-10-13T20:18:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "244d626f9d6019d6f4c111b46856915f44ab694c",
          "scope": "Uses theme-aware MCP save-as-secret selection and prevents phone-width overflow.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " save as secret\" option row previously used fixed Tailwind raw green classes (`border-green-500/35`, `bg-green-500/10`, `border-green-500`, `bg-green-500`, `text-green-500`, and literal `bg-white` thumb). As reported in #18277:\n1. On light themes (`Light+` and `Solarized Light`), the checked secret-name label measured 1.70:1 and 1.56:1 contrast against the modal surface, failing WCAG 2.1 AA readability.\n2. The switch thumb measured 2.22:1 against the green track, failing the 3:1 non-text contrast requirement.\n3. At 390px phone viewport width, long secret identifiers pus",
              "WCAG >= 4.5:1 contrast for row label, secret name, and help glyph across all 5 built-in palettes in both checked and unchecked states\n    - Switch thumb vs track contrast >= 3:1 in all 5 palettes\n\n## Issue Number\n\nFixes #18277\n\n## How to Test\n\nRun the component tests:\n```bash\nnpm test -- __tests__/components/features/mcp-page/save-as-secret-toggle.test.tsx\n```\n\nVerify eslint rule:\n```bash\nnpx eslint src/components/features/mcp-page/save-as-secret-toggle.tsx --rule \"shadcn/no-raw-colors:error\"\n```\n\nRun TypeScript typecheck:\n```bash\nnpm run typecheck\n```\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18279"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Uses theme-aware MCP save-as-secret selection and contains the help control on phone widths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "and a visible keyboard-focus outline.\n- Keep long secret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests pas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18279,
          "title": "fix(mcp): align save-as-secret row with theme tokens and prevent mobile overflow",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18279",
          "created_at": "2026-10-11T06:10:12Z",
          "updated_at": "2026-10-13T20:18:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "244d626f9d6019d6f4c111b46856915f44ab694c",
          "scope": "Uses theme-aware MCP save-as-secret selection and prevents phone-width overflow.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " save as secret\" option row previously used fixed Tailwind raw green classes (`border-green-500/35`, `bg-green-500/10`, `border-green-500`, `bg-green-500`, `text-green-500`, and literal `bg-white` thumb). As reported in #18277:\n1. On light themes (`Light+` and `Solarized Light`), the checked secret-name label measured 1.70:1 and 1.56:1 contrast against the modal surface, failing WCAG 2.1 AA readability.\n2. The switch thumb measured 2.22:1 against the green track, failing the 3:1 non-text contrast requirement.\n3. At 390px phone viewport width, long secret identifiers pus",
              "WCAG >= 4.5:1 contrast for row label, secret name, and help glyph across all 5 built-in palettes in both checked and unchecked states\n    - Switch thumb vs track contrast >= 3:1 in all 5 palettes\n\n## Issue Number\n\nFixes #18277\n\n## How to Test\n\nRun the component tests:\n```bash\nnpm test -- __tests__/components/features/mcp-page/save-as-secret-toggle.test.tsx\n```\n\nVerify eslint rule:\n```bash\nnpx eslint src/components/features/mcp-page/save-as-secret-toggle.tsx --rule \"shadcn/no-raw-colors:error\"\n```\n\nRun TypeScript typecheck:\n```bash\nnpm run typecheck\n```\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18279"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Uses theme-aware MCP save-as-secret selection and contains the help control on phone widths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "and a visible keyboard-focus outline.\n- Keep long secret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests pas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18279,
          "title": "fix(mcp): align save-as-secret row with theme tokens and prevent mobile overflow",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18279",
          "created_at": "2026-10-11T06:10:12Z",
          "updated_at": "2026-10-13T20:18:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "244d626f9d6019d6f4c111b46856915f44ab694c",
          "scope": "Uses theme-aware MCP save-as-secret selection and prevents phone-width overflow.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " save as secret\" option row previously used fixed Tailwind raw green classes (`border-green-500/35`, `bg-green-500/10`, `border-green-500`, `bg-green-500`, `text-green-500`, and literal `bg-white` thumb). As reported in #18277:\n1. On light themes (`Light+` and `Solarized Light`), the checked secret-name label measured 1.70:1 and 1.56:1 contrast against the modal surface, failing WCAG 2.1 AA readability.\n2. The switch thumb measured 2.22:1 against the green track, failing the 3:1 non-text contrast requirement.\n3. At 390px phone viewport width, long secret identifiers pus",
              "WCAG >= 4.5:1 contrast for row label, secret name, and help glyph across all 5 built-in palettes in both checked and unchecked states\n    - Switch thumb vs track contrast >= 3:1 in all 5 palettes\n\n## Issue Number\n\nFixes #18277\n\n## How to Test\n\nRun the component tests:\n```bash\nnpm test -- __tests__/components/features/mcp-page/save-as-secret-toggle.test.tsx\n```\n\nVerify eslint rule:\n```bash\nnpx eslint src/components/features/mcp-page/save-as-secret-toggle.tsx --rule \"shadcn/no-raw-colors:error\"\n```\n\nRun TypeScript typecheck:\n```bash\nnpm run typecheck\n```\n\n## Video/Screens"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18279"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18278,
          "title": "fix(mcp): use theme-aware secret selection",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18278",
          "created_at": "2026-10-11T04:50:18Z",
          "updated_at": "2026-10-12T15:07:03Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T04:21:17Z",
          "closed_at": "2026-10-12T04:21:17Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Uses theme-aware MCP save-as-secret selection and contains the help control on phone widths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "and a visible keyboard-focus outline.\n- Keep long secret names and their help control inside the row.\n- Extend the existing help-button test and record the scoped appearance contract as MCP-005.\n\n## Issue Number\n\nCloses #18277. Continues the bounded migration tracked by #18004.\n\n## How to Test\n\nBase: `060badce585099d39c5411ef222a9bfa4da44017`. Product commit: `2d77d30328`. Evidence is retained at the immutable commit `5328e3fca0605bc964968e1b7dbdd84d555cc407`; temporary review files are already removed from the merge tree.\n\n- Focused Vitest run: **3 files / 50 tests pas"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18278"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18278; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18301,
      "title": "[Bug]: Preserve Automation KV encryption across session-key rotation",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18301",
      "created_at": "2026-10-12T02:34:14Z",
      "updated_at": "2026-10-12T10:46:48Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18305,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18305",
          "created_at": "2026-10-12T03:24:05Z",
          "updated_at": "2026-10-12T03:29:27Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T03:29:27Z",
          "head_sha": "82e01dd389d03bce91a9249fd245daa2a0cf0790",
          "scope": "Proposes the same KV secret pinning fix for session-key rotation; this remains a fix PR even though it was closed without merge.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "g their data with nothing to migrate.\n- The npm launcher resolves the pin before starting any service, and stops if the file exists but cannot be read rather than falling back to the session key.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\nSame script on `main` and on this branch: the real launcher (`main()` from `scripts/dev-with-automation.mjs` with `--backend-only`; the agent-server is stubbed out because it plays no part) and the released `openhands-automation==1.19.3` from PyPI, with a fresh state directory each time. It launches, creates an automation, writes "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18305"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18307,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18307",
          "created_at": "2026-10-12T03:28:55Z",
          "updated_at": "2026-10-12T15:10:00Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f2a7bc93132990baffa6857d722485a727729367",
          "scope": "Pins Automation KV encryption secret independently from later session-key rotations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".\n- Both launchers read the pin the same way: trailing line breaks (CR or LF) are not part of the key, and a blank file counts as not pinned yet, so it is replaced with the session key in effect.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\n**Real stack, driven with `control-openhands` (`verify-openhands` skill)**, on `main` and then on this branch. Two scenarios.\n\n**1. Rotation on the current automation (1.19.3).**\n\n1. Run `control-openhands launch --new`, `doctor` and `onboard --skip`.\n2. Create an automation and write a KV value:\n   - `control-openhands api POST /"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18307"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18305,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18305",
          "created_at": "2026-10-12T03:24:05Z",
          "updated_at": "2026-10-12T03:29:27Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T03:29:27Z",
          "head_sha": "82e01dd389d03bce91a9249fd245daa2a0cf0790",
          "scope": "Proposes the same KV secret pinning fix for session-key rotation; this remains a fix PR even though it was closed without merge.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "g their data with nothing to migrate.\n- The npm launcher resolves the pin before starting any service, and stops if the file exists but cannot be read rather than falling back to the session key.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\nSame script on `main` and on this branch: the real launcher (`main()` from `scripts/dev-with-automation.mjs` with `--backend-only`; the agent-server is stubbed out because it plays no part) and the released `openhands-automation==1.19.3` from PyPI, with a fresh state directory each time. It launches, creates an automation, writes "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18305"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18307,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18307",
          "created_at": "2026-10-12T03:28:55Z",
          "updated_at": "2026-10-12T15:10:00Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f2a7bc93132990baffa6857d722485a727729367",
          "scope": "Pins Automation KV encryption secret independently from later session-key rotations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".\n- Both launchers read the pin the same way: trailing line breaks (CR or LF) are not part of the key, and a blank file counts as not pinned yet, so it is replaced with the session key in effect.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\n**Real stack, driven with `control-openhands` (`verify-openhands` skill)**, on `main` and then on this branch. Two scenarios.\n\n**1. Rotation on the current automation (1.19.3).**\n\n1. Run `control-openhands launch --new`, `doctor` and `onboard --skip`.\n2. Create an automation and write a KV value:\n   - `control-openhands api POST /"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18307"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 1,
      "own_open_pr_count": 1,
      "other_open_pr_count": 0,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18307,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18307",
          "created_at": "2026-10-12T03:28:55Z",
          "updated_at": "2026-10-12T15:10:00Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "f2a7bc93132990baffa6857d722485a727729367",
          "scope": "Pins Automation KV encryption secret independently from later session-key rotations.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              ".\n- Both launchers read the pin the same way: trailing line breaks (CR or LF) are not part of the key, and a blank file counts as not pinned yet, so it is replaced with the session key in effect.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\n**Real stack, driven with `control-openhands` (`verify-openhands` skill)**, on `main` and then on this branch. Two scenarios.\n\n**1. Rotation on the current automation (1.19.3).**\n\n1. Run `control-openhands launch --new`, `doctor` and `onboard --skip`.\n2. Create an automation and write a KV value:\n   - `control-openhands api POST /"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18307"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18305,
          "title": "fix: pin the automation KV secret so session-key rotation keeps KV data readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18305",
          "created_at": "2026-10-12T03:24:05Z",
          "updated_at": "2026-10-12T03:29:27Z",
          "state": "closed",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": "2026-10-12T03:29:27Z",
          "head_sha": "82e01dd389d03bce91a9249fd245daa2a0cf0790",
          "scope": "Proposes the same KV secret pinning fix for session-key rotation; this remains a fix PR even though it was closed without merge.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "g their data with nothing to migrate.\n- The npm launcher resolves the pin before starting any service, and stops if the file exists but cannot be read rather than falling back to the session key.\n\n## Issue Number\n\nFixes #18301\n\n## How to Test\n\nSame script on `main` and on this branch: the real launcher (`main()` from `scripts/dev-with-automation.mjs` with `--backend-only`; the agent-server is stubbed out because it plays no part) and the released `openhands-automation==1.19.3` from PyPI, with a fresh state directory each time. It launches, creates an automation, writes "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18305"
            ]
          },
          "direct_closer": false
        }
      ],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18302,
      "title": "[Bug]: Onboarding's LLM step overwrites an existing LLM profile that has the model-derived name",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18302",
      "created_at": "2026-10-12T02:55:47Z",
      "updated_at": "2026-10-12T22:29:54Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18310,
          "title": "fix(onboarding): prevent silent overwrite when derived profile name collides",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18310",
          "created_at": "2026-10-12T04:05:21Z",
          "updated_at": "2026-10-12T22:59:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "ab5f66305d522d6d394ab28e2173f68fac2c0779",
          "scope": "Resolves derived onboarding profile-name collisions without silently overwriting an existing profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "name when editing an existing profile in place.\n- Append incremental numeric suffixes (`-2`, `-3`) for newly created profiles on collision.\n- Retain unchanged behavior for non-colliding profiles.\n\n## Issue Number\n\nFixes #18302\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/onboarding/setup-llm-step.test.tsx` (26 passed).\n- Run all onboarding suites `npx vitest run __tests__/components/onboarding/` (122 passed).\n- Run `npm run lint` and `npm run typecheck`.\n\n## Video/Screenshots\n\n<!-- Frontend onboarding profile collision handling verified via unit and integ"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18310"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18310,
          "title": "fix(onboarding): prevent silent overwrite when derived profile name collides",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18310",
          "created_at": "2026-10-12T04:05:21Z",
          "updated_at": "2026-10-12T22:59:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "ab5f66305d522d6d394ab28e2173f68fac2c0779",
          "scope": "Resolves derived onboarding profile-name collisions without silently overwriting an existing profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "name when editing an existing profile in place.\n- Append incremental numeric suffixes (`-2`, `-3`) for newly created profiles on collision.\n- Retain unchanged behavior for non-colliding profiles.\n\n## Issue Number\n\nFixes #18302\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/onboarding/setup-llm-step.test.tsx` (26 passed).\n- Run all onboarding suites `npx vitest run __tests__/components/onboarding/` (122 passed).\n- Run `npm run lint` and `npm run typecheck`.\n\n## Video/Screenshots\n\n<!-- Frontend onboarding profile collision handling verified via unit and integ"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18310"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18304,
          "title": "docs(verify-openhands): record every known bug in the feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18304",
          "created_at": "2026-10-12T03:09:27Z",
          "updated_at": "2026-10-12T15:07:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T03:51:27Z",
          "closed_at": "2026-10-12T03:51:27Z",
          "head_sha": "230e85f512ff15dbcf3d461683f9415d7fc49349",
          "scope": "Records the reported product bug as a known failure and adds future bug-intake rules.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " a defect found in a pass was not always recorded in the map.\n- Nothing brought in bugs filed outside a pass, by people or other agents, so the map never learned about them.\n\nThree such bugs came out of #18218's review: #18302, #17135 and #18303. None was in the map, and no recipe steps through them, so the next pass would not have found them, nor re-checked them once fixed.\n\n## Summary\n\n- **Rule: the map knows every open bug** (`SKILL.md`, `maintenance.md`, `daily.md`, `mapping.md`).\n  - A filed defect gets a `Known failure (reproduced <date>, #<issue>)` note on the bu",
              " `BASE` that name a mapped feature: they reproduce each one and add its note. When one doesn't reproduce, they comment on the issue with the run instead.\n- **F01, `onboarding-repeat-endpoint`:** a Known failure note for #18302. Next replaces a profile that already has the model-derived name, and that profile's Base URL is lost.\n- **F01, Gotchas:** the entry that still described #17884's settings-diff bug now describes the profile-first LLM step from #18218. That covers which profile it edits, the wait for a reachable backend, the load error with Retry, and Next without ",
              " never writes to the form.\n- **F10, Gotchas:** `Known issue #18303`, the untranslated \"Subscription models are not loaded yet.\" toast, which no recipe can drive.\n\n## Issue Number\n\nRefs #17568\n\nThe bugs recorded here are #18302, #17135 and #18303.\n\n## How to Test\n\nI re-drove both new notes exactly as written, on a fresh `control-openhands launch --new` of `main` at `51fc673f0`, with Agent Server 1.54.0 and DeepSeek.\n\n**`F01.onboarding-repeat-endpoint`:**\n\n| Step | Result |\n| --- | --- |\n| Pass 1 | Saves and activates `deepseek-chat` (`https://api.deepseek.com/v1`). |\n| A"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18304"
            ]
          },
          "direct_closer": false,
          "reason": "Recording a bug in the verification map does not fix its product behavior."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "n #18004. Clearing the time and saving midnight is a new path for #17948; open PR #18260 changes only the now-unused edit modal.\n\nStill reproducing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18310,
          "title": "fix(onboarding): prevent silent overwrite when derived profile name collides",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18310",
          "created_at": "2026-10-12T04:05:21Z",
          "updated_at": "2026-10-12T22:59:31Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "ab5f66305d522d6d394ab28e2173f68fac2c0779",
          "scope": "Resolves derived onboarding profile-name collisions without silently overwriting an existing profile.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "name when editing an existing profile in place.\n- Append incremental numeric suffixes (`-2`, `-3`) for newly created profiles on collision.\n- Retain unchanged behavior for non-colliding profiles.\n\n## Issue Number\n\nFixes #18302\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/onboarding/setup-llm-step.test.tsx` (26 passed).\n- Run all onboarding suites `npx vitest run __tests__/components/onboarding/` (122 passed).\n- Run `npm run lint` and `npm run typecheck`.\n\n## Video/Screenshots\n\n<!-- Frontend onboarding profile collision handling verified via unit and integ"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18310"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18303,
      "title": "[Bug]: \"Subscription models are not loaded yet.\" is shown untranslated",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18303",
      "created_at": "2026-10-12T02:56:09Z",
      "updated_at": "2026-10-12T13:46:18Z",
      "state": "closed",
      "closed_at": "2026-10-12T13:46:18Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18306,
          "title": "fix(i18n): translate \"Subscription models are not loaded yet.\" toast",
          "author": "all-hands-bot",
          "author_url": "https://github.com/all-hands-bot",
          "url": "https://github.com/OpenHands/OpenHands/pull/18306",
          "created_at": "2026-10-12T03:25:49Z",
          "updated_at": "2026-10-12T04:12:59Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "30bf4e12438b243db9fd76f36e872c99503c53d6",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "s with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n- `scripts/check-translation-completeness.cjs` passes and the `npm run make-i18n`\n  generated declaration/locales include the new key.\n\n## Issue Number\n\nFixes #18303 (issue carries the `ready-for-dev` label; environment/version and\nreproduction steps were added to the issue body).\n\n## How to Test\n\nNon-functional (i18n) change; verified with the repository checks and test\nsuite:\n\n1. `npm run make-i18n` — regenerates `src/i18n/declaration.ts` and\n   `public/locales/<lang>/openhands.json`; running it creates\n   `",
              "ption backend (OpenAI OAuth + active plan), not available here; I did not fabricate media, disclosed the absence honestly in the issue and PR, and left the PR as **draft**.\n\n**PR: https://github.com/OpenHands/OpenHands/pull/18306** — once a human adds the `HUMAN:` note and either adds a running-app capture or waives the visual-evidence requirement, the description check passes and the PR can be marked ready.\n\nThe next concrete action needed from a human: **fill in "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18306"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18308,
          "title": "fix(i18n): use translation key for subscription models not loaded message",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18308",
          "created_at": "2026-10-12T03:29:20Z",
          "updated_at": "2026-10-12T15:06:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T13:46:16Z",
          "closed_at": "2026-10-12T13:46:16Z",
          "head_sha": "706d9c9f5e0329f8188ea028e84bcad14de7bb1d",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "eclarations and dictionaries via `npm run make-i18n`.\n- Replace hardcoded English strings in `llm-settings.tsx` and `setup-llm-step.tsx` with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n\n## Issue Number\n\nFixes #18303\n\n## How to Test\n\n- Run `node scripts/check-translation-completeness.cjs` (passed for all 15 locales).\n- Run `npx vitest run __tests__/routes/llm-settings.test.tsx` (passed).\n- Run `npm run lint`.\n\n## Video/Screenshots\n\n<!-- Frontend i18n toast unification verified via complete translation suite and unit tests -->\n![i18n test verification](https://"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18308"
            ]
          },
          "direct_closer": true
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18306,
          "title": "fix(i18n): translate \"Subscription models are not loaded yet.\" toast",
          "author": "all-hands-bot",
          "author_url": "https://github.com/all-hands-bot",
          "url": "https://github.com/OpenHands/OpenHands/pull/18306",
          "created_at": "2026-10-12T03:25:49Z",
          "updated_at": "2026-10-12T04:12:59Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "30bf4e12438b243db9fd76f36e872c99503c53d6",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "s with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n- `scripts/check-translation-completeness.cjs` passes and the `npm run make-i18n`\n  generated declaration/locales include the new key.\n\n## Issue Number\n\nFixes #18303 (issue carries the `ready-for-dev` label; environment/version and\nreproduction steps were added to the issue body).\n\n## How to Test\n\nNon-functional (i18n) change; verified with the repository checks and test\nsuite:\n\n1. `npm run make-i18n` — regenerates `src/i18n/declaration.ts` and\n   `public/locales/<lang>/openhands.json`; running it creates\n   `",
              "ption backend (OpenAI OAuth + active plan), not available here; I did not fabricate media, disclosed the absence honestly in the issue and PR, and left the PR as **draft**.\n\n**PR: https://github.com/OpenHands/OpenHands/pull/18306** — once a human adds the `HUMAN:` note and either adds a running-app capture or waives the visual-evidence requirement, the description check passes and the PR can be marked ready.\n\nThe next concrete action needed from a human: **fill in "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18306"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18308,
          "title": "fix(i18n): use translation key for subscription models not loaded message",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18308",
          "created_at": "2026-10-12T03:29:20Z",
          "updated_at": "2026-10-12T15:06:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T13:46:16Z",
          "closed_at": "2026-10-12T13:46:16Z",
          "head_sha": "706d9c9f5e0329f8188ea028e84bcad14de7bb1d",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "eclarations and dictionaries via `npm run make-i18n`.\n- Replace hardcoded English strings in `llm-settings.tsx` and `setup-llm-step.tsx` with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n\n## Issue Number\n\nFixes #18303\n\n## How to Test\n\n- Run `node scripts/check-translation-completeness.cjs` (passed for all 15 locales).\n- Run `npx vitest run __tests__/routes/llm-settings.test.tsx` (passed).\n- Run `npm run lint`.\n\n## Video/Screenshots\n\n<!-- Frontend i18n toast unification verified via complete translation suite and unit tests -->\n![i18n test verification](https://"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18308"
            ]
          },
          "direct_closer": true
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18304,
          "title": "docs(verify-openhands): record every known bug in the feature map",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18304",
          "created_at": "2026-10-12T03:09:27Z",
          "updated_at": "2026-10-12T15:07:07Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T03:51:27Z",
          "closed_at": "2026-10-12T03:51:27Z",
          "head_sha": "230e85f512ff15dbcf3d461683f9415d7fc49349",
          "scope": "Records the reported product bug as a known failure and adds future bug-intake rules.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "a pass was not always recorded in the map.\n- Nothing brought in bugs filed outside a pass, by people or other agents, so the map never learned about them.\n\nThree such bugs came out of #18218's review: #18302, #17135 and #18303. None was in the map, and no recipe steps through them, so the next pass would not have found them, nor re-checked them once fixed.\n\n## Summary\n\n- **Rule: the map knows every open bug** (`SKILL.md`, `maintenance.md`, `daily.md`, `mapping.md`).\n  - A filed defect gets a `Known failure (reproduced <date>, #<issue>)` note on the bullet that reproduce",
              "*F10, `subscription`:** a Known failure note for #17135. Save says \"Model is required\" while the dropdown shows `gpt-5.5`, because the dropdown shows a model it never writes to the form.\n- **F10, Gotchas:** `Known issue #18303`, the untranslated \"Subscription models are not loaded yet.\" toast, which no recipe can drive.\n\n## Issue Number\n\nRefs #17568\n\nThe bugs recorded here are #18302, #17135 and #18303.\n\n## How to Test\n\nI re-drove both new notes exactly as written, on a fresh `control-openhands launch --new` of `main` at `51fc673f0`, with Agent Server 1.54.0 and DeepSee",
              "e form.\n- **F10, Gotchas:** `Known issue #18303`, the untranslated \"Subscription models are not loaded yet.\" toast, which no recipe can drive.\n\n## Issue Number\n\nRefs #17568\n\nThe bugs recorded here are #18302, #17135 and #18303.\n\n## How to Test\n\nI re-drove both new notes exactly as written, on a fresh `control-openhands launch --new` of `main` at `51fc673f0`, with Agent Server 1.54.0 and DeepSeek.\n\n**`F01.onboarding-repeat-endpoint`:**\n\n| Step | Result |\n| --- | --- |\n| Pass 1 | Saves and activates `deepseek-chat` (`https://api.deepseek.com/v1`). |\n| Arrange before pass "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18304"
            ]
          },
          "direct_closer": false,
          "reason": "Recording a bug in the verification map does not fix its product behavior."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "nu keyboard)\n  - #18061 (F22 Default profile)\n  - #18173 (F23 logs dialog)\n  - #18178 (F26 IPv6-less Docker)\n  - #18206 (F07 hooks text)\n  - #17884 (F01 hello reply)\n- **#18303 (F10):** source-verified only. Both call sites use `SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED`, which is translated in every locale. A live drive needs a slow subscription-models request.\n\n## Defects f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18308,
          "title": "fix(i18n): use translation key for subscription models not loaded message",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18308",
          "created_at": "2026-10-12T03:29:20Z",
          "updated_at": "2026-10-12T15:06:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T13:46:16Z",
          "closed_at": "2026-10-12T13:46:16Z",
          "head_sha": "706d9c9f5e0329f8188ea028e84bcad14de7bb1d",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "eclarations and dictionaries via `npm run make-i18n`.\n- Replace hardcoded English strings in `llm-settings.tsx` and `setup-llm-step.tsx` with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n\n## Issue Number\n\nFixes #18303\n\n## How to Test\n\n- Run `node scripts/check-translation-completeness.cjs` (passed for all 15 locales).\n- Run `npx vitest run __tests__/routes/llm-settings.test.tsx` (passed).\n- Run `npm run lint`.\n\n## Video/Screenshots\n\n<!-- Frontend i18n toast unification verified via complete translation suite and unit tests -->\n![i18n test verification](https://"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18308"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18306,
          "title": "fix(i18n): translate \"Subscription models are not loaded yet.\" toast",
          "author": "all-hands-bot",
          "author_url": "https://github.com/all-hands-bot",
          "url": "https://github.com/OpenHands/OpenHands/pull/18306",
          "created_at": "2026-10-12T03:25:49Z",
          "updated_at": "2026-10-12T04:12:59Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "30bf4e12438b243db9fd76f36e872c99503c53d6",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "issue_body_or_comment_pr_link"
            ],
            "reference_contexts": [
              "s with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n- `scripts/check-translation-completeness.cjs` passes and the `npm run make-i18n`\n  generated declaration/locales include the new key.\n\n## Issue Number\n\nFixes #18303 (issue carries the `ready-for-dev` label; environment/version and\nreproduction steps were added to the issue body).\n\n## How to Test\n\nNon-functional (i18n) change; verified with the repository checks and test\nsuite:\n\n1. `npm run make-i18n` — regenerates `src/i18n/declaration.ts` and\n   `public/locales/<lang>/openhands.json`; running it creates\n   `",
              "ption backend (OpenAI OAuth + active plan), not available here; I did not fabricate media, disclosed the absence honestly in the issue and PR, and left the PR as **draft**.\n\n**PR: https://github.com/OpenHands/OpenHands/pull/18306** — once a human adds the `HUMAN:` note and either adds a running-app capture or waives the visual-evidence requirement, the description check passes and the PR can be marked ready.\n\nThe next concrete action needed from a human: **fill in "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18306"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18308,
          "title": "fix(i18n): use translation key for subscription models not loaded message",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18308",
          "created_at": "2026-10-12T03:29:20Z",
          "updated_at": "2026-10-12T15:06:52Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T13:46:16Z",
          "closed_at": "2026-10-12T13:46:16Z",
          "head_sha": "706d9c9f5e0329f8188ea028e84bcad14de7bb1d",
          "scope": "Translates the subscription-models-not-loaded message at both call sites.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              "eclarations and dictionaries via `npm run make-i18n`.\n- Replace hardcoded English strings in `llm-settings.tsx` and `setup-llm-step.tsx` with `t(I18nKey.SETTINGS$SUBSCRIPTION_MODELS_NOT_LOADED)`.\n\n## Issue Number\n\nFixes #18303\n\n## How to Test\n\n- Run `node scripts/check-translation-completeness.cjs` (passed for all 15 locales).\n- Run `npx vitest run __tests__/routes/llm-settings.test.tsx` (passed).\n- Run `npm run lint`.\n\n## Video/Screenshots\n\n<!-- Frontend i18n toast unification verified via complete translation suite and unit tests -->\n![i18n test verification](https://"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18308"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18308; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18309,
      "title": "[Feature]: Backfill the verify-openhands feature map with every open bug",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18309",
      "created_at": "2026-10-12T03:49:18Z",
      "updated_at": "2026-10-12T04:05:41Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18334,
          "title": "docs(verify-openhands): backfill all existing open bugs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18334",
          "created_at": "2026-10-12T10:45:07Z",
          "updated_at": "2026-10-12T10:50:30Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "655b0ba621a41cf331d81433ff4be0c8f4937675",
          "scope": "Backfills the specifically requested feature-map inventory with all existing open bugs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "/github.com/OpenHands/OpenHands/blob/655b0ba621a41cf331d81433ff4be0c8f4937675/.agents/skills/verify-openhands/references/bug-backfill.md). All edits are within `.agents/skills/verify-openhands/`.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\nFrom this checkout:\n\n```sh\nnpm ci --ignore-scripts --no-audit --no-fund\nnpx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map check\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map coverage\n.agents/skills/verify-openhands"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18334"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18322,
          "title": "docs(verify-openhands): clarify open bug rule applies from baseline forward",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18322",
          "created_at": "2026-10-12T06:44:19Z",
          "updated_at": "2026-10-12T15:07:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "80e4dc106e597f466c1c0efd3de66e2e1633ac75",
          "scope": "Implements the specifically requested baseline-forward caveat in SKILL.md and mapping.md while leaving the bug backfill for later work.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ance baseline` forward until the backfill is complete.\n- Update `references/mapping.md` to include the same baseline forward caveat.\n- Verify `control-openhands map check` passes with 0 problems.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\n- Run `node .agents/skills/verify-openhands/scripts/control-openhands.mjs map check`.\n- Run `npx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs` (54 passed).\n- Run `npx prettier --check .agents/skills/verify-openhands/SKILL.md .agents/skills/verify-openhands/references/mapping.md`.\n\n## Video/Screensh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18322"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18322,
          "title": "docs(verify-openhands): clarify open bug rule applies from baseline forward",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18322",
          "created_at": "2026-10-12T06:44:19Z",
          "updated_at": "2026-10-12T15:07:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "80e4dc106e597f466c1c0efd3de66e2e1633ac75",
          "scope": "Implements the specifically requested baseline-forward caveat in SKILL.md and mapping.md while leaving the bug backfill for later work.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ance baseline` forward until the backfill is complete.\n- Update `references/mapping.md` to include the same baseline forward caveat.\n- Verify `control-openhands map check` passes with 0 problems.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\n- Run `node .agents/skills/verify-openhands/scripts/control-openhands.mjs map check`.\n- Run `npx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs` (54 passed).\n- Run `npx prettier --check .agents/skills/verify-openhands/SKILL.md .agents/skills/verify-openhands/references/mapping.md`.\n\n## Video/Screensh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18322"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18334,
          "title": "docs(verify-openhands): backfill all existing open bugs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18334",
          "created_at": "2026-10-12T10:45:07Z",
          "updated_at": "2026-10-12T10:50:30Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "655b0ba621a41cf331d81433ff4be0c8f4937675",
          "scope": "Backfills the specifically requested feature-map inventory with all existing open bugs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "/github.com/OpenHands/OpenHands/blob/655b0ba621a41cf331d81433ff4be0c8f4937675/.agents/skills/verify-openhands/references/bug-backfill.md). All edits are within `.agents/skills/verify-openhands/`.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\nFrom this checkout:\n\n```sh\nnpm ci --ignore-scripts --no-audit --no-fund\nnpx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map check\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map coverage\n.agents/skills/verify-openhands"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18334"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18322,
          "title": "docs(verify-openhands): clarify open bug rule applies from baseline forward",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18322",
          "created_at": "2026-10-12T06:44:19Z",
          "updated_at": "2026-10-12T15:07:14Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "80e4dc106e597f466c1c0efd3de66e2e1633ac75",
          "scope": "Implements the specifically requested baseline-forward caveat in SKILL.md and mapping.md while leaving the bug backfill for later work.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ance baseline` forward until the backfill is complete.\n- Update `references/mapping.md` to include the same baseline forward caveat.\n- Verify `control-openhands map check` passes with 0 problems.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\n- Run `node .agents/skills/verify-openhands/scripts/control-openhands.mjs map check`.\n- Run `npx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs` (54 passed).\n- Run `npx prettier --check .agents/skills/verify-openhands/SKILL.md .agents/skills/verify-openhands/references/mapping.md`.\n\n## Video/Screensh"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18322"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18334,
          "title": "docs(verify-openhands): backfill all existing open bugs",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18334",
          "created_at": "2026-10-12T10:45:07Z",
          "updated_at": "2026-10-12T10:50:30Z",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "655b0ba621a41cf331d81433ff4be0c8f4937675",
          "scope": "Backfills the specifically requested feature-map inventory with all existing open bugs.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "/github.com/OpenHands/OpenHands/blob/655b0ba621a41cf331d81433ff4be0c8f4937675/.agents/skills/verify-openhands/references/bug-backfill.md). All edits are within `.agents/skills/verify-openhands/`.\n\n## Issue Number\n\nFixes #18309\n\n## How to Test\n\nFrom this checkout:\n\n```sh\nnpm ci --ignore-scripts --no-audit --no-fund\nnpx vitest run .agents/skills/verify-openhands/scripts/control-openhands.test.mjs\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map check\n.agents/skills/verify-openhands/scripts/control-openhands.mjs map coverage\n.agents/skills/verify-openhands"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18334"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18312,
      "title": "Weekly frontend test-quality sweep",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18312",
      "created_at": "2026-10-12T04:39:15Z",
      "updated_at": "2026-10-12T04:45:07Z",
      "state": "closed",
      "closed_at": "2026-10-12T04:43:43Z",
      "state_reason": "completed",
      "has_own_pr": false,
      "own_prs": [],
      "other_prs": [],
      "proposed_prs": [],
      "excluded_references": [],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": "Closed without an identified direct merged-PR closer; closure alone does not prove an implementation."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18314,
      "title": "Upgrade @shadcn/lint to 0.2.1 with paint-none regression coverage",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18314",
      "created_at": "2026-10-12T04:45:39Z",
      "updated_at": "2026-10-12T05:46:34Z",
      "state": "closed",
      "closed_at": "2026-10-12T05:46:34Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18315,
          "title": "chore(lint): update shadcn lint to 0.2.1",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18315",
          "created_at": "2026-10-12T04:58:19Z",
          "updated_at": "2026-10-12T15:06:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T05:46:33Z",
          "closed_at": "2026-10-12T05:46:33Z",
          "head_sha": "9d1d0edbfa810d099f7c5adc08e6463996aed278",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " release workflows use major action tags. `npm audit --json` lists no advisory for either changed package; 40 findings are in other, unchanged packages (1 low, 18 moderate, 19 high, 2 critical).\n\n## Issue Number\n\nCloses #18314\n\n## How to Test\n\nTested on Node 24.19.0 with npm 11.12.1:\n\n| Check | Result |\n| --- | --- |\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` on 0.2.0, with the new test | Expected failure: `fill-none` and `stroke-none` each warned; the two existing cases passed |\n| Lint-contract, dependency-policy, and staged-portability tests on 0.2.1"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18315"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18316,
          "title": "chore(lint): upgrade @shadcn/lint to 0.2.1 and add paint-none test coverage",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18316",
          "created_at": "2026-10-12T05:37:57Z",
          "updated_at": "2026-10-12T05:44:10Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8b7c57e42e693e449858bdc3fb8bccb53eab2224",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "and `stroke-none` produce no `shadcn/no-raw-colors` warnings under the shipped ESLint configuration.\n- Retain all six existing `shadcn/*` rule configurations and severities in `eslint.config.js`.\n\n## Issue Number\n\nFixes #18314\n\n## How to Test\n\n- Run `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` (4 passed).\n- Run all lint-contract suites `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/inline-styles-lint.test.ts` (11 passed).\n- Run `npm run lint` ("
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18316"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18315,
          "title": "chore(lint): update shadcn lint to 0.2.1",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18315",
          "created_at": "2026-10-12T04:58:19Z",
          "updated_at": "2026-10-12T15:06:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T05:46:33Z",
          "closed_at": "2026-10-12T05:46:33Z",
          "head_sha": "9d1d0edbfa810d099f7c5adc08e6463996aed278",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " release workflows use major action tags. `npm audit --json` lists no advisory for either changed package; 40 findings are in other, unchanged packages (1 low, 18 moderate, 19 high, 2 critical).\n\n## Issue Number\n\nCloses #18314\n\n## How to Test\n\nTested on Node 24.19.0 with npm 11.12.1:\n\n| Check | Result |\n| --- | --- |\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` on 0.2.0, with the new test | Expected failure: `fill-none` and `stroke-none` each warned; the two existing cases passed |\n| Lint-contract, dependency-policy, and staged-portability tests on 0.2.1"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18315"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18316,
          "title": "chore(lint): upgrade @shadcn/lint to 0.2.1 and add paint-none test coverage",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18316",
          "created_at": "2026-10-12T05:37:57Z",
          "updated_at": "2026-10-12T05:44:10Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8b7c57e42e693e449858bdc3fb8bccb53eab2224",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "and `stroke-none` produce no `shadcn/no-raw-colors` warnings under the shipped ESLint configuration.\n- Retain all six existing `shadcn/*` rule configurations and severities in `eslint.config.js`.\n\n## Issue Number\n\nFixes #18314\n\n## How to Test\n\n- Run `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` (4 passed).\n- Run all lint-contract suites `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/inline-styles-lint.test.ts` (11 passed).\n- Run `npm run lint` ("
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18316"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18315,
          "title": "chore(lint): update shadcn lint to 0.2.1",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18315",
          "created_at": "2026-10-12T04:58:19Z",
          "updated_at": "2026-10-12T15:06:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T05:46:33Z",
          "closed_at": "2026-10-12T05:46:33Z",
          "head_sha": "9d1d0edbfa810d099f7c5adc08e6463996aed278",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " release workflows use major action tags. `npm audit --json` lists no advisory for either changed package; 40 findings are in other, unchanged packages (1 low, 18 moderate, 19 high, 2 critical).\n\n## Issue Number\n\nCloses #18314\n\n## How to Test\n\nTested on Node 24.19.0 with npm 11.12.1:\n\n| Check | Result |\n| --- | --- |\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` on 0.2.0, with the new test | Expected failure: `fill-none` and `stroke-none` each warned; the two existing cases passed |\n| Lint-contract, dependency-policy, and staged-portability tests on 0.2.1"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18315"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18316,
          "title": "chore(lint): upgrade @shadcn/lint to 0.2.1 and add paint-none test coverage",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18316",
          "created_at": "2026-10-12T05:37:57Z",
          "updated_at": "2026-10-12T05:44:10Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "8b7c57e42e693e449858bdc3fb8bccb53eab2224",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "and `stroke-none` produce no `shadcn/no-raw-colors` warnings under the shipped ESLint configuration.\n- Retain all six existing `shadcn/*` rule configurations and severities in `eslint.config.js`.\n\n## Issue Number\n\nFixes #18314\n\n## How to Test\n\n- Run `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` (4 passed).\n- Run all lint-contract suites `npx vitest run __tests__/scripts/raw-colors-lint.test.ts __tests__/scripts/restyle-lint.test.ts __tests__/scripts/static-classes-lint.test.ts __tests__/scripts/inline-styles-lint.test.ts` (11 passed).\n- Run `npm run lint` ("
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18316"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18315,
          "title": "chore(lint): update shadcn lint to 0.2.1",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18315",
          "created_at": "2026-10-12T04:58:19Z",
          "updated_at": "2026-10-12T15:06:59Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T05:46:33Z",
          "closed_at": "2026-10-12T05:46:33Z",
          "head_sha": "9d1d0edbfa810d099f7c5adc08e6463996aed278",
          "scope": "Upgrades the requested lint dependency and adds paint-none regression coverage.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event"
            ],
            "reference_contexts": [
              " release workflows use major action tags. `npm audit --json` lists no advisory for either changed package; 40 findings are in other, unchanged packages (1 low, 18 moderate, 19 high, 2 critical).\n\n## Issue Number\n\nCloses #18314\n\n## How to Test\n\nTested on Node 24.19.0 with npm 11.12.1:\n\n| Check | Result |\n| --- | --- |\n| `npx vitest run __tests__/scripts/raw-colors-lint.test.ts` on 0.2.0, with the new test | Expected failure: `fill-none` and `stroke-none` each warned; the two existing cases passed |\n| Lint-contract, dependency-policy, and staged-portability tests on 0.2.1"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18315"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18315; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18318,
      "title": "Remove redundant text-medium raw-color exception",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18318",
      "created_at": "2026-10-12T06:24:19Z",
      "updated_at": "2026-10-13T04:11:12Z",
      "state": "closed",
      "closed_at": "2026-10-13T04:11:12Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18320,
          "title": "chore(lint): remove redundant text-medium color exception",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18320",
          "created_at": "2026-10-12T06:27:23Z",
          "updated_at": "2026-10-13T04:11:46Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:11:11Z",
          "closed_at": "2026-10-13T04:11:11Z",
          "head_sha": "cd42717bb93ee360d40b182c1418847529964dc7",
          "scope": "Removes the redundant text-medium raw-color lint exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt. Keep the seven legacy color exceptions and all rule severities unchanged. Application classes and rendered font sizes are unchanged. This PR is independent of the color migrations in #18004.\n\n## Issue Number\n\nCloses #18318\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689968148) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689967955).\n\n- Six existing lint/build-contract test files: **14 te"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18320"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18323,
          "title": "chore(lint): remove redundant text-medium raw-color exception",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18323",
          "created_at": "2026-10-12T07:13:59Z",
          "updated_at": "2026-10-12T07:14:15Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b685f27d1429727440897ed29de7f3c7f9fd0db9",
          "scope": "Removes the redundant text-medium raw-color exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n `eslint.config.js`.\n- Update the rollout comment to clarify that the section now covers HeroUI semantic colors.\n- Retain all seven legacy color exceptions and adopted rule severities unchanged.\n\n## Issue Number\n\nFixes #18318\n\n## How to Test\n\nRun the existing lint probe test:\n```bash\nnpx vitest run __tests__/scripts/raw-colors-lint.test.ts\n```\nVerify that `npm run lint` completes with zero errors and no warnings attributable to `text-medium`.\n\n## Type of change\n\n- [ ] Bug fix (non-breaking change which fixes an issue)\n- [ ] New feature (non-breaking change which adds f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18323"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18320,
          "title": "chore(lint): remove redundant text-medium color exception",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18320",
          "created_at": "2026-10-12T06:27:23Z",
          "updated_at": "2026-10-13T04:11:46Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:11:11Z",
          "closed_at": "2026-10-13T04:11:11Z",
          "head_sha": "cd42717bb93ee360d40b182c1418847529964dc7",
          "scope": "Removes the redundant text-medium raw-color lint exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt. Keep the seven legacy color exceptions and all rule severities unchanged. Application classes and rendered font sizes are unchanged. This PR is independent of the color migrations in #18004.\n\n## Issue Number\n\nCloses #18318\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689968148) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689967955).\n\n- Six existing lint/build-contract test files: **14 te"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18320"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18323,
          "title": "chore(lint): remove redundant text-medium raw-color exception",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18323",
          "created_at": "2026-10-12T07:13:59Z",
          "updated_at": "2026-10-12T07:14:15Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b685f27d1429727440897ed29de7f3c7f9fd0db9",
          "scope": "Removes the redundant text-medium raw-color exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n `eslint.config.js`.\n- Update the rollout comment to clarify that the section now covers HeroUI semantic colors.\n- Retain all seven legacy color exceptions and adopted rule severities unchanged.\n\n## Issue Number\n\nFixes #18318\n\n## How to Test\n\nRun the existing lint probe test:\n```bash\nnpx vitest run __tests__/scripts/raw-colors-lint.test.ts\n```\nVerify that `npm run lint` completes with zero errors and no warnings attributable to `text-medium`.\n\n## Type of change\n\n- [ ] Bug fix (non-breaking change which fixes an issue)\n- [ ] New feature (non-breaking change which adds f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18323"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18320,
          "title": "chore(lint): remove redundant text-medium color exception",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18320",
          "created_at": "2026-10-12T06:27:23Z",
          "updated_at": "2026-10-13T04:11:46Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:11:11Z",
          "closed_at": "2026-10-13T04:11:11Z",
          "head_sha": "cd42717bb93ee360d40b182c1418847529964dc7",
          "scope": "Removes the redundant text-medium raw-color lint exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt. Keep the seven legacy color exceptions and all rule severities unchanged. Application classes and rendered font sizes are unchanged. This PR is independent of the color migrations in #18004.\n\n## Issue Number\n\nCloses #18318\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689968148) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689967955).\n\n- Six existing lint/build-contract test files: **14 te"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18320"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18323,
          "title": "chore(lint): remove redundant text-medium raw-color exception",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18323",
          "created_at": "2026-10-12T07:13:59Z",
          "updated_at": "2026-10-12T07:14:15Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b685f27d1429727440897ed29de7f3c7f9fd0db9",
          "scope": "Removes the redundant text-medium raw-color exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "n `eslint.config.js`.\n- Update the rollout comment to clarify that the section now covers HeroUI semantic colors.\n- Retain all seven legacy color exceptions and adopted rule severities unchanged.\n\n## Issue Number\n\nFixes #18318\n\n## How to Test\n\nRun the existing lint probe test:\n```bash\nnpx vitest run __tests__/scripts/raw-colors-lint.test.ts\n```\nVerify that `npm run lint` completes with zero errors and no warnings attributable to `text-medium`.\n\n## Type of change\n\n- [ ] Bug fix (non-breaking change which fixes an issue)\n- [ ] New feature (non-breaking change which adds f"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18323"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18320,
          "title": "chore(lint): remove redundant text-medium color exception",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18320",
          "created_at": "2026-10-12T06:27:23Z",
          "updated_at": "2026-10-13T04:11:46Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:11:11Z",
          "closed_at": "2026-10-13T04:11:11Z",
          "head_sha": "cd42717bb93ee360d40b182c1418847529964dc7",
          "scope": "Removes the redundant text-medium raw-color lint exception.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "nt. Keep the seven legacy color exceptions and all rule severities unchanged. Application classes and rendered font sizes are unchanged. This PR is independent of the color migrations in #18004.\n\n## Issue Number\n\nCloses #18318\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689968148) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38212603031/job/114689967955).\n\n- Six existing lint/build-contract test files: **14 te"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18320"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18320; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18319,
      "title": "Use theme roles for readable backend connection feedback",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18319",
      "created_at": "2026-10-12T06:25:30Z",
      "updated_at": "2026-10-13T04:10:39Z",
      "state": "closed",
      "closed_at": "2026-10-13T04:10:39Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Uses readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " 118; total warnings 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed*"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18328,
          "title": "fix(themes): use feedback text roles and semantic danger in backend connections",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18328",
          "created_at": "2026-10-12T08:50:29Z",
          "updated_at": "2026-10-12T09:03:07Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "766e768b12935130e5d29ccb7582c4b071a3884e",
          "scope": "Uses semantic readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ts__/components/backends/api-key-entry-screen.test.tsx` and add comprehensive contract and contrast regression tests in `__tests__/components/backends/backend-connection-feedback-theme.test.tsx`.\n\n## Issue Number\n\nFixes #18319\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/backends/backend-connection-feedback-theme.test.tsx` (12 passed).\n- Run `npx vitest run __tests__/components/backends/api-key-entry-screen.test.tsx` (10 passed).\n- Run `npx vitest run __tests__/components/backends/backend-form-modal.test.tsx` (8 passed).\n- Run `npx vitest run __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18328"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Uses readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " 118; total warnings 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed*"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18328,
          "title": "fix(themes): use feedback text roles and semantic danger in backend connections",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18328",
          "created_at": "2026-10-12T08:50:29Z",
          "updated_at": "2026-10-12T09:03:07Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "766e768b12935130e5d29ccb7582c4b071a3884e",
          "scope": "Uses semantic readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ts__/components/backends/api-key-entry-screen.test.tsx` and add comprehensive contract and contrast regression tests in `__tests__/components/backends/backend-connection-feedback-theme.test.tsx`.\n\n## Issue Number\n\nFixes #18319\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/backends/backend-connection-feedback-theme.test.tsx` (12 passed).\n- Run `npx vitest run __tests__/components/backends/api-key-entry-screen.test.tsx` (10 passed).\n- Run `npx vitest run __tests__/components/backends/backend-form-modal.test.tsx` (8 passed).\n- Run `npx vitest run __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18328"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Uses readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " 118; total warnings 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed*"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18328,
          "title": "fix(themes): use feedback text roles and semantic danger in backend connections",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18328",
          "created_at": "2026-10-12T08:50:29Z",
          "updated_at": "2026-10-12T09:03:07Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "766e768b12935130e5d29ccb7582c4b071a3884e",
          "scope": "Uses semantic readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ts__/components/backends/api-key-entry-screen.test.tsx` and add comprehensive contract and contrast regression tests in `__tests__/components/backends/backend-connection-feedback-theme.test.tsx`.\n\n## Issue Number\n\nFixes #18319\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/backends/backend-connection-feedback-theme.test.tsx` (12 passed).\n- Run `npx vitest run __tests__/components/backends/api-key-entry-screen.test.tsx` (10 passed).\n- Run `npx vitest run __tests__/components/backends/backend-form-modal.test.tsx` (8 passed).\n- Run `npx vitest run __tests__/co"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18328"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18321,
          "title": "fix(themes): make backend connection feedback readable",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18321",
          "created_at": "2026-10-12T06:32:49Z",
          "updated_at": "2026-10-13T04:11:12Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T04:10:37Z",
          "closed_at": "2026-10-13T04:10:38Z",
          "head_sha": "60c81e2000a683101889ee54b20407b7d76108eb",
          "scope": "Uses readable theme roles for backend connection feedback.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " 118; total warnings 735 → 720). It changes no APIs, auth flow, connection state, copy, layout, theme definitions, focus styling, or rule severities. `text-medium` cleanup is separate in #18320.\n\n## Issue Number\n\nCloses #18319\n\nContinues #18004.\n\n## How to Test\n\nCI passed: [Ubuntu full tests, lint, app/library builds, package dry-run](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385108) and [Windows fresh install/app build](https://github.com/OpenHands/OpenHands/actions/runs/38213053169/job/114691385166).\n\n- **166 backend/theme tests passed*"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18321"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18321; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18324,
      "title": "Use readable theme focus and valid legacy scrim opacity",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18324",
      "created_at": "2026-10-12T07:44:41Z",
      "updated_at": "2026-10-12T08:52:01Z",
      "state": "open",
      "closed_at": null,
      "state_reason": "",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Uses readable backend focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ings, the MCP secret-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests pass"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18326,
          "title": "fix(themes): use readable focus role and valid scrim opacity",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18326",
          "created_at": "2026-10-12T08:21:09Z",
          "updated_at": "2026-10-12T08:21:23Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3f1b4a15ab68bdbf9f00e342db2ba534336dfaa7",
          "scope": "Uses readable focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "r.tsx`.\n- Add test coverage across all five themes for >= 3:1 focus contrast, host `--oh-focus` override persistence, backdrop scrim class correctness, and backend modal tab/toggle focus styling.\n\n## Issue Number\n\nFixes #18324\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/themes/color-themes.test.tsx\nnpx vitest run __tests__/components/features/settings/settings-navigation.test.tsx\nnpx vitest run __tests__/components/backends/backend-form-modal.test.tsx\nnpm run lint\n```\n\n## Video/Screenshots\n\n<!-- Focus outline and scrim opacity verification across themes -->\n![Focu"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18326"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18326,
          "title": "fix(themes): use readable focus role and valid scrim opacity",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18326",
          "created_at": "2026-10-12T08:21:09Z",
          "updated_at": "2026-10-12T08:21:23Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3f1b4a15ab68bdbf9f00e342db2ba534336dfaa7",
          "scope": "Uses readable focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "r.tsx`.\n- Add test coverage across all five themes for >= 3:1 focus contrast, host `--oh-focus` override persistence, backdrop scrim class correctness, and backend modal tab/toggle focus styling.\n\n## Issue Number\n\nFixes #18324\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/themes/color-themes.test.tsx\nnpx vitest run __tests__/components/features/settings/settings-navigation.test.tsx\nnpx vitest run __tests__/components/backends/backend-form-modal.test.tsx\nnpm run lint\n```\n\n## Video/Screenshots\n\n<!-- Focus outline and scrim opacity verification across themes -->\n![Focu"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18326"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Uses readable backend focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ings, the MCP secret-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests pass"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 19,
          "title": "docs: add the keyboard focus and legacy scrim film",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/enyst/enyst.github.io/pull/19",
          "created_at": "2026-10-12T08:43:53Z",
          "updated_at": "2026-10-12T08:45:23Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T08:45:23Z",
          "closed_at": "2026-10-12T08:45:23Z",
          "head_sha": "19dc0f73dcef929b3ce3f363118fc9fbed20765a",
          "scope": "Cross-repository website documentation reference; outside OpenHands/OpenHands PR scope and does not implement this issue.",
          "fix_scope": null,
          "evidence": {
            "types": [
              "github_graphql_cross_repository_reference",
              "issue_timeline_cross_reference",
              "github_graphql_CrossReferencedEvent"
            ],
            "reference_contexts": [
              " The legacy drawer is explicitly described as an exported build contract because the current app uses SettingsMobileHub.\n\nNo LLM call, account dependency, or product release. This documents the prepared batch tracked in OpenHands/OpenHands#18324.\n"
            ],
            "urls": [
              "https://github.com/enyst/enyst.github.io/pull/19",
              "https://github.com/OpenHands/OpenHands/issues/18324#ref-pullrequest-5810874134"
            ]
          },
          "direct_closer": false,
          "repository": "enyst/enyst.github.io",
          "reason": "Cross-repository website documentation reference; outside OpenHands/OpenHands PR scope and does not implement this issue."
        },
        {
          "scope": "QA/reference context only.",
          "fix_scope": null,
          "reason": "Verification-map maintenance reports or re-drives this product defect; it does not implement its product fix.",
          "evidence": {
            "types": [
              "audited_reverse_reference_exclusion"
            ],
            "reference_contexts": [
              "ing, with notes re-dated: #18302, #17955, #17135 (new symptom since #18218), #18202, #17567, #18356 (new F06 note), #18263, #18341, #18362 (new F26 row), #18233 (xfail), #18324, #17927, #17900, #17953.\n\n## Map changes\n\n- **New rows:**\n  - F04.automation-setup-tag\n  - F08.files-discovery-settings\n  - F13.acp-local-presets and F13.acp-model-discovery\n  - F16.backend-switch\n  "
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18399"
            ]
          },
          "direct_closer": false,
          "number": 18399,
          "title": "docs(verify-openhands): map maintenance 2026-10-13",
          "url": "https://github.com/OpenHands/OpenHands/pull/18399",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T14:07:35Z",
          "closed_at": "2026-10-13T14:07:35Z",
          "created_at": "2026-10-13T10:27:02Z",
          "updated_at": "2026-10-13T14:08:21Z",
          "head_sha": "48c57c57a7afba4f972e80f7dc5f87d1460d006b",
          "state_observed_at": "2026-10-14T05:19:13.780629Z"
        }
      ],
      "direct_closing_prs": [],
      "own_merged_pr_count": 0,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 1,
      "other_open_pr_count": 1,
      "open_pr_count": 2,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18326,
          "title": "fix(themes): use readable focus role and valid scrim opacity",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18326",
          "created_at": "2026-10-12T08:21:09Z",
          "updated_at": "2026-10-12T08:21:23Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "3f1b4a15ab68bdbf9f00e342db2ba534336dfaa7",
          "scope": "Uses readable focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "r.tsx`.\n- Add test coverage across all five themes for >= 3:1 focus contrast, host `--oh-focus` override persistence, backdrop scrim class correctness, and backend modal tab/toggle focus styling.\n\n## Issue Number\n\nFixes #18324\n\n## How to Test\n\n```bash\nnpx vitest run __tests__/themes/color-themes.test.tsx\nnpx vitest run __tests__/components/features/settings/settings-navigation.test.tsx\nnpx vitest run __tests__/components/backends/backend-form-modal.test.tsx\nnpm run lint\n```\n\n## Video/Screenshots\n\n<!-- Focus outline and scrim opacity verification across themes -->\n![Focu"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18326"
            ]
          },
          "direct_closer": false
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18327,
          "title": "fix(themes): use readable backend focus and valid scrim opacity",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18327",
          "created_at": "2026-10-12T08:49:25Z",
          "updated_at": "2026-10-12T08:49:44Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "b062de2cc92281b398f8e86b0a061e7a87b52bad",
          "scope": "Uses readable backend focus roles and valid legacy scrim opacity.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "ings, the MCP secret-selection outline, and the device-verification input; its stronger default applies to those neutral surfaces as well. Host overrides and all other palette roles stay intact.\n\n## Issue Number\n\nCloses #18324\n\nContinues #18004.\n\n## How to Test\n\n- TDD: the browser host override fails with raw blue outlines, then passes with the semantic role. The legacy build test fails on opaque black, then passes for both actual generated CSS branches. The palette test reproduces Solarized's 2.77:1 hover failure, then passes with the corrected role.\n- **173 tests pass"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18327"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [],
      "closed_without_merge_prs": [],
      "closure_note": null
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18329,
      "title": "Use readable theme roles for validation and service errors",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18329",
      "created_at": "2026-10-12T08:50:56Z",
      "updated_at": "2026-10-13T05:20:53Z",
      "state": "closed",
      "closed_at": "2026-10-13T05:20:53Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Uses readable semantic theme roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "l validation and service-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavio",
              "llows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solar"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18332,
          "title": "fix(themes): use readable feedback and danger roles for validation errors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18332",
          "created_at": "2026-10-12T09:34:01Z",
          "updated_at": "2026-10-12T09:34:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "48046465661e8496fa735c675ab99a507d37883a",
          "scope": "Uses readable semantic roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "editor.tsx`): replace raw red and green statuses with `text-feedback-error` and `text-feedback-success`.\n- Add test coverage in `__tests__/components/theme/validation-error-theme-roles.test.tsx`.\n\n## Issue Number\n\nFixes #18329\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/theme/validation-error-theme-roles.test.tsx` (4 passed).\n- Run `npm run typecheck` (0 errors).\n- Run `npx eslint src/components/features/` (0 errors).\n- Run `npm run build:lib`.\n\n## Video/Screenshots\n\n<!-- Validation error theme roles migration; verified via Vitest and ESLint -->\n![Valida"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18332"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Uses readable semantic theme roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "l validation and service-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavio",
              "llows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solar"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18332,
          "title": "fix(themes): use readable feedback and danger roles for validation errors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18332",
          "created_at": "2026-10-12T09:34:01Z",
          "updated_at": "2026-10-12T09:34:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "48046465661e8496fa735c675ab99a507d37883a",
          "scope": "Uses readable semantic roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "editor.tsx`): replace raw red and green statuses with `text-feedback-error` and `text-feedback-success`.\n- Add test coverage in `__tests__/components/theme/validation-error-theme-roles.test.tsx`.\n\n## Issue Number\n\nFixes #18329\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/theme/validation-error-theme-roles.test.tsx` (4 passed).\n- Run `npm run typecheck` (0 errors).\n- Run `npx eslint src/components/features/` (0 errors).\n- Run `npm run build:lib`.\n\n## Video/Screenshots\n\n<!-- Validation error theme roles migration; verified via Vitest and ESLint -->\n![Valida"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18332"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Uses readable semantic theme roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "l validation and service-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavio",
              "llows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solar"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18332,
          "title": "fix(themes): use readable feedback and danger roles for validation errors",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18332",
          "created_at": "2026-10-12T09:34:01Z",
          "updated_at": "2026-10-12T09:34:20Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "48046465661e8496fa735c675ab99a507d37883a",
          "scope": "Uses readable semantic roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "editor.tsx`): replace raw red and green statuses with `text-feedback-error` and `text-feedback-success`.\n- Add test coverage in `__tests__/components/theme/validation-error-theme-roles.test.tsx`.\n\n## Issue Number\n\nFixes #18329\n\n## How to Test\n\n- Run `npx vitest run __tests__/components/theme/validation-error-theme-roles.test.tsx` (4 passed).\n- Run `npm run typecheck` (0 errors).\n- Run `npx eslint src/components/features/` (0 errors).\n- Run `npm run build:lib`.\n\n## Video/Screenshots\n\n<!-- Validation error theme roles migration; verified via Vitest and ESLint -->\n![Valida"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18332"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18330,
          "title": "fix(themes): use readable validation and service errors",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18330",
          "created_at": "2026-10-12T09:19:50Z",
          "updated_at": "2026-10-13T05:21:26Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T05:20:52Z",
          "closed_at": "2026-10-13T05:20:52Z",
          "head_sha": "69e8fdccb9c84c7c7146e98d0a1bad9f3543fa1d",
          "scope": "Uses readable semantic theme roles for validation and service-error text.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              "l validation and service-error states still use pale raw red utilities that are hard to read in light themes. The actual missing-model guidance measures 2.89:1 in Light+ and 2.68:1 in Solarized Light.\n\n## Summary\n\nFixes #18329 and continues #18004. Replace 19 raw red utility findings across 15 consumers with the existing `feedback-error` text role and semantic danger borders. The new FF-001 spec and focused browser regression verify that the real agent-profile editor follows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavio",
              "llows its embedding host's error-color override.\n\nMessages, ARIA state, validation, save/retry behavior, and transport contracts stay unchanged. No new token or backend dependency is introduced.\n\n## Issue Number\n\nCloses #18329\n\nContinues #18004.\n\n## How to Test\n\n- 380 unit tests pass across 31 files.\n- The actual-browser host-color regression passes against the committed head.\n- `npm run lint`: 0 errors / 716 warnings (735 before this batch).\n- `npm run build` and `npm run build:lib`: pass.\n- The real local profile editor improves to 5.86:1 in Light+ and 5.61:1 in Solar"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18330"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18330; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18331,
      "title": "Make local warning feedback readable across color themes",
      "author": "enyst",
      "author_url": "https://github.com/enyst",
      "url": "https://github.com/OpenHands/OpenHands/issues/18331",
      "created_at": "2026-10-12T09:29:10Z",
      "updated_at": "2026-10-12T18:55:30Z",
      "state": "closed",
      "closed_at": "2026-10-12T18:55:30Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Adds readable theme warning text across the requested local warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ing warning. Preserve copy and behavior; keep the Apps panel tint and border on the existing `warning` token.\r\n- Add a five-theme 4.5:1 contrast contract and browser tests for host overrides.\r\n\r\n## Issue Number\r\n\r\nFixes #18331\r\n\r\n## How to Test\r\n\r\n- `npm test -- __tests__/themes/color-themes.test.tsx __tests__/components/onboarding/setup-acp-secrets-step.test.tsx __tests__/components/home/llm-not-configured-banner.test.tsx __tests__/routes/canvas-extensions.test.tsx` — 48 passed.\r\n- `npm run lint` — passed with 0 errors and 733 existing shadcn warnings.\r\n- `npm run buil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333"
            ]
          },
          "direct_closer": true
        }
      ],
      "other_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18335,
          "title": "fix(theme): make local warning feedback readable across color themes",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18335",
          "created_at": "2026-10-12T12:53:01Z",
          "updated_at": "2026-10-12T13:38:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "990053025e11bc2d430c25b91a980299896be80f",
          "scope": "Adds readable semantic warning feedback roles and migrates the requested warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Add comprehensive contrast and component regression unit tests verifying that all five built-in themes meet the 4.5:1 contrast floor on real surfaces and that host style overrides are respected.\n\n## Issue Number\n\nFixes #18331\n\n## How to Test\n\nRun the following test commands:\n- `npm test __tests__/themes/warning-feedback-theme.test.tsx`\n- `npm test __tests__/themes/color-themes.test.tsx`\n- `npm run typecheck`\n- `npm run build`\n\n## Video/Screenshots\n\n<!-- Local warning feedback theme contrast update; verified with Vitest theme suites -->\n![Theme Contrast Verification](ht"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18335"
            ]
          },
          "direct_closer": false
        }
      ],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Adds readable theme warning text across the requested local warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ing warning. Preserve copy and behavior; keep the Apps panel tint and border on the existing `warning` token.\r\n- Add a five-theme 4.5:1 contrast contract and browser tests for host overrides.\r\n\r\n## Issue Number\r\n\r\nFixes #18331\r\n\r\n## How to Test\r\n\r\n- `npm test -- __tests__/themes/color-themes.test.tsx __tests__/components/onboarding/setup-acp-secrets-step.test.tsx __tests__/components/home/llm-not-configured-banner.test.tsx __tests__/routes/canvas-extensions.test.tsx` — 48 passed.\r\n- `npm run lint` — passed with 0 errors and 733 existing shadcn warnings.\r\n- `npm run buil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18335,
          "title": "fix(theme): make local warning feedback readable across color themes",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18335",
          "created_at": "2026-10-12T12:53:01Z",
          "updated_at": "2026-10-12T13:38:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "990053025e11bc2d430c25b91a980299896be80f",
          "scope": "Adds readable semantic warning feedback roles and migrates the requested warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Add comprehensive contrast and component regression unit tests verifying that all five built-in themes meet the 4.5:1 contrast floor on real surfaces and that host style overrides are respected.\n\n## Issue Number\n\nFixes #18331\n\n## How to Test\n\nRun the following test commands:\n- `npm test __tests__/themes/warning-feedback-theme.test.tsx`\n- `npm test __tests__/themes/color-themes.test.tsx`\n- `npm run typecheck`\n- `npm run build`\n\n## Video/Screenshots\n\n<!-- Local warning feedback theme contrast update; verified with Vitest theme suites -->\n![Theme Contrast Verification](ht"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18335"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Adds readable theme warning text across the requested local warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ing warning. Preserve copy and behavior; keep the Apps panel tint and border on the existing `warning` token.\r\n- Add a five-theme 4.5:1 contrast contract and browser tests for host overrides.\r\n\r\n## Issue Number\r\n\r\nFixes #18331\r\n\r\n## How to Test\r\n\r\n- `npm test -- __tests__/themes/color-themes.test.tsx __tests__/components/onboarding/setup-acp-secrets-step.test.tsx __tests__/components/home/llm-not-configured-banner.test.tsx __tests__/routes/canvas-extensions.test.tsx` — 48 passed.\r\n- `npm run lint` — passed with 0 errors and 733 existing shadcn warnings.\r\n- `npm run buil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 1,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 1,
      "open_pr_count": 1,
      "open_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18335,
          "title": "fix(theme): make local warning feedback readable across color themes",
          "author": "lx3133584",
          "author_url": "https://github.com/lx3133584",
          "url": "https://github.com/OpenHands/OpenHands/pull/18335",
          "created_at": "2026-10-12T12:53:01Z",
          "updated_at": "2026-10-12T13:38:12Z",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "closed_at": null,
          "head_sha": "990053025e11bc2d430c25b91a980299896be80f",
          "scope": "Adds readable semantic warning feedback roles and migrates the requested warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "all_author_updated_since_start_reverse_reference"
            ],
            "reference_contexts": [
              " Add comprehensive contrast and component regression unit tests verifying that all five built-in themes meet the 4.5:1 contrast floor on real surfaces and that host style overrides are respected.\n\n## Issue Number\n\nFixes #18331\n\n## How to Test\n\nRun the following test commands:\n- `npm test __tests__/themes/warning-feedback-theme.test.tsx`\n- `npm test __tests__/themes/color-themes.test.tsx`\n- `npm run typecheck`\n- `npm run build`\n\n## Video/Screenshots\n\n<!-- Local warning feedback theme contrast update; verified with Vitest theme suites -->\n![Theme Contrast Verification](ht"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18335"
            ]
          },
          "direct_closer": false
        }
      ],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18333,
          "title": "fix(themes): make warning feedback theme-aware",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18333",
          "created_at": "2026-10-12T10:36:44Z",
          "updated_at": "2026-10-12T19:34:05Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T18:55:29Z",
          "closed_at": "2026-10-12T18:55:29Z",
          "head_sha": "864dd26bfb5a2668c3a2fc1d4561923c274789ff",
          "scope": "Adds readable theme warning text across the requested local warning paths.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_start_reverse_reference",
              "github_direct_closed_event",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ing warning. Preserve copy and behavior; keep the Apps panel tint and border on the existing `warning` token.\r\n- Add a five-theme 4.5:1 contrast contract and browser tests for host overrides.\r\n\r\n## Issue Number\r\n\r\nFixes #18331\r\n\r\n## How to Test\r\n\r\n- `npm test -- __tests__/themes/color-themes.test.tsx __tests__/components/onboarding/setup-acp-secrets-step.test.tsx __tests__/components/home/llm-not-configured-banner.test.tsx __tests__/routes/canvas-extensions.test.tsx` — 48 passed.\r\n- `npm run lint` — passed with 0 errors and 733 existing shadcn warnings.\r\n- `npm run buil"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18333"
            ]
          },
          "direct_closer": true
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18333; closure alone does not verify every requirement."
    },
    {
      "state_observed_at": "2026-10-14T05:19:13.780629Z",
      "reconciliation_note": null,
      "status_drift_note": null,
      "number": 18347,
      "title": "Strengthen verify-openhands: repeatable baseline/fix proof and executable known failures",
      "author": "smolpaws",
      "author_url": "https://github.com/smolpaws",
      "url": "https://github.com/OpenHands/OpenHands/issues/18347",
      "created_at": "2026-10-12T19:26:41Z",
      "updated_at": "2026-10-12T22:17:21Z",
      "state": "closed",
      "closed_at": "2026-10-12T22:17:21Z",
      "state_reason": "completed",
      "has_own_pr": true,
      "own_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Implements executable known-bug assertions, expected-failure classifications and repeatable two-baseline/two-fix verification proof in verify-openhands; GitHub records this merged PR as the direct closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event",
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "is `not-fixed`. Everything else is `inconclusive`. SKILL.md, maintenance.md, daily.md, mapping.md, report.md and `--help` all describe the same rules. F25's #18233 note is the worked example.\r\n\r\n## Issue Number\r\n\r\nFixes #18347\r\n\r\n## How to Test\r\n\r\nLive proof, with this branch's CLI against two isolated stacks: main `f07aebdf5` and fix PR #18238 `77de0ad24`, both on Agent Server 1.54.0 and automation 1.19.3, desktop viewport. Evidence and a README are in [`.pr/known-bug-proof/`](https://github.com/OpenHands/OpenHands/tree/c84db9461b740805d5b857815f10539aa51b5ccb/.pr/know"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18355,
          "title": "feat(verify-openhands): adopt the shared known-bug contract",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18355",
          "created_at": "2026-10-12T23:00:53Z",
          "updated_at": "2026-10-13T21:32:19Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T21:32:17Z",
          "closed_at": "2026-10-13T21:32:17Z",
          "head_sha": "bf4e202df15e501ab8481d1e6f76afdf266eb15c",
          "scope": "Follow-up implementation of the known-bug verification contract: symptom predicates, first-failure preservation and multiline marked commands. Explicitly references #18347 and follows #18348.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ed over `\\` lines counts as one, from its first line (where bash reports the failure) to the `# bug` line.\n- `references/mapping.md` gains \"The known-bug contract\", adapted to `control-openhands`.\n\n## Issue Number\n\nRefs #18347 (follow-up to #18348)\n\n## How to Test\n\n`npx vitest run .agents/skills/verify-openhands` (61 pass, including real `bug run` attempts through bash for predicates, continued lines and an EXIT-trap cleanup). `control-openhands map check` and `bug list` are clean on the shipped map. Before/after runs of the same recipes on main and on this branch are i"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18355"
            ]
          },
          "direct_closer": false
        }
      ],
      "other_prs": [],
      "proposed_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Implements executable known-bug assertions, expected-failure classifications and repeatable two-baseline/two-fix verification proof in verify-openhands; GitHub records this merged PR as the direct closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event",
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "is `not-fixed`. Everything else is `inconclusive`. SKILL.md, maintenance.md, daily.md, mapping.md, report.md and `--help` all describe the same rules. F25's #18233 note is the worked example.\r\n\r\n## Issue Number\r\n\r\nFixes #18347\r\n\r\n## How to Test\r\n\r\nLive proof, with this branch's CLI against two isolated stacks: main `f07aebdf5` and fix PR #18238 `77de0ad24`, both on Agent Server 1.54.0 and automation 1.19.3, desktop viewport. Evidence and a README are in [`.pr/known-bug-proof/`](https://github.com/OpenHands/OpenHands/tree/c84db9461b740805d5b857815f10539aa51b5ccb/.pr/know"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18355,
          "title": "feat(verify-openhands): adopt the shared known-bug contract",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18355",
          "created_at": "2026-10-12T23:00:53Z",
          "updated_at": "2026-10-13T21:32:19Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T21:32:17Z",
          "closed_at": "2026-10-13T21:32:17Z",
          "head_sha": "bf4e202df15e501ab8481d1e6f76afdf266eb15c",
          "scope": "Follow-up implementation of the known-bug verification contract: symptom predicates, first-failure preservation and multiline marked commands. Explicitly references #18347 and follows #18348.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ed over `\\` lines counts as one, from its first line (where bash reports the failure) to the `# bug` line.\n- `references/mapping.md` gains \"The known-bug contract\", adapted to `control-openhands`.\n\n## Issue Number\n\nRefs #18347 (follow-up to #18348)\n\n## How to Test\n\n`npx vitest run .agents/skills/verify-openhands` (61 pass, including real `bug run` attempts through bash for predicates, continued lines and an EXIT-trap cleanup). `control-openhands map check` and `bug list` are clean on the shipped map. Before/after runs of the same recipes on main and on this branch are i"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18355"
            ]
          },
          "direct_closer": false
        }
      ],
      "excluded_references": [],
      "direct_closing_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Implements executable known-bug assertions, expected-failure classifications and repeatable two-baseline/two-fix verification proof in verify-openhands; GitHub records this merged PR as the direct closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event",
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "is `not-fixed`. Everything else is `inconclusive`. SKILL.md, maintenance.md, daily.md, mapping.md, report.md and `--help` all describe the same rules. F25's #18233 note is the worked example.\r\n\r\n## Issue Number\r\n\r\nFixes #18347\r\n\r\n## How to Test\r\n\r\nLive proof, with this branch's CLI against two isolated stacks: main `f07aebdf5` and fix PR #18238 `77de0ad24`, both on Agent Server 1.54.0 and automation 1.19.3, desktop viewport. Evidence and a README are in [`.pr/known-bug-proof/`](https://github.com/OpenHands/OpenHands/tree/c84db9461b740805d5b857815f10539aa51b5ccb/.pr/know"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": true
        }
      ],
      "own_merged_pr_count": 2,
      "own_closed_without_merge_pr_count": 0,
      "own_open_pr_count": 0,
      "other_open_pr_count": 0,
      "open_pr_count": 0,
      "open_prs": [],
      "merged_prs": [
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18348,
          "title": "feat(verify-openhands): executable known bugs and a repeatable fix proof",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18348",
          "created_at": "2026-10-12T20:22:24Z",
          "updated_at": "2026-10-12T22:17:22Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-12T22:17:19Z",
          "closed_at": "2026-10-12T22:17:19Z",
          "head_sha": "5de926b7e4325c7a7f14d7904b5ad023ac6bb0dd",
          "scope": "Implements executable known-bug assertions, expected-failure classifications and repeatable two-baseline/two-fix verification proof in verify-openhands; GitHub records this merged PR as the direct closer.",
          "fix_scope": "issue_fix",
          "evidence": {
            "types": [
              "github_direct_closed_event",
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "is `not-fixed`. Everything else is `inconclusive`. SKILL.md, maintenance.md, daily.md, mapping.md, report.md and `--help` all describe the same rules. F25's #18233 note is the worked example.\r\n\r\n## Issue Number\r\n\r\nFixes #18347\r\n\r\n## How to Test\r\n\r\nLive proof, with this branch's CLI against two isolated stacks: main `f07aebdf5` and fix PR #18238 `77de0ad24`, both on Agent Server 1.54.0 and automation 1.19.3, desktop viewport. Evidence and a README are in [`.pr/known-bug-proof/`](https://github.com/OpenHands/OpenHands/tree/c84db9461b740805d5b857815f10539aa51b5ccb/.pr/know"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18348"
            ]
          },
          "direct_closer": true
        },
        {
          "state_observed_at": "2026-10-14T05:19:13.780629Z",
          "number": 18355,
          "title": "feat(verify-openhands): adopt the shared known-bug contract",
          "author": "enyst",
          "author_url": "https://github.com/enyst",
          "url": "https://github.com/OpenHands/OpenHands/pull/18355",
          "created_at": "2026-10-12T23:00:53Z",
          "updated_at": "2026-10-13T21:32:19Z",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-13T21:32:17Z",
          "closed_at": "2026-10-13T21:32:17Z",
          "head_sha": "bf4e202df15e501ab8481d1e6f76afdf266eb15c",
          "scope": "Follow-up implementation of the known-bug verification contract: symptom predicates, first-failure preservation and multiline marked commands. Explicitly references #18347 and follows #18348.",
          "fix_scope": "partial",
          "evidence": {
            "types": [
              "own_author_repository_wide_reverse_reference",
              "all_author_updated_since_previous_observation_reverse_reference"
            ],
            "reference_contexts": [
              "ed over `\\` lines counts as one, from its first line (where bash reports the failure) to the `# bug` line.\n- `references/mapping.md` gains \"The known-bug contract\", adapted to `control-openhands`.\n\n## Issue Number\n\nRefs #18347 (follow-up to #18348)\n\n## How to Test\n\n`npx vitest run .agents/skills/verify-openhands` (61 pass, including real `bug run` attempts through bash for predicates, continued lines and an EXIT-trap cleanup). `control-openhands map check` and `bug list` are clean on the shipped map. Before/after runs of the same recipes on main and on this branch are i"
            ],
            "urls": [
              "https://github.com/OpenHands/OpenHands/pull/18355"
            ]
          },
          "direct_closer": false
        }
      ],
      "closed_without_merge_prs": [],
      "closure_note": "GitHub’s latest issue-closing event names #18348; closure alone does not verify every requirement."
    }
  ]
}
