{
  "repository": "OpenHands/OpenHands",
  "window": {
    "start": "2026-10-04T05:29:22Z",
    "end": "2026-10-11T05:29:22Z"
  },
  "scope": "Issues posted (created) by enyst or smolpaws in this exact seven-day window; issue and PR states observed in the refresh.",
  "observed_at": "2026-10-11T05:34:25.748262+00:00",
  "metadata_fetch_started_at": "2026-10-11T05:31:11Z",
  "metadata_fetch_finished_at": "2026-10-11T05:32:54Z",
  "audit_completed_at": "2026-10-11T05:37:22.580378+00:00",
  "counts": {
    "issue_count": 106,
    "issue_authors": {
      "enyst": 99,
      "smolpaws": 7
    },
    "closed_by_merged_pr": 75,
    "closed_pr_author_groups": {
      "enyst_smolpaws": 61,
      "other_authors": 14
    },
    "closed_pr_authors": {
      "enyst": 60,
      "smolpaws": 1,
      "fengyue-xve": 5,
      "lx3133584": 2,
      "qingshungLI": 1,
      "pei711": 2,
      "awss1i": 2,
      "errmakov": 1,
      "GoldArowana": 1
    },
    "closed_with_full_issue_fix_scope": 74,
    "closed_with_partial_scope": 1,
    "closed_other": 0,
    "open": 31,
    "open_with_prs": 24,
    "open_without_prs": 7,
    "open_pr_matches": 34,
    "distinct_open_prs": 33,
    "open_draft_pr_matches": 9,
    "distinct_open_draft_prs": 9
  },
  "records": [
    {
      "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-11T04:51:52Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-11T05:18:45Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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 `5328e3fca0605b"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:54:47Z",
          "updated_at": "2026-10-11T04:55:12Z",
          "head_sha": "335134efef02cd2aa65a9ee364b8fb7d892deede",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T04:54:49Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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-l"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T05:00:06Z",
          "updated_at": "2026-10-11T05:00:31Z",
          "head_sha": "469bf2a588e372ed00546af3673c47bd680991ea",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T05:00:08Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "s, 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:41:01Z",
          "updated_at": "2026-10-11T04:41:31Z",
          "head_sha": "0dfa490441b0762e143486cf29dfe5d2e2a7758f",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T04:41:03Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "CP-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 is"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T11:04:20Z",
          "updated_at": "2026-10-10T11:04:20Z",
          "head_sha": "0783329540814297db5d502fe01f2857c7eeef51",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-10T11:04:22Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ctions 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 s"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:29:43Z",
          "updated_at": "2026-10-10T10:29:45Z",
          "head_sha": "2351e55f00b72099f9caaff00d974ffea645c76b",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-10T10:29:46Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 |"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-09T08:51:39Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T09:58:05Z",
          "head_sha": "1bd3e883742da0ebd2a78ae653233cad18684c69",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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 li",
              "erifying 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/Screensh"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-09T08:51:03Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T13:08:22Z",
          "head_sha": "f5e73ecdd5730241dd02713dc2793d58c400fed6",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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",
              "e 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 c"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-09T03:15:42Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-11T00:28:48Z",
          "head_sha": "251a19b9fd8d01d29abda1b92b9092b6b0a3f053",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ith project maintenance. This PR follows #17889 and makes onboarding's LLM step profile-first, as proposed in #18214.\n\n**This PR is stacked on #17889.** The branch merges #17889's head (`7a589aa3`) into `main`. Until #17889 lands, the diff also shows its two commits. After it lands, only this PR's changes remain.\n\n## Why\n\nOn",
              "ds 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`: 331 passed.\n  - The 6 new tests fail",
              "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:**"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-09T01:41:17Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T05:52:51Z",
          "head_sha": "2e8f8486857cc0b496016164c79bef8198d81449",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "anifest 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`",
              "utomations.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"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T01:50:29Z",
          "head_sha": "dc37715f9efccd20f7148892dc6bede11af1a29f",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "tomations` 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 he",
              "ther 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 health"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:36:48Z",
          "updated_at": "2026-10-11T02:37:20Z",
          "head_sha": "32d5f442ed3e1e007fa76482bf125ca1c71609b3",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T02:36:50Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "` 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",
              "al.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 Hoo"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T11:13:46Z",
          "head_sha": "5381474ac29b3756ffceb1175afa736d295e5831",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "nager.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/Screen"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T00:20:31Z",
          "head_sha": "e1672d1b192e431bdae7593ec6464d3424de6661",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "e 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 t"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-10T22:19:35Z",
          "head_sha": "b433dad4cf095ff216d4057cee053696c0d316be",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "orked 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 `fa",
              "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-ena"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T01:11:30Z",
          "head_sha": "f07f39016ab9b448937bf4583bda1f9a27078041",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "viewed 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 charact",
              "t, 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"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T04:44:29Z",
          "head_sha": "8c0d9eeb43172b2eb565e2d891b18808af249532",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ation-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) wh",
              "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=\"co"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T23:34:03Z",
          "head_sha": "071a17548ceda42f6bfcb22c0640089edcfb78cd",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ts 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"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T12:48:59Z",
          "updated_at": "2026-10-09T12:48:59Z",
          "head_sha": "302014f543f3ddd4987123954ebaa11d2305c540",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T12:49:01Z",
            "closing_actor": "neubig",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ible.\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 neutra"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T00:05:15Z",
          "updated_at": "2026-10-11T00:05:42Z",
          "head_sha": "d84357bfa57384f6a39834f4f8d55e940f8969fe",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T00:05:17Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 i"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:19:34Z",
          "updated_at": "2026-10-10T10:20:03Z",
          "head_sha": "877df6ea3f491fd475c28956175cac53e85d08be",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-10T10:19:36Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "nt. 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 a"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:21:20Z",
          "updated_at": "2026-10-10T10:21:46Z",
          "head_sha": "79281049862c3f2140d566ff5ff48fa90f8548b3",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-10T10:21:22Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 cha",
              "Error` 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 im"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-10T10:25:29Z",
          "updated_at": "2026-10-10T10:26:10Z",
          "head_sha": "60e95f3b6a427a050022fb3f27294f495e526614",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-10T10:25:31Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ck 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 hos",
              "s 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---"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T19:43:49Z",
          "updated_at": "2026-10-09T19:43:52Z",
          "head_sha": "2741623fb9f5075747e09e1de8608717ba5b6cae",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T19:43:51Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "t 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 mirr",
              "come_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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:44:04Z",
          "updated_at": "2026-10-09T00:44:05Z",
          "head_sha": "068f4e4861e6a5c294328b7c29c56e915ae15f10",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T00:44:06Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "er.\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 retur"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-08T13:51:11Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T14:50:45Z",
          "head_sha": "f500de4b326cef594d88f47be9db090402c2347e",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "robe 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## Vide"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-09T01:17:16Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T14:37:39Z",
          "head_sha": "c485c41b4296491870b9c4c9fd6ef387afbf9615",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "sx` 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."
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-07T10:56:34Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T10:08:41Z",
          "head_sha": "07f0bfbe0fe09767e4aba683e2eb4e43ebe3b1f1",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "-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=\"http"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T01:05:48Z",
          "updated_at": "2026-10-08T20:37:36Z",
          "head_sha": "83ce48f46d6873b9f55ada30d58cf75b18c7dc05",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-07T01:05:49Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "licks 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/feature"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:25:22Z",
          "updated_at": "2026-10-09T04:25:25Z",
          "head_sha": "23af836b68a80f78a9c5905241f027e8b31fd9b0",
          "scope": "Partial verification-tracker continuation. The PR explicitly says it does not complete the tracker, despite GitHub recording it as the closing PR.",
          "fix_scope": "partial",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T04:25:24Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "e. 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.",
              "; 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 ev",
              "lose 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 produ"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "Closed by merged PR #18183 according to GitHub. This is a partial verification tracker, not evidence that every original acceptance item was completed: the PR says “This partial continuation does not close #18092” and retains unchecked items.",
      "fix_scope": "partial"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T02:24:41Z",
          "updated_at": "2026-10-08T20:37:32Z",
          "head_sha": "a55a4167adc16b8c760d46c3c14e61dfe035a72f",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-07T02:24:43Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ow 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:11:58Z",
          "updated_at": "2026-10-09T04:11:58Z",
          "head_sha": "1fa19ab6ef64678aefe2ebc41cabcc23d46b59cb",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T04:12:00Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "hanged.\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 serve"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T00:30:29Z",
          "updated_at": "2026-10-09T00:30:29Z",
          "head_sha": "4e0cf98e8d1c476fcfcc64e04f4da19fbb065938",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T00:30:31Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-09T04:17:51Z",
          "updated_at": "2026-10-09T04:17:51Z",
          "head_sha": "5b31712ec5426173ab42b4680f62ec9add538689",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-09T04:17:53Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "enders 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``"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T00:14:48Z",
          "updated_at": "2026-10-08T20:37:39Z",
          "head_sha": "241bdca83ca4e1940d56d3ac0c0f1c5c864abce2",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-07T00:14:50Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 catal",
              "f 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-"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T14:22:30Z",
          "updated_at": "2026-10-08T20:37:15Z",
          "head_sha": "c8ae0448a22fffcc147c2c007e0b2bfdfeb8f46b",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-07T14:22:33Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ck) 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 a",
              "t 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:"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T03:13:50Z",
          "updated_at": "2026-10-08T20:37:08Z",
          "head_sha": "88478392ff3182332f7b17b7a7e19bb16aa877c3",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-08T03:13:52Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 c",
              "y 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-07T11:28:15Z",
          "updated_at": "2026-10-08T20:37:26Z",
          "head_sha": "2a418630d74d31f6732c878a043166b815453910",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-07T11:28:17Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "erts.\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 runne",
              "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 fi"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-09T00:04:02Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T14:13:05Z",
          "head_sha": "54b325b47ee4dc97d36f3dd9fb424c945bc0f4c4",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ight 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 nar",
              "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/"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-07T08:21:18Z",
          "head_sha": "f8890f07e433bbd55e702c73d2f0941f76484bf6",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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 profil"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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-09T00:14:10Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-10T21:14:38Z",
          "head_sha": "d088ddec5a81284a5b05544f77d97c1d47c6b1ba",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "eted 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"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T18:00:39Z",
          "head_sha": "9a831278b5fd79bfdd7646db33bb81f824beadc8",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ne 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 automat",
              "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` o"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:47:01Z",
          "updated_at": "2026-10-11T03:47:31Z",
          "head_sha": "8e559c2c4c41ee8b65ee0ee868703199e3d6d184",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T03:47:03Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "fault 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 l"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:44:09Z",
          "updated_at": "2026-10-11T03:44:40Z",
          "head_sha": "f5ddec1cd40ea58a12c51b94d1bad8beb9d27d41",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T03:44:10Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "peared 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- Es",
              "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, an"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T21:53:28Z",
          "updated_at": "2026-10-08T20:37:44Z",
          "head_sha": "b099a88c5adc8700467e25036d0196693bc68888",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T21:53:30Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "n `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_"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:53:32Z",
          "updated_at": "2026-10-08T20:38:21Z",
          "head_sha": "1d94b9d0a398d1e1e8bb2786785bbc0ecf010dbd",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T04:53:33Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ollout 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 s"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-08T23:35:03Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-11T05:18:45Z",
          "head_sha": "7bc8d5e9552b5872cb2e9c7b582a4fc05343fe80",
          "scope": "Partial palette migration: updates MCP save-as-secret selection; the broader migration remains open.",
          "fix_scope": "partial",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "d 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"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:34:46Z",
          "updated_at": "2026-10-06T00:58:29Z",
          "head_sha": "a1a7d285d96796248ea611177f414571ad70f97c",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T21:34:47Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "rmed 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/resour"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T15:45:27Z",
          "updated_at": "2026-10-06T00:58:47Z",
          "head_sha": "e6211eb5a4f26bb17b01f86dbd99496792793c15",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T15:45:28Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ted 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} --e"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T13:11:18Z",
          "updated_at": "2026-10-06T00:58:59Z",
          "head_sha": "9f32863ec46d595b9e0ecaa82b0820ce0578842e",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T13:11:21Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 vi"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T18:20:15Z",
          "updated_at": "2026-10-06T00:58:38Z",
          "head_sha": "ee92f98474c54581508435c4eb0022d788434ad8",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T18:20:17Z",
            "closing_actor": "simonrosenberg",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "d 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 typeche"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-08T23:17:27Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T12:55:10Z",
          "head_sha": "3441b93aa8ebf47da89b9d11716e1d9a670a8230",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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 __"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:07:52Z",
          "updated_at": "2026-10-11T04:08:19Z",
          "head_sha": "07b762b6e9b74efaaadb04ebc544e4e3cf31088f",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T04:07:54Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "y 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`"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:02:41Z",
          "updated_at": "2026-10-11T04:03:06Z",
          "head_sha": "78a77d4e6629f4e0dc933027cbae7eca48d9d09e",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T04:02:42Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 lin"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:27:45Z",
          "updated_at": "2026-10-08T20:38:31Z",
          "head_sha": "331f5cfd111d254a8dda49b94d4581b887e01e61",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T04:27:47Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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-",
              "rd'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__/comp",
              "**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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-09T00:06:24Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-05T08:51:56Z",
          "head_sha": "feffce0c4a4a6e3950b9550ea66f5b770e09eb72",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "g 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"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:36:08Z",
          "updated_at": "2026-10-08T20:37:50Z",
          "head_sha": "aef86100e610ae65ebed997fec573e3ca8422d13",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T20:36:10Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-09T01:12:38Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:26:59Z",
          "updated_at": "2026-10-08T20:37:57Z",
          "head_sha": "9308a4def1e266d96100b10ea2e6a563abdb8524",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T20:27:00Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "epository` / `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."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:42Z",
          "updated_at": "2026-10-08T20:38:51Z",
          "head_sha": "5ffa474465546f5d258ce670edb5df3939d15f78",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:16:44Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "Modal` 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:29:34Z",
          "updated_at": "2026-10-08T20:37:55Z",
          "head_sha": "849252a419b38100916aa3471fc1c6a8f00bf624",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T20:29:35Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "UTOMATIONS$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."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-05T02:07:01Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T12:53:44Z",
          "head_sha": "ccd2b2f5249cc993b2ba2a920c31642b8b66b914",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "-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-auto"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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-10T23:24:08Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-10T05:54:53Z",
          "head_sha": "324a1127200111b4fd372cd55e9d09c8ccf3b93c",
          "scope": "Partial fix: addresses item 1 (cleared Time of day silently losing the schedule edit); the other three items remain untouched.",
          "fix_scope": "partial",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "and toasted \"Automation updated\", so nothing told the user the schedule edit was lost.\n\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\").\n\n## Summary\n\n- `handleS",
              "ery (re-enter a time → the retry PATCHes the rebuilt schedule).\n\n## Issue Number\n\nAddresses the first item of #17948 (the issue's other three items are untouched by this PR).\n\n## How to Test\n\n1. `npm run dev:mock`, open an automation's detail page, then **Automation actions → Edit**.\n2. Clear **Time of day** and click **Save",
              "[ ] Docs / chore\n\n## Notes\n\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.\n- Copy choice: the error reuses the exi"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:02:17Z",
          "updated_at": "2026-10-08T20:39:00Z",
          "head_sha": "8e82c5d6e42932cf31bc335484ed22b31ca6c80c",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:02:18Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ils 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."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-06T22:12:26Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:43:14Z",
          "updated_at": "2026-10-08T20:38:23Z",
          "head_sha": "874cb87c7b056782c711e3eb77a17c0ddec97ee3",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T04:43:16Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "out 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-convers"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:59:27Z",
          "updated_at": "2026-10-08T20:39:07Z",
          "head_sha": "0c1c3b7f59e1d1ac16f6e40df0fe5a52475d894d",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T00:59:29Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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",
              "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-p"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:14:18Z",
          "updated_at": "2026-10-08T20:38:18Z",
          "head_sha": "25a784f9369a33cd97fd3740c5afc0b75cd790df",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T05:14:20Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "it 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-co"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-09T01:28:26Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T01:41:37Z",
          "head_sha": "8a13bda59017f0bf8bd1c4509e2191336e65de3a",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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/LittleMIK",
              "ion; 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.tes"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:29:57Z",
          "updated_at": "2026-10-08T20:38:28Z",
          "head_sha": "f55e2f9d4333e93e73137b82429f5965d135394b",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T04:29:59Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ontent. 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."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:23:07Z",
          "updated_at": "2026-10-08T20:38:11Z",
          "head_sha": "cde254eb4cc87f0b89faf7706e922224cce68e5a",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T05:23:09Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 d",
              "e 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__/i1"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T03:01:46Z",
          "updated_at": "2026-10-11T03:02:26Z",
          "head_sha": "cd9b0044458b8164c5ba038d3e3d0e37bf27cd37",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T03:01:48Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "abled 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 > A"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:27Z",
          "updated_at": "2026-10-08T20:39:03Z",
          "head_sha": "72ee3e483084dd368d04c26179a6dae08a7b0f76",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:01:29Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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__"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-08T10:57:34Z",
          "updated_at": "2026-10-08T20:37:02Z",
          "head_sha": "abcc5717c574e5ac961d571b5b28201594d2cd3a",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-08T10:57:36Z",
            "closing_actor": "neubig",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ting 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 vi"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:17:12Z",
          "updated_at": "2026-10-08T20:38:16Z",
          "head_sha": "682a6830b738fd70d6858c47d77c26aad295ae7b",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T05:17:14Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "nd 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/feature"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:56:13Z",
          "updated_at": "2026-10-08T20:39:10Z",
          "head_sha": "58b3930d580807c7e801ad9cef774f50e5a1d23e",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T00:56:15Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 esl",
              "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 chos"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T04:31:34Z",
          "updated_at": "2026-10-08T20:38:26Z",
          "head_sha": "8cf4cb5d7c7c052263e1a28b131463895a2f8086",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T04:31:36Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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  __"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-10T08:42:28Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:01:21Z",
          "updated_at": "2026-10-08T20:39:05Z",
          "head_sha": "63d5e970dfbce639a525602d7fa370104c44a42e",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:01:22Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "xt 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__/i"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:19:11Z",
          "updated_at": "2026-10-08T20:38:14Z",
          "head_sha": "cb6fe2905138af7aa2218101db895c285ad4cb85",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T05:19:12Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 --chec"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:08Z",
          "updated_at": "2026-10-06T00:57:59Z",
          "head_sha": "96244c06dceea5af44a5c15636058156b2934404",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T00:00:10Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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,"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-06T05:08:19Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T11:47:12Z",
          "head_sha": "e4d8dffddbeebd44c50ace113765a983af1b9711",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "x` 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``"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-07T16:28:29Z",
          "head_sha": "8032aa21bcb0418a8be7eb3b7c6af9330a147aba",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "ts 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-open",
              "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 cont"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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-09T01:02:53Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T23:39:29Z",
          "head_sha": "317e6e12b1a5172b343c195e059166c21e33a0ec",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "eeps 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.t"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-05T08:11:27Z",
          "head_sha": "3226edb27dc052c133697c17eeb6cc2c29fdafa4",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T04:23:36Z",
          "updated_at": "2026-10-11T04:24:02Z",
          "head_sha": "9b2ebe2e962f5aa35e89952dd98abc4a9e9c2eaf",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T04:23:38Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "rsations 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 un",
              "ng, 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:07Z",
          "updated_at": "2026-10-06T00:58:04Z",
          "head_sha": "fecbbb18e24df4b238e2e2bec4b9b3ce0d5bc138",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:55:08Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "h 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-inpu"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T20:32:41Z",
          "updated_at": "2026-10-08T20:37:52Z",
          "head_sha": "9f1fb381f2b16672e762c78974656f49e1779824",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T20:32:43Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "d 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.tes"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:00:14Z",
          "updated_at": "2026-10-06T00:57:57Z",
          "head_sha": "2ed80f32de0673aa0f62f7bb419a8a432c1f911c",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T00:00:16Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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.t"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-08T22:58:58Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T05:26:15Z",
          "updated_at": "2026-10-08T20:38:08Z",
          "head_sha": "8b9ffd52b9b9a5b6fbcb29252d92f102f49a6960",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T05:26:17Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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",
              "e 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."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-05T01:19:03Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T17:32:35Z",
          "head_sha": "545da063406da7e90a41a360149f7f31430b9f93",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "hen 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 Proces",
              "n `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__/co"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": false,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-09T10:01:25Z",
          "head_sha": "e501b48c5bb489c624e52798f91dcc78d74f805b",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "jected\" 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-"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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-09T02:00:25Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:54:16Z",
          "updated_at": "2026-10-06T00:58:06Z",
          "head_sha": "d59aaad10760850037eef18f0baf61101e081481",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:54:18Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 fon",
              "hands 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:26:53Z",
          "updated_at": "2026-10-06T05:45:34Z",
          "head_sha": "607d81faa6ea78788923b414824139f3737956e6",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:26:55Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "n'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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-11T02:42:59Z",
          "updated_at": "2026-10-11T02:43:31Z",
          "head_sha": "2cf8cbd891cd9f7939ffbaa462f7e5a804dfa6e0",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-11T02:43:01Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "uite 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/confi"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T00:05:54Z",
          "updated_at": "2026-10-06T00:57:55Z",
          "head_sha": "33a4ed5a09073167a955dccf4048fcb358cff602",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T00:05:56Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "`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__"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:16:32Z",
          "updated_at": "2026-10-08T20:38:53Z",
          "head_sha": "c373b0d18400644f12c10b2bb9474e6d9cd5199d",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:16:34Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "n 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T12:36:16Z",
          "updated_at": "2026-10-06T00:59:01Z",
          "head_sha": "1a84d363fad75bf1692831054525bf6108ece414",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T12:36:17Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "c 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 error"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:02:25Z",
          "updated_at": "2026-10-06T00:58:13Z",
          "head_sha": "06e18e2276a745b781ccdc73fe1619ad8d5be503",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:02:27Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "de 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",
              "anguageChanged` 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__/comp"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:15:41Z",
          "updated_at": "2026-10-08T20:38:55Z",
          "head_sha": "f017c040916afcd356477ab45ee926b608b917ea",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:15:42Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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-"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:55:54Z",
          "updated_at": "2026-10-06T00:58:01Z",
          "head_sha": "941ee1ec81bb36f47d38867bd8791cea8b93af84",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:55:56Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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 con"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:43:31Z",
          "updated_at": "2026-10-08T20:38:36Z",
          "head_sha": "d817df59fdb47675c165572398dcf11955f7d249",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T02:43:33Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ith 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__/c"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T23:50:57Z",
          "updated_at": "2026-10-06T00:58:08Z",
          "head_sha": "594191ae36d32a1bdb91afcc38745d9cbc4d451b",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T23:50:58Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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/",
              "ormed 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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:13:33Z",
          "updated_at": "2026-10-08T20:38:58Z",
          "head_sha": "f9c9667e6b3bf10e62361615f43b079048723b18",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:13:35Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "T_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`."
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-05T21:36:04Z",
          "updated_at": "2026-10-06T00:58:27Z",
          "head_sha": "27486956582f4a3d2743dd1b37d6b3f5728bbe66",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-05T21:36:06Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ps `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/con"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T03:35:36Z",
          "updated_at": "2026-10-08T20:38:33Z",
          "head_sha": "ca64942aa4900c7fddc67c2f0dc00dfd3556ac64",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T03:35:38Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ument` 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-inp"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T01:21:24Z",
          "updated_at": "2026-10-08T20:38:45Z",
          "head_sha": "fac966c31391e129221fabff95e7f53400e12f33",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T01:21:25Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "wright 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-inp",
              "wn 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 A"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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-08T23:29:13Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-08T12:42:06Z",
          "head_sha": "f160a34f47742198db31cb9a059c89fca370fd4c",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "- 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-switc"
            ]
          }
        },
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-06T01:06:36Z",
          "head_sha": "cb43883c4a0aec10958ae37c3847ffbc5cbb4357",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "abel 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-se"
            ]
          }
        }
      ],
      "open_pr_count": 2,
      "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-04T23:38:20Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [],
      "open_pr_count": 0,
      "note": "No corresponding open implementation PR identified in the repository-wide open-PR and linked-reference audit."
    },
    {
      "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-04T23:28:03Z",
      "state": "open",
      "closed_at": null,
      "classification": "open",
      "merged_prs": [],
      "open_prs": [
        {
          "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",
          "state": "open",
          "draft": true,
          "merged": false,
          "merged_at": null,
          "updated_at": "2026-10-06T01:06:35Z",
          "head_sha": "0cf65d442003f7ecd52971d266903bc746f99130",
          "scope": "Proposed issue fix",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "implementation_reference_in_pr_title_or_body",
            "reference_contexts": [
              "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, p"
            ]
          }
        }
      ],
      "open_pr_count": 1,
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:02Z",
          "updated_at": "2026-10-08T20:38:40Z",
          "head_sha": "4e1466ee16e14ce2578c13fa8a25ec81a201ca2c",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T02:13:03Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "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"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    },
    {
      "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",
      "classification": "closed_merged_pr",
      "merged_prs": [
        {
          "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",
          "state": "closed",
          "draft": false,
          "merged": true,
          "merged_at": "2026-10-06T02:13:23Z",
          "updated_at": "2026-10-08T20:38:38Z",
          "head_sha": "8d7a39b4c8006d24d878ee8d1cda98f893f843ea",
          "scope": "Closing implementation PR",
          "fix_scope": "issue_fix",
          "evidence": {
            "type": "github_graphql_closed_event_closer",
            "closed_event_at": "2026-10-06T02:13:24Z",
            "closing_actor": "enyst",
            "closer_type": "PullRequest",
            "direct_closing_pr": true,
            "reference_contexts": [
              "ard 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 a"
            ]
          }
        }
      ],
      "open_prs": [],
      "open_pr_count": 0,
      "note": null,
      "fix_scope": "issue_fix"
    }
  ],
  "excluded_incidental_matches": [
    {
      "issue": 17948,
      "pr": 18073,
      "reason": "PR explicitly leaves the slow not-found/retry behavior from this issue out of scope; it fixes separate issue #18062."
    },
    {
      "issue": 17919,
      "pr": 18213,
      "reason": "Documentation-only sweep records a reproduction; it does not implement the Delete all fix."
    }
  ],
  "methodology": {
    "cohort": "Complete GitHub issue search for both authors created Oct 4–11 (incomplete_results=false), then exact ISO timestamp filtering; pull requests excluded.",
    "closed": "Fresh issue states and paginated timelines. GraphQL ClosedEvent.closer directly identifies the merged closing PR for each of the 75 closed issues; PR details verify merged_at and authors.",
    "open": "Enumerated all 454 open repository PRs, inspected exact issue references in titles/bodies across all authors, with draft PRs included. Independent complete grouped REST searches and per-issue GraphQL searches of PR titles/bodies/comments confirmed every accepted link and found no additional implementing PRs. Partial implementing PRs count; incidental QA/docs mentions do not.",
    "scope_caveat": "A merged PR closing an issue is a GitHub status fact, not independent proof that every behavior was fixed. #18092 is explicitly marked partial.",
    "counting": "Closed counts count distinct issues once using the actual closing PR; open PR counts are per issue, so #18278 counts once for #18277 and once as partial work for #18004."
  },
  "audit_summary": {
    "closed": {
      "cohort_issues": 106,
      "closed_by_merged_pr": 75,
      "still_open": 31,
      "closed_with_full_fix_reference": 74,
      "partial_tracker_closed_by_merged_pr": 1,
      "manual_or_unmatched_closures": 0,
      "all_closing_pr_author_groups": {
        "enyst/smolpaws": 61,
        "other_authors": 14
      },
      "full_fix_reference_author_groups": {
        "enyst/smolpaws": 60,
        "other_authors": 14
      },
      "all_closing_pr_authors": {
        "enyst": 60,
        "lx3133584": 2,
        "awss1i": 2,
        "GoldArowana": 1,
        "errmakov": 1,
        "pei711": 2,
        "qingshungLI": 1,
        "fengyue-xve": 5,
        "smolpaws": 1
      },
      "full_fix_reference_pr_authors": {
        "enyst": 59,
        "lx3133584": 2,
        "awss1i": 2,
        "GoldArowana": 1,
        "errmakov": 1,
        "pei711": 2,
        "qingshungLI": 1,
        "fengyue-xve": 5,
        "smolpaws": 1
      }
    },
    "closed_errors": [],
    "open": {
      "open_issues": 31,
      "issues_with_open_prs": 24,
      "issues_without_open_prs": 7,
      "issue_pr_matches": 34,
      "distinct_open_prs": 33,
      "distinct_draft_prs": 9
    },
    "open_result": "Original open-issue mapping independently confirmed. No additional implementing issue–PR associations found."
  }
}
