calm-artist-7206
09/14/2026, 10:43 PMfresh-machine-37269
09/14/2026, 10:43 PMfresh-machine-37269
09/14/2026, 10:45 PMissue_type (`bug`/`enhancement`/`None`) from the readiness checker and adds a workflow step that idempotently syncs the matching label β adding it when missing, removing the contradictory one, and no-op'ing when already correct. The re-entrant `labeled`/`unlabeled` event settles on the second run (no loop), there's no injection risk (issue_type comes from hardcoded constants), and gh failures degrade to step-summary warnings. CI is green and the PR includes controlled end-to-end evidence against issue #17220.
Approved with an APPROVE review at commit cedb820. β
calm-artist-7206
09/14/2026, 10:49 PMfresh-machine-37269
09/14/2026, 10:54 PMclients/typescript lockfile drift on main.
What's actually failing
The failing check is test (24.x) in the TypeScript client CI (typescript-client-ci.yml), and it dies in the Install dependencies step (npm ci):
npm error code EUSAGE
npm error `npm ci` can only install packages when your package.json and
npm error package-lock.json or npm-shrinkwrap.json are in sync.
npm error Invalid: lock file's @babel/core@8.0.1 does not satisfy @babel/core@8.0.5
npm error Invalid: lock file's @babel/generator@8.0.0 does not satisfy @babel/generator@8.0.5
npm error Missing: verkit@0.3.2 from lock file
npm error Missing: @jridgewell/gen-mapping@0.4.0-beta.0 from lock file
npm error Invalid: lock file's @jridgewell/sourcemap-codec@1.5.5 does not satisfy @jridgewell/sourcemap-codec@1.6.0
So package-lock.json is stale: transitive @babel/* deps resolve to newer versions than what's pinned, verkit@0.3.2 and @jridgewell/gen-mapping@0.4.0-beta.0 are missing entirely.
(test (22.12) shows "cancelled" β that's just the matrix fail-fast, it got cancelled when 24.x failed, not an independent failure.)
Why it's not this PR's fault
PR #4991 only touches 6 files, all Python:
β’ openhands-agent-server/openhands/agent_server/{bash_router,conversation_router,event_router,file_router}.py
β’ tests/agent_server/test_conversation_router.py
β’ tests/agent_server/test_search_limit_validation.py (new)
It doesn't touch clients/typescript/package.json or package-lock.json. I confirmed `main`'s copies of those two files already have the exact same locked versions (@babel/core 8.0.1, generator 7.29.8, no verkit, gen-mapping 0.3.13), so the npm ci breakage is on main and hitting every PR right now.
Fix
Regenerate the lockfile and commit it (a separate housekeeping change, not needed for the Python work):
cd clients/typescript && npm install
git add package-lock.json
The PR's Python logic itself is fine β agent-server-tests, sdk-tests, cross-tests, etc. are all green.calm-artist-7206
09/14/2026, 11:30 PMfresh-machine-37269
09/14/2026, 11:30 PMfresh-machine-37269
09/14/2026, 11:41 PMlimit query param was declared with Query(gt=0, lte=100) β but lte isn't a valid FastAPI/Pydantic constraint keyword (the correct one is le). Crucially, Pydantic silently ignores unknown kwargs rather than raising, so:
β’ The lte keyword just dropped out and the cap never made it into the OpenAPI schema.
β’ No test or mandatory CI job asserted "the limit bound is actually published in the schema" (that's the exact regression test PR #4991 adds), so nothing had a reason to fail.
β’ The endpoint still "worked" because a bare assert limit <= 100 in the handler caught it at runtime β as an HTTP 500 instead of a 422.
So CI was mandatory and green; it just had no coverage for this. The misspelling was invisible to every check.
About opening a PR
There's already an open PR fixing exactly this: #4991 (`lte`β`le` + dropping the asserts + regression tests). No need for a new one β and it's the correct fix.
One important nuance on its current CI status: the two red jobs on that PR are not caused by the fix:
β’ REST API (OpenAPI) breakage check β failing on a pre-existing removal of llm/modify_params (a main-branch change, unrelated to the limit typo).
β’ pre-commit β "forbidden `getattr`" in stream_context.py:287 and telemetry.py:264/270/272, also unrelated; the branch is just stale against main's forbidden_dynamic_attributes_baseline.json.
A sync/rebase with main should clear the pre-commit failure. Want me to leave a comment on #4991 flagging this to the author, or would you rather I open a separate PR on top of the current main head?calm-artist-7206
09/15/2026, 2:21 AMfresh-machine-37269
09/15/2026, 2:21 AMfresh-machine-37269
09/15/2026, 2:50 AM