From 3af60ca8e8c9b51741e7de30780e40648957bece Mon Sep 17 00:00:00 2001 From: toki Date: Fri, 14 Aug 2026 04:57:39 +0900 Subject: [PATCH] =?UTF-8?q?docs(bench):=20OpenCode=20preset=20=EC=9B=90?= =?UTF-8?q?=EC=9D=B8=EC=9D=84=20=EB=B6=84=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenCode hybrid 실패를 IOP 코드 결함으로 오인하지 않도록 ornith-fast Node 비가용과 복구 후 통과 근거를 남기고, direct 재검증의 표준 배포 차단 상태를 분리한다. --- .../milestones/benchmark-route-minimal-html-smoke.md | 5 +++-- agent-test/dev/iop-benchmark-route-minimal-html-smoke.md | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md b/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md index f2f1115f..1a976770 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md +++ b/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md @@ -79,6 +79,7 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된 - TLS 환경 경계: 개발 Edge용 사설 CA는 Edge leaf 인증서가 아니라 managed CA bundle을 해당 벤치 caller process에만 전달한다. Codex에는 공식 변수 `CODEX_CA_CERTIFICATE`, Node 기반 caller에는 필요한 경우 `NODE_EXTRA_CA_CERTS`를 사용하며 Codex/IDE 시작 환경이나 셸 전역에 `export`하지 않는다. 그렇지 않으면 공개 TLS 연결에도 같은 CA override가 적용될 수 있다. - evidence 위치: `agent-test/dev/iop-benchmark-route-minimal-html-smoke.md` - 현재 사전 확인: 2026-08-13 실제 원격 실행기에서 Claude Code 2.1.177과 Codex 0.146.0을 확인했고, 현재 workspace의 OpenCode 1.18.3을 별도 사용자 설정 변경 없이 command-scoped provider config로 준비했다. 원격 SOPS에 보관된 기존 IOP principal token으로 token 원문을 출력하지 않은 `/v1/models`가 HTTP 200임을 확인했다. 새 벤치 전용 token은 발급하거나 사용하지 않는다. -- 현재 경로 결과: Claude Code → Claude direct와 Claude Code → Gemini direct는 최소 HTML 1회 호출을 통과했다. Claude Code → GPT direct는 Chat Completions의 tools+reasoning 조합 미지원으로 실패했으나 caller-neutral operation normalization 반영 뒤 9초 안에 caller success와 `index.html` marker 1회를 확인했다. Codex → GPT direct와 Codex → GPT execution preset도 각각 10초/16초에 통과했다. -- 추가 분리 결과: agy는 text completion은 가능하지만 trusted workspace에서도 파일 도구를 호출하지 않아 구현 Agent 벤치 대상에서 제외했다. 대체한 OpenCode → Gemini direct는 첫 tool 호출 뒤 `extra_content.google.thought_signature`를 일반 Chat history로 보존하지 못해 두 번째 provider 호출이 HTTP 400으로 닫혔다. IOP가 선택된 `gemini_openai_chat` tool-call wire에서만 opaque id로 캡슐화·복원하도록 공통 provider normalization을 추가했고 focused HTTP 연속 호출 회귀가 통과했다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었다. Claude Code → Gemini/GPT preset의 이전 default-selector 및 profile operation normalization 결함도 국소 수정과 회귀 검증이 완료됐다. +- 현재 경로 결과: Claude Code → Claude direct와 Claude Code → Gemini direct는 최소 HTML 1회 호출을 통과했다. Claude Code → GPT direct는 Chat Completions의 tools+reasoning 조합 미지원으로 실패했으나 caller-neutral operation normalization 반영 뒤 9초 안에 caller success와 `index.html` marker 1회를 확인했다. Codex → GPT direct와 Codex → GPT execution preset도 각각 10초/16초에 통과했다. OpenCode → Gemini execution preset은 Plan 성공 후 `ornith-fast` Work provider가 내려가 첫 호출에서 실패했지만, 해당 Node를 명시적 `Up`으로 복구한 뒤 실패 경로 1회 재검증에서 19초·caller terminal marker 1회·오류 0으로 통과했다. +- 추가 분리 결과: agy는 text completion은 가능하지만 trusted workspace에서도 파일 도구를 호출하지 않아 구현 Agent 벤치 대상에서 제외했다. 대체한 OpenCode → Gemini direct는 첫 tool 호출 뒤 `extra_content.google.thought_signature`를 일반 Chat history로 보존하지 못해 두 번째 provider 호출이 HTTP 400으로 닫혔다. IOP가 선택된 `gemini_openai_chat` tool-call wire에서만 opaque id로 캡슐화·복원하도록 공통 provider normalization을 추가했고 focused HTTP 연속 호출 회귀가 통과했다. 코드는 `dev`에 반영됐지만 live 재검증은 표준 배포 전이다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었다. Claude Code → Gemini/GPT preset의 이전 default-selector 및 profile operation normalization 결함도 국소 수정과 회귀 검증이 완료됐다. +- 배포 경계: live dev는 이전 release를 실행 중이고, 원격에 이전부터 미종료 release branch 두 건이 남아 있다. `dev-runtime-deploy` fail-closed 규칙에 따라 새 release 생성·배포·tag 반영은 시작하지 않았다. 이 Git release 상태는 벤치 성공 판정이 아니라 제품 배포 경계에서 별도로 정리해야 한다. - 후속 측정: [초경량 Agent 모델 비교](thin-agent-model-comparison-benchmark.md) diff --git a/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md b/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md index 64f10143..1897a0ea 100644 --- a/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md +++ b/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md @@ -26,11 +26,11 @@ |---|---|---|---| | Claude Code → Claude direct | 통과 | 없음 | 기존 성공 | | Claude Code → Gemini direct | 통과 | 없음 | 기존 성공 | -| OpenCode → Gemini direct | 6초, 첫 `glob` tool 성공 뒤 두 번째 provider 호출 HTTP 400 | provider normalization 구현·배포 뒤 재검증 대기 | 선택된 Gemini Chat profile의 `thought_signature`를 표준 caller history로 왕복하지 못한 IOP 결함; agy는 구현 Agent 부적합으로 대상 제외 | +| OpenCode → Gemini direct | 6초, 첫 `glob` tool 성공 뒤 두 번째 provider 호출 HTTP 400 | provider normalization 구현·`dev` 반영 완료; live 배포 뒤 재검증 대기 | 선택된 Gemini Chat profile의 `thought_signature`를 표준 caller history로 왕복하지 못한 IOP 결함; agy는 구현 Agent 부적합으로 대상 제외 | | Claude Code → GPT direct | provider HTTP 400 | operation normalization 반영 뒤 9초, caller success, `index.html` marker 1회 | IOP가 tools+effort를 Chat으로 보낸 결함 수정 확인 | | Codex → GPT direct | 30초, `turn.failed`, 파일 없음 | 공식 설정대로 임시 `CODEX_HOME`, Responses 전용 provider, `CODEX_CA_CERTIFICATE`에 CA bundle을 사용해 10초 통과 | 측정 환경 결함: 첫 호출은 CA bundle 대신 Edge leaf 인증서를 사용 | | Claude Code → Gemini execution preset | 184초, caller terminal success, caller workspace 파일 없음 | 새 배포에서 33초 caller 정상 종료; Plan/Work/Review, workspace write/read/list, artifact 3개 cleanup 성공 | default-selector dispatch 결함 해소; terminal 문구에 marker가 없는 것은 caller-visible 결과 판정과 분리 | -| OpenCode → Gemini execution preset | 미실행 | provider normalization 배포 뒤 실행 | direct 경로의 Gemini tool continuation 선행 검증 | +| OpenCode → Gemini execution preset | 7초, Plan 통과 후 Work `provider` 오류 | `ornith-fast` Node를 명시적 `Up` 복구한 뒤 19초, caller terminal marker 1회, 오류 0 | preset은 `ornith-fast` → RTX provider로 정상 라우팅됐으나 해당 Node가 내려가 Edge가 502 `provider unavailable`로 닫은 환경 결함; OpenCode·IOP 코드 결함 아님 | | Claude Code → GPT execution preset | 미실행 | selector/Chat 응답 정규화 배포 뒤 최신 Claude 요청이 provider 전 95ms에 `messages[1].role` 검증 거절 | 실제 caller가 `user → system`과 mid-conversation-system beta를 보냄; IOP가 beta만 선언하고 ingress/lineage/Chat/Responses normalize를 구현하지 않은 별도 제품 결함 확인·국소 수정 | | Codex → GPT execution preset | 16초, `turn.completed`, terminal marker 1회 | 없음 | 통과 | @@ -42,8 +42,10 @@ 해당 입력 normalize 배포 뒤 단일 재검증은 Plan 성공 후 Work `validation`으로 종료됐다. preset 구성상 Plan/Review는 GPT지만 Work는 `ornith-fast`다. RTX Ornith에 같은 forced workspace tool shape를 직접 보낸 결과 native `tool_calls`가 정상 반환됐고, 응답의 top-level provider `timings`가 기존 Work codec에서는 허용되지만 새 공통 Chat normalize allowlist에서 빠져 있음을 확인했다. 공통 normalize가 `timings`를 검증 후 폐기하도록 보완했다. +OpenCode → Gemini execution preset의 최초 실행은 Plan을 정상 통과했지만 Work에서 7초 만에 `provider` 오류로 닫혔다. live preset과 Edge 단계 지표를 대조한 결과 Work는 `ornith:35b`가 아니라 의도한 `ornith-fast`로 선택됐으며, 동일 Work request shape의 단일 직접 호출은 연결된 Node에 해당 provider가 없어 HTTP 502 `provider unavailable`를 반환했다. 사용자 관리형 RTX runtime을 toggle가 아닌 명시적 `Up`으로 복구한 뒤 실패 경로만 1회 재검증했고, 19초 내 caller terminal marker 1회·오류 0으로 통과했다. preset workspace가 caller 로컬에 파일을 남기지 않은 것은 기존 정리 계약과 일치한다. + ## 재개 조건 -Gemini Chat tool-call normalization을 dev 런타임에 반영한 뒤 OpenCode → Gemini direct를 한 번 재검증하고, 통과하면 OpenCode → Gemini execution preset을 한 번 실행한다. 이미 성공한 경로는 반복하지 않는다. 제품 전체 capacity gate나 unrelated 운영 라우트는 이 얇은 경로 검증의 판정 기준으로 섞지 않는다. +Gemini Chat tool-call normalization 코드는 `dev` commit `d99305d1`과 merge `dc2d9968`로 반영됐다. 현재 live dev는 이전 release를 실행 중이며, 원격에 이전부터 미종료 release branch 두 건이 남아 표준 `dev-runtime-deploy`가 새 release를 시작하지 않고 fail-closed했다. 해당 Git release 상태를 별도로 정리한 뒤 표준 배포를 수행하고 OpenCode → Gemini direct 실패 경로만 1회 재검증한다. OpenCode → Gemini execution preset은 이미 통과했으므로 반복하지 않는다. 제품 전체 capacity gate나 unrelated 운영 라우트는 이 얇은 경로 검증의 판정 기준으로 섞지 않는다. 성공한 경로는 반복하지 않는다. 실패한 경로는 원인이 변경된 경우에만 해당 경로를 1회 재검증한다.