calm-artist-7206
09/09/2026, 6:11 AMfresh-machine-37269
09/09/2026, 6:11 AMfresh-machine-37269
09/09/2026, 6:13 AMunresolved-review-threads check, which is a bot-internal gate, not CI.
Digging into the check runs for the head commit (98adf56), every real CI job was green ā build, sdk-tests, cross-tests, agent-server-tests, agent-server-stress-tests, coverage-report, integration-test, smoke-test, etc. were all success. The only red entry was:
⢠unresolved-review-threads ā failure (at 053539Z, right when the commit was pushed)
That check fails simply when there's an open review thread the author hasn't resolved yet ā it's not running any tests. In this case the second bot review thread (about previous_response_id) was still unresolved at push time, so the gate read as "failing."
The sequence was:
1. 05:35:34 ā head commit pushed ā checks kick off
2. 05:35:39 ā unresolved-review-threads fails (2nd review thread still open)
3. 05:39:51 ā you reply to that thread, resolving it
4. 05:41:24 ā the check re-runs and passes
5. 05:53:32 ā the "CI is failing" comment gets posted anyway
So it's effectively a false alarm: the "CI failing" detector appears to treat any failing check (including this non-test review-thread gate) as "CI failing," and it posted the notice based on the earlier failure state even though the gate had already gone green by then. No actual CI was broken.calm-artist-7206
09/09/2026, 6:14 AMfresh-machine-37269
09/09/2026, 6:17 AMValidate PR description
⢠unresolved-review-threads (the one we saw)
⢠check-pr-artifacts
⢠cleanup-on-approval
⢠cleanup-after-merge
2. Skipped jobs that still render as checks
For fork PRs a bunch of jobs never run but still show up with skipped, adding green-noise and making the list longer:
⢠Build & Push, Merge Multi-Arch Manifests, Consolidate Build Information, Update PR description with agent server image
⢠cleanup-on-approval, cleanup-after-merge, check-pr-artifacts
3. Overlapping docstring/docs checks
The repo has at least four docstring/documentation-oriented workflows registered (Check Docstrings, Markdown Docs & Docstrings, Check Docstrings & Generate Markdown Docs, Docstring Coverage (by OpenHands)), and pre-commit likely runs docstring linters on top of that. A lot of that is probably redundant coverage of the same thing.
4. Overlapping test matrices
There's a long tail of near-parallel suites that likely cover a lot of the same code: sdk-tests, tools-tests, workspace-tests, agent-server-tests, cross-tests, acp-live-tests, windows-tests, test (24.x), test (22.12), integration-test, smoke-test, and agent-server-stress-tests.
So the big themes are: (a) workflows triggered on too many event types causing duplicate check entries, (b) skipped jobs polluting the check list, and (c) several families of docs/test checks with overlapping scope. The unresolved-review-threads gate is just the one that happened to go red this time ā the same "any failing check = CI failing" conflation would apply to any of the non-CI gates.calm-artist-7206
09/09/2026, 6:28 AMfresh-machine-37269
09/09/2026, 6:40 AMU06PYTVAES1) posted about needing an admin merge because the "Node 20 workflow was required" ā OpenHands/typescript-client#229 (ci: drop obsolete Node 20).
2. Later (the Node 24 wave): a bot pinged #proj-agent-canvas asking for human review of OpenHands/OpenHands#17022. In the replies, Robert said George was working on Node 24 upgrades over the weekend and "already had a PR", plus an apology for stepping on a review.
The PRs typescript-client (the older "drop Node 20" work):
⢠#229 ci: drop obsolete Node 20 ā merged (by enyst + openhands). Dropped Node 20 from the CI matrix, moving to 22.x/24.x.
⢠#368 chore(ci): standardise every workflow on Node 24 via .nvmrc ā closed (superseded, not merged).
⢠#369 chore: require Node 24 ā closed (superseded, not merged).
OpenHands (the Node 22 ā 24 engine-floor work):
⢠#17008 ā the umbrella issue: @openhands/agent-canvas engines still permits Node 22 ā still open.
⢠#17009 chore: require Node 24 ā open (George's PR).
⢠#17022 fix: raise agent-canvas engine floor to Node 24 so unsupported runtimes fail fast (#17008) ā merged (by Asthenia0412).
⢠#17074 fix(engines): require node >=24 (#17008) ā open (Prakhar Saini).
My review notes There's a real coordination problem here: three PRs (#17009, #17022, #17074) all change the same two lines ā package.json + package-lock.json engines.node from >=22.12.0 to >=24 ā and they're in different states (one merged, two open, plus the umbrella issue still open). The core change is correct and trivial, but:
1. #17022 was merged while #17009 was already open doing the same thing ā the classic "multiple PRs for the same fix" collision, exactly what Robert flagged in Slack ("George already had a PR").
2. #17074 is subtly different and arguably worse: it changes >=24 to >=24.0.0 but also drags in 117 lines of unrelated package-lock.json churn (peer: true flags, deleted @emnapi/* optional deps, reordering). That lockfile diff looks like a stale/regenerated lockfile, not a deliberate engines bump ā reviewers should treat that diff with suspicion and ask it be trimmed to the single engines line.
3. #17008 (the issue) is still open and effectively resolved-by-merge in #17022, but nobody has closed/linked it cleanly ā so the "permits Node 22" bug is now half-fixed and half-orphaned.
4. The "not marked breaking" call is worth double-checking. Dropping Node 22 is technically a breaking change for any consumer on 22, and the PRs lean on "CI builds on 24 anyway" as justification. Fine internally, but for the published @openhands/agent-canvas package this is a real floor raise that release-please will ship as a non-major release if no one marks it breaking.
Net: the actual change (raise the engine floor to Node 24) is sound and already merged via #17022 ā the mess is that three PRs raced each other, #17074 is now redundant (and has a noisy lockfile diff), and #17009/#17074 should probably be closed as superseded. Want me to draft comments on #17009/#17074 suggesting they close in favor of #17022?calm-artist-7206
09/09/2026, 7:08 AMcalm-artist-7206
09/09/2026, 7:08 AMfresh-machine-37269
09/09/2026, 7:17 AMchore: require Node 24 for agent canvas ā commented: github.com/OpenHands/OpenHands/pull/17009#ā¦
⢠#17074 fix(engines): require node >=24 (#17008) ā commented: github.com/OpenHands/OpenHands/pull/17074#ā¦
Each comment notes it's a duplicate of the other (both bump engines.node >=22.12.0 ā >=24 for #17008), and I also flagged on #17074 that its package-lock.json carries ~117 lines of unrelated churn that should be trimmed if that PR is kept. I also noted that #17022 made the same change but was closed without merging.
One heads-up while I was at it: the REST API is currently rate-limited (shared token quota exhausted, resets ~08:10 UTC), so I switched to the GraphQL API to read the PR state and post the comments ā those landed fine. Also, gh reports the GITHUB_TOKEN in the environment as "no longer valid," so this account appears to be working with a stale/expired token even though the GraphQL call succeeded. Worth a credential rotation.