Skip to content

[Bug] #2448 still misses Codex Desktop wait.yield_time_ms (underscore); live Grok 4.6 calls keep 20000.0 #2451

Closed

Description

@jeongjin0

Client or integration

Codex App

Area

Tools / MCP / web search

Summary

#2448 closed #2443, but the allowlist it added to src/lib/tool-argument-integers.ts names the wrong field.

Live Codex Desktop wait calls from xAI Grok 4.6 still look like this:

{"cell_id":"358","yield_time_ms":20000.0,"max_tokens":5000.0}

and Codex still rejects them before the tool runs:

failed to parse function arguments: invalid type: floating point `20000.0`, expected u64 at line 1 column 40
failed to parse function arguments: invalid type: floating point `5000.0`, expected usize at line 1 column 36

#2448 scoped repair to the bare wait tool, which is the right boundary, but it allowlisted yield-time_ms (hyphen). The advertised schema and the live arguments both use yield_time_ms (underscore). max_tokens is already in the wait-scoped set and is not the miss.

Expected: an integral float in bare wait.yield_time_ms / wait.max_tokens is rewritten to an integer, wait continues the exec cell, and a genuine fraction such as 1.5 still fails. Cursor's namespaced yield_time_ms and any other tool's max_tokens stay byte-identical.

This is a follow-up to #2443 / #2448, not a reopen of #2316 (wait_agent.timeout_ms) or #1611.

Reproduction

  1. Route Codex App / Codex Desktop through OpenCodex to xai/grok-4.6.

  2. Start a long-running host command through code-mode exec so it yields with a cell id.

  3. Grok calls the host wait tool with integer intent:

    {"cell_id":"358","yield_time_ms":20000,"max_tokens":5000}

    The provider serializes those fields as 20000.0 / 5000.0.

  4. Observe the parse rejections above. wait does not run. The model retries the same float and the turn stalls on continue.

Live schema advertised in the same session:

{
  "name": "wait",
  "parameters": {
    "type": "object",
    "required": ["cell_id"],
    "properties": {
      "cell_id": { "type": "string" },
      "yield_time_ms": { "type": "number" },
      "max_tokens": { "type": "number" },
      "terminate": { "type": "boolean" }
    }
  }
}

Current origin/dev after #2448:

const U64_NUMBER_FIELDS_BY_TOOL = new Map<string, ReadonlySet<string>>([
  ["wait", new Set(["yield-time_ms", "max_tokens"])],
]);

tests/tool-argument-integers.test.ts currently locks the hyphenated name and even asserts that yield_time_ms with tool identity "wait" must stay 60000.0. That test encodes the miss.

Version

Live reject captured on Codex Desktop through local OpenCodex @bitkyc08/[email protected] (loopback 127.0.0.1:10100). The same field name is what #2443 already documented, and origin/dev 81bf4b9a (merge of #2448) still would not rewrite it.

Operating system

macOS (Darwin, Asia/Seoul)

Provider and model

xai / grok-4.6 (OpenCodex-routed Codex App / Codex Desktop host tool surface)

Logs or error output

From Codex session 01a02eb5-7bba-7233-a146-4e0e2219fb80 after the model switched to xai/grok-4.6:

wait {"cell_id":"358","yield_time_ms":20000.0,"max_tokens":5000.0}
failed to parse function arguments: invalid type: floating point `20000.0`, expected u64 at line 1 column 40

wait {"cell_id":"358","yield_time_ms":20000.0,"max_tokens":5000.0}
failed to parse function arguments: invalid type: floating point `20000.0`, expected u64 at line 1 column 40

wait {"cell_id":"358","max_tokens":5000.0}
failed to parse function arguments: invalid type: floating point `5000.0`, expected usize at line 1 column 36

The same session also had earlier integer wait calls (yield_time_ms: 30000) that succeeded. The failure starts when Grok emits the .0 form.

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

  1. added
    bugSomething isn't working
    toolstool_calls, MCP, web-search / sidecar tools
    on Aug 23, 2026
  2. jeongjin0 commented on Aug 23, 2026

    @jeongjin0
    ContributorAuthor

    Follow-up PR: #2453

    Live capture is from Codex Desktop session 01a02eb5-7bba-7233-a146-4e0e2219fb80 after the turn switched to xai/grok-4.6. Integer wait calls succeeded earlier in the same session; the hard loop started when Grok emitted .0 for yield_time_ms / max_tokens.

    Local runtime that still reproduces today is @bitkyc08/[email protected] on 127.0.0.1:10100. origin/dev 81bf4b9a (#2448) would not have rewritten this payload either, because the allowlist name is hyphenated.

  3. lidge-jun commented on Aug 23, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 61 / 80

    설명: 이 이슈는 2448 이 착지한 뒤에, 코덱스 데스크톱 호스트 도구 wait 의 yield_time_ms 가 아직도 소수로 거절된다고 한다. 2448 이 wait 도구에만 묶은 경계는 맞다. 그런데 허용 이름에 하이픈 yield-time_ms 를 넣었다. 살아 있는 호출과 광고 스키마는 밑줄 yield_time_ms 다. 지금 CURRENT dev HEAD 는 9cebfc64e 이다. 이번 시간에 origin/dev 는 ed719b568 에서 여기로 왔다. 새 머지는 2448 도구 정수, 2449 콤보 빈 에스에스, 2450 인증 오류 모음 세 개다. package.json 은 2.27.0 이다. src/config.ts 는 3238줄이다. src/runtime 폴더는 지금 HEAD 에 없다. 작성자는 살아 있는 코덱스 데스크톱 세션과 2448 머지 81bf4b9a4 에서 재현했다. 내가 HEAD 를 열어 보니 허용 목록은 아직 하이픈 이름이다.

    살아 있는 재현은 이렇다. 코덱스 앱을 엑스에이아이 그록 4.6 으로 보낸다. 긴 호스트 명령을 실행해서 칸 아이디가 나온다. 모델은 wait 에 정수 뜻을 담는다. 그록이 yield_time_ms 20000.0 과 max_tokens 5000.0 으로 직렬화한다. 코덱스는 유64 와 유사이즈로 읽다가 거절한다. wait 는 실행되지 않는다. 같은 세션에서 정수 20000 은 통과했다. 점 영이 오면 막힌다. 기대는 밑줄 이름을 정수로 고쳐서 wait 가 이어지고, 진짜 소수 1.5 는 그대로 실패하는 것이다. 다른 도구와 이름 공간 커서 wait 의 같은 칸은 바이트가 그대로여야 한다.

    지금 HEAD 의 src/lib/tool-argument-integers.ts 80줄 주석은 2443 의 하이픈 이름과 max_tokens 를 말한다. 84줄 도구별 허용 목록은 wait 에 하이픈 이름과 max_tokens 를 넣는다. 밑줄 이름은 없다. 전역 목록 78줄은 여전히 timeout_ms 하나다. tests/tool-argument-integers.test.ts 328줄 시험은 wait 정체여도 밑줄 yield_time_ms 60000.0 을 그대로 둔다고 잠근다. 그 시험이 빗나감을 고정한다. 367줄 스키마와 387줄 사건도 하이픈 이름이다. 그래서 2448 시험은 틀린 이름을 잠근 것이다. src/bridge.ts 627줄이 이 고침을 도구 인자 문자열에 붙인다. 고치는 풀 리퀘스트 2453 이 초안으로 올라왔다. 착지 전에는 이 이슈를 닫지 않는다.

    max_tokens 는 이미 wait 에만 묶여 있다. 그 칸은 빗나가지 않았다. 빗나간 것은 이름 한 글자다. 전역 목록에 밑줄을 넣지 말 것. 커서 형제도 같은 밑줄 이름을 쓰지만, 이번 거절은 코덱스 네이티브 wait 다. 커서 쪽은 따로 증거가 오기 전에는 묶지 않는 편이 맞다. 하이픈 이름을 남겨 둘지는 메인테이너가 정한다. 살아 있는 스키마는 밑줄만 보여 주었다. 둘 다 넣으면 틀린 이름을 시험이 계속 잠근다. 2316 의 wait_agent timeout_ms 와 다른 도구다. 2443 은 2448 로 이미 닫혔다. 이 이슈는 그 닫힘 위의 이름 빗나감이다. 2443 을 다시 열지 말 것.

    사용자 길이로는 2448 이 착지했는데도 긴 호스트 일을 기다리다가 wait 가 인자 파싱에서 죽는 구멍이라서 61. 카탈로그 팁은 Ox Alpha x-preview-f-free + deepseek-v4-flash-vision-exp. Cursor 정적 카탈로그는 opus-4-8-fast / opus-5-fast. 2334 CursorCredentialRouter 는 여전히 src/providers/cursor-pool.ts 모듈+테스트만 있고 어댑터에 연결되지 않았다. 2332 H2 는 discovery 전용. 2320 overflow + 2342 는 이미 dev. 2188 사이드카는 이미 dev. 2361 __omit__ 는 이미 HEAD 다. 2292 는 오너가 이번 시간에 2382 로 닫았다. 내가 닫은 것이 아니다. 지금 HEAD 의 남은 구멍은 바뀌었다. src/lib/bounded-body.ts 128줄은 이미 죽은 시그널에서 취소 없이 던진다. 222줄 본문 읽기는 취소한다. 2426 코덱스 웹소켓 나가는 크기 가드는 없다. 2431 빈 에스에스와 410 구멍은 이번 시간 2449 로 착지했다. combo-stream-preflight.ts 는 지금 HEAD 에 있다.

    src/lib/tool-argument-integers.ts 라인 84 - wait 허용 목록은 하이픈 yield-time_ms 다. 살아 있는 칸은 밑줄이다
    src/lib/tool-argument-integers.ts 라인 80 - 주석도 하이픈 이름을 2443 의 칸으로 적는다
    src/lib/tool-argument-integers.ts 라인 78 - 전역 목록은 timeout_ms 하나다. 밑줄을 여기에 넣지 말 것
    tests/tool-argument-integers.test.ts 라인 328 - wait 정체여도 밑줄 칸을 고치지 않는다고 잠근다. 빗나감을 고정한다
    tests/tool-argument-integers.test.ts 라인 367 - 데스크톱 wait 스키마가 하이픈 이름이다
    src/bridge.ts 라인 627 - 이 고침이 도구 인자 문자열에 붙는 다리다
    PR 2453 - 밑줄로 바꾸는 초안이다. 착지 전에는 이 이슈를 닫지 않는다

    메인테이너의 판단이 필요한 지점

    • 하이픈 이름을 지울지 둘 다 둘지. 살아 있는 스키마는 밑줄만 보여 주었다. 지우는 편이 맞다
    • 커서 형제의 같은 밑줄 칸을 같이 넣을지. 이번 거절은 코덱스 네이티브 wait 다. 지금은 묶지 말 것
    • 전역 목록에 밑줄을 넣을지. 이름이 넓어서 wait 도구에만 묶는 편이 맞다
    • 2443 을 다시 열지 말 것. 이 이슈는 그 닫힘 위의 이름 빗나감이다
    • 2426 웹소켓 크기와 128줄 취소 구멍을 이 이름 고침에 섞지 말 것

    너의 추천
    이슈는 열어 둔다. 2453 이 초록이 되고 초안에서 나온 뒤에 그 PR 로 닫는다. 허용 이름은 밑줄로 바꾼다. 하이픈은 지우되, 살아 있는 하이픈 거절이 따로 오기 전에는 둘 다 넣지 말 것. max_tokens 는 wait 에만 묶인 채 둔다. 1.5 는 그대로 실패하게 둔다. 커서 형제와 2316 은 닫지 않는다. 호출 길을 넓히지 말 것. 라벨은 그대로 둔다. 프리뷰 배포가 아니다.

    이 댓글은 grok-bot이 작성했습니다

  4. lidge-jun commented on Aug 24, 2026

    @lidge-jun
    Owner

    Landed via #2453 at c44e43f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinglanded-via-maintainerOriginal PR closed after landing via a maintainer merge traintoolstool_calls, MCP, web-search / sidecar tools

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions