Skip to content

fix: preserve Claude Go affinity across combo selection and failover - #4050

Draft
david-wang-0 wants to merge 1 commit into
lidge-jun:devfrom
david-wang-0:fix/claude-go-final-route-affinity
Draft

fix: preserve Claude Go affinity across combo selection and failover#4050
david-wang-0 wants to merge 1 commit into
lidge-jun:devfrom
david-wang-0:fix/claude-go-final-route-affinity

Conversation

@david-wang-0

@david-wang-0 david-wang-0 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Verification

  • Independent local Codex static review of the rebased head: no actionable correctness findings, including the new upstream registry changes.
  • Focused Go affinity suite: 84 pass, 0 fail, 605 assertions.
  • bun run typecheck: passed.
  • bun run privacy:scan: passed.
  • cd docs-site && bun run build: passed (425 pages).
  • git diff --check and staged privacy/path review: passed.
  • Before the rebase, standard bun run prepush was attempted twice, but its monolithic Bun test worker stalled; neither attempt is claimed green. The second attempt had no assertion failures before interruption. This matches the symptom class tracked in [Bug] CI: Linux test shards intermittently hang ~15 minutes and are killed, leaving an orphan bun process #1302, not a proven diagnosis of its underlying runtime cause.
  • The author explicitly approved one-time local-hook bypasses for the initial publication and this validated rebased push. Hosted checks and the review-readiness gate are not bypassed.
  • Tested rebased head: ee9a86c0950763c9fe064abe22c6219e039c016f, based on dev at 7dc7dc99e65268bc8764e19840952256b030bce9. Rebase was clean; range-diff confirms the patch is unchanged. The checks and reproduction below were repeated on this head. Subsequent dev commit cfff026d58c4d6e894214cbec5248d70d759ba7f landed after validation: the branch is one commit behind, within the repository's ten-commit readiness allowance. These local results do not claim to test that later commit.
  • Bounded general CI suite: env -u OPENCODEX_CODEX_SHIM_AUTO_RESTORE OPENCODEX_BUN_PATH="$PWD/node_modules/bun/bin/bun.exe" bash scripts/ci/run-bun-test-batches.sh 1/1 passed: 21,882 pass, 43 skip, 0 fail, 1,142 files in 96 batches, no runtime retries.
  • Dedicated storage group excluded by that runner: env -u OPENCODEX_CODEX_SHIM_AUTO_RESTORE bun run test tests/storage/api-storage-policy-already-running.test.ts tests/storage/api-storage-policy-mutation-busy.test.ts tests/storage/api-storage-policy-put-race.test.ts tests/storage/api-storage-policy-run.test.ts tests/storage/api-storage-policy.test.ts tests/storage/api-storage.test.ts passed: 9 pass, 0 fail.
  • Dedicated usage tests plus release guard rechecked after fetching the latest published tag: env -u OPENCODEX_CODEX_SHIM_AUTO_RESTORE bun run test tests/server/api-usage.test.ts tests/ci-workflows/release-version-line.test.ts passed: 36 pass, 0 fail.
  • The bounded general suite plus dedicated storage/usage runs cover all 1,149 test files. Verification is local Linux evidence, not a claim of hosted or cross-platform CI success.
  • The launcher exports OPENCODEX_CODEX_SHIM_AUTO_RESTORE=0; this conflicts with the shim auto-repair test. The test command unsets it without changing any persistent setting. The shim file then passed 9/9. An initial full run with that inherited flag failed the shim assertion and was interrupted after its worker stalled; it is not counted as a successful gate.

Deterministic reproduction (no API key)

Requires Git, Node.js, and Bun. All upstream fetches in the selected tests are mocked. The script creates a disposable checkout and keeps its logs; it does not start a proxy or call Go. It runs exactly the same new regression tests against the unpatched base and the fixed production files.

#!/usr/bin/env bash
set -euo pipefail
# Requires git, Node.js and Bun. No API key or running proxy is used.
repo="${REPRO_REPO:-https://github.com/david-wang-0/opencodex.git}"
base=7dc7dc99e65268bc8764e19840952256b030bce9
fixed=ee9a86c0950763c9fe064abe22c6219e039c016f
export NO_COLOR=1
scratch=$(mktemp -d)
git init -q "$scratch/checkout"
cd "$scratch/checkout"
git remote add origin "$repo"
git fetch --depth=2 origin "$fixed"
git checkout --detach "$fixed"
bun install --frozen-lockfile --ignore-scripts
node node_modules/bun/install.js
test_file=tests/providers/opencode-go-session-header.test.ts
selector='Claude random openai-chat to Go uses metadata'

# Keep the new regression tests but restore only the two production files.
git restore --source="$base" --worktree -- \
  src/server/claude-messages.ts src/server/responses/core.ts
set +e
bun run test "$test_file" -t "$selector" > "$scratch/before.log" 2>&1
before_status=$?
set -e
cat "$scratch/before.log"
if [ "$before_status" -eq 0 ]; then
  echo 'ERROR: expected the unpatched implementation to fail' >&2
  exit 1
fi
grep -Eq '(^|[[:space:]])2 fail' "$scratch/before.log"
grep -Fq 'Received: null' "$scratch/before.log"
grep -Fq 'Expected: "ocx_a89540229ef781fd5f7adf92a711b436"' "$scratch/before.log"

git restore --source="$fixed" --worktree -- \
  src/server/claude-messages.ts src/server/responses/core.ts
bun run test "$test_file" -t "$selector" > "$scratch/after.log" 2>&1
cat "$scratch/after.log"
echo "Unpatched exit: $before_status; patched exit: 0"
echo "Checkout and logs retained in: $scratch"

The selected cases force the preliminary route to a non-Go Chat provider and actual random dispatch to Go, on both Go wire protocols. Recorded standalone output (setup and stack traces omitted):

Unpatched, both cases:
Expected: "ocx_a89540229ef781fd5f7adf92a711b436"
Received: null
 0 pass
 2 fail

Patched:
 2 pass
 0 fail
Unpatched exit: 1; patched exit: 0

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Co-authored-by: GPT-6 Astra noreply@openai.com

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • All CI tests are green on my local testing.

  • I pushed my PR to the latest dev commit.

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

Summary by CodeRabbit

  • Improvements

    • Improved OpenCode Go session affinity for Claude Messages and Responses, providing more consistent conversation routing across fallback attempts and randomly selected destinations.
    • Conversation identity can now maintain Go session continuity when an explicit session identifier is unavailable.
    • Go-specific session information remains isolated from non-Go destinations.
  • Documentation

    • Added guidance explaining session-affinity fallback behavior, destination selection, and the distinction between conversation identity and prompt-cache keys.

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 95afebb6-dd90-41a6-9127-9d1075252eb7

📥 Commits

Reviewing files that changed from the base of the PR and between cfff026 and ee9a86c.

📒 Files selected for processing (4)
  • docs-site/src/content/docs/guides/providers.md
  • src/server/claude-messages.ts
  • src/server/responses/core.ts
  • tests/providers/opencode-go-session-header.test.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

Claude Messages now derives Go session affinity separately from replay headers. Responses handling passes this identity to final Go transport resolution. Tests cover identity precedence, combo strategies, failover, and non-Go target isolation. Provider documentation describes the fallback behavior.

Changes

Claude Go session affinity

Layer / File(s) Summary
Session lane derivation
src/server/claude-messages.ts
Claude Messages derives claudeGoSessionLane from request identity or metadata and passes it through claudeGoAffinity. Go identity is no longer copied into replay headers.
Final transport resolution
src/server/responses/core.ts
Responses handling accepts claudeGoAffinity and uses its session lane when resolving the final canonical Go transport. Native session_id synthesis remains limited to non-Go routes.
Routing validation and documentation
tests/providers/opencode-go-session-header.test.ts, docs-site/src/content/docs/guides/providers.md
Tests cover identity precedence, random and failover strategies, and non-Go header isolation. Documentation describes metadata fallback and final-destination behavior.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: 🟡 Moderate · up to ee9a8

The affinity behavior appears well targeted, but the new regression suite cannot run because of a duplicate declaration. Fix the test parse failure and rerun the checks before merging.

Sequence Diagram(s)

sequenceDiagram
  participant ClaudeMessages
  participant Responses
  participant OpenCodeGoTransport
  ClaudeMessages->>ClaudeMessages: Derive session lane
  ClaudeMessages->>Responses: Pass claudeGoAffinity
  Responses->>OpenCodeGoTransport: Resolve final Go transport
  OpenCodeGoTransport-->>Responses: Apply session affinity
Loading

Suggested reviewers: lidge-j

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (1 skipped: 1… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: preserving Claude Go affinity across combo selection and failover.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (1/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 1/4).

Review readiness checklist

  • ✅ All CI tests are green on my local testing.
  • ⬜ I pushed my PR to the latest dev commit.
  • ⬜ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

1/4 boxes ticked.

This PR stays in draft until every box above is ticked.

Carry validated Claude affinity privately through combo replay and consume it only at the final canonical Go transport. Preserve explicit identity and operator precedence without leaking Go-only headers to other destinations.

Addresses the late review on lidge-jun#3961. Adds deterministic random and failover regressions across both Go wires.

Co-authored-by: GPT-6 Astra <noreply@openai.com>
@lidge-jun

Copy link
Copy Markdown
Owner

리뷰 · 우선순위 72 / 80

이 PR은 #3961 늦은 리뷰 후속입니다. Claude /v1/messages가 combo로 들어갈 때 사전 점검(preflight) 목적지와 실제 dispatch/failover 목적지가 다를 수 있는데, 지금 dev HEAD cfff026d5는 Go affinity를 preflight 시점의 opencodeGoRoute와 replay 헤더에 기대고 있습니다. src/server/claude-messages.ts는 Go로 보이는 사전 루트일 때만 x-opencode-session을 복사하고 synthesizeGoSession으로 session_id를 붙입니다. 그다음 handleResponsesapplyFinalRouteRequestNormalization은 다시 요청 헤더에서 레인을 읽어 resolveOpenCodeGoTransport에 넣습니다. 그래서 (1) preflight는 non-Go인데 최종이 Go인 random/failover면 affinity가 비고, (2) preflight는 Go인데 최종이 non-Go면 Go 전용 identity가 새어 나갈 수 있습니다. #3961이 연 메타데이터→레인 합성은 살아 있지만, combo가 목적지를 나중에 바꾸면 그 합성이 잘못된 쪽에 붙습니다.

패치 요지는 affinity를 대역 외 옵션으로 옮기는 것입니다. Claude 쪽에서 쓸 수 있는 레인(session_id / x-opencode-session / metadata에서 만든 값)을 claudeGoSessionLane으로 모은 뒤, replay 헤더에는 Go identity를 넣지 않고 handleResponses(..., { claudeGoAffinity: { sessionLane } })로만 넘깁니다. src/server/responses/core.tsHandleResponsesOptions에 같은 필드를 추가하고, 최종 canonical 정규화에서 args.claudeGoAffinity가 있으면 그 레인을, 없으면 기존 헤더 판별을 씁니다. native ChatGPT 경로의 session_id 합성은 nativeRoute && !opencodeGoRoute로 좁혀, Go 전용 합성과 분리합니다. 문서 docs-site/.../providers.md도 “Claude metadata fallback은 최종 Go에만, shared system 키는 대화 ID가 아니다”를 명시합니다.

테스트 tests/providers/opencode-go-session-header.test.ts가 핵심입니다. Chat/Muse × openai-chat/responses × random/failover × metadata/explicit/lane/operator/invalid/shared-system 매트릭스와, preflight Go → 최종 non-Go에서 헤더 미누출 케이스를 추가했습니다. 본문 기준 focused affinity 84 pass, typecheck·privacy·docs build 통과, 로컬 bounded suite 21818 pass를 주장합니다. 다만 draft이고, 작성 시점 base는 옛 dev라 최신 tip(cfff026 / #4049 luvs01 train) 대비 rebase·재검증이 필요합니다. 범위는 affinity 전달뿐이라 types/config 분할에 무효화되지 않습니다. credentials·schema·의존성 변경도 없습니다.

라인 src/server/claude-messages.ts · claudeGoSessionLane - 명시 레인 → 클라이언트 Go 헤더 → metadata 합성 순서가 문서·테스트와 맞습니다. shared system 키는 metadataGoLane에 안 들어갑니다.

라인 src/server/responses/core.ts · resolveOpenCodeGoTransport 호출 - args.claudeGoAffinity가 있으면 헤더를 무시합니다. 빈 객체 { sessionLane: undefined }도 truthy라서, 의도적으로 “헤더 폴백 금지”가 됩니다. Claude 경로만 이 옵션을 넘기는 한 괜찮지만, 실수로 빈 객체를 넘기는 다른 호출부가 생기면 affinity가 통째로 사라집니다.

경로 draft + rebase - tip이 #4049까지 전진했습니다. undraft 전에 dev rebase와 hosted CI를 다시 보는 게 맞습니다. 로컬 prepush stall은 #1302 계열로 본문에 적혀 있고, 이번 PR 회귀로 단정하진 않았습니다.

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

너의 추천
방향은 dev의 Go affinity 열차(#3880/#3961/#3966)와 정확히 맞습니다. rebase → undraft → hosted CI 그린이면 머지하세요. draft 상태에서는 랜딩 큐 앞에 두지 마세요. close-don't-rebase 대상이 아닙니다.

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

@david-wang-0
david-wang-0 force-pushed the fix/claude-go-final-route-affinity branch from 3e6a831 to ee9a86c Compare September 8, 2026 18:02
@david-wang-0

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@david-wang-0

Copy link
Copy Markdown
Contributor Author

Rebased and revalidated at ee9a86c on dev 7dc7dc9. The updated description records the new bounded test results and exact reproduction pins; cfff026 landed afterward and is not included in those local results, so the latest-dev checkbox remains unchecked.

The empty claudeGoAffinity object is intentional negative information, not a missing fallback value. Claude snapshots Go eligibility before the existing native preflight may synthesize a session_id header. When metadata is ineligible and no usable explicit identity exists, an empty snapshot must suppress fallback to that later synthesized header. Testing sessionLane != null instead would re-enable that fallback. The regression matrix covers invalid metadata and shared-system-only identity with an openai-responses preliminary target followed by Go on both wires. Calls that omit claudeGoAffinity entirely retain the existing header-based behavior.

A full CodeRabbit review has been requested for this pushed head. The PR remains draft pending remaining readiness work.

@david-wang-0

Copy link
Copy Markdown
Contributor Author

@coderabbitai Your completed summary reports no actionable comments, but its merge-risk paragraph says the regression suite has a duplicate declaration and cannot parse. Please identify the exact identifier and line, or correct that paragraph.

I verified that the published test blob and the executed local blob are identical: 4171ef00a85a0a115d551ce551681dc37056ec32 at head ee9a86c. A fresh run of env -u OPENCODEX_CODEX_SHIM_AUTO_RESTORE bun run test tests/providers/opencode-go-session-header.test.ts on that head again completed successfully: 84 pass, 0 fail, 605 assertions. Typecheck and the bounded full suite also passed as recorded in the description.

Please also identify the functions behind the advisory docstring-coverage warning; the report gives only an aggregate percentage, so it does not currently identify a concrete missing contract to assess.

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== HEAD =='
git rev-parse HEAD
git status --short

echo '== Test file outline =='
ast-grep outline tests/providers/opencode-go-session-header.test.ts --items all || true

echo '== Import and top-level declarations with line numbers =='
rg -n -C 2 --type ts \
  '^\s*import\b|^\s*(const|let|var|function|class|interface|type|enum)\s+' \
  tests/providers/opencode-go-session-header.test.ts || true

echo '== Repeated const/let/function/class/type/interface/enum names in that file =='
python3 - <<'PY'
from collections import defaultdict
import re
p = "tests/providers/opencode-go-session-header.test.ts"
decl = re.compile(r'^\s*(?:export\s+)?(?:async\s+)?(?:const|let|var|function|class|interface|type|enum)\s+([A-Za-z_$][\w$]*)\b')
seen = defaultdict(list)
with open(p, encoding="utf-8") as f:
    for n, line in enumerate(f, 1):
        m = decl.match(line)
        if m:
            seen[m.group(1)].append(n)
for name, lines in sorted(seen.items()):
    if len(lines) > 1:
        print(f"{name}: {', '.join(map(str, lines))}")
PY

echo '== Documentation coverage references in repository configuration and scripts =='
rg -n -i -C 3 \
  '(docstring|documentation)[ _-]?(coverage|cover)|doc-coverage|typedoc|api[ _-]?extractor' \
  . \
  -g '!node_modules/**' -g '!dist/**' -g '!build/**' -g '!coverage/**' \
  || true

echo '== Package scripts relevant to docs/coverage =='
if [ -f package.json ]; then
  rg -n -C 2 '"[^"]*(doc|coverage)[^"]*"\s*:' package.json || true
fi

Length of output: 24525


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Changed test range =='
sed -n '115,225p' tests/providers/opencode-go-session-header.test.ts | nl -ba -v 115

echo '== PR diff for the test file =='
git diff "$(git merge-base HEAD origin/dev)" HEAD -- tests/providers/opencode-go-session-header.test.ts || true

echo '== TypeScript configuration candidates =='
fd -HI '^tsconfig.*\.json$|^biome\.jsonc?$|^eslint\.config\.' . -E node_modules -E dist -E build \
  | while IFS= read -r f; do
      echo "--- $f"
      sed -n '1,240p' "$f"
    done

echo '== PR `#4050` comments and reviews containing parse or docstring terms =='
gh api --paginate repos/lidge-jun/opencodex/issues/4050/comments \
  --jq '.[] | select((.body | test("duplicate|parse|docstring|coverage"; "i"))) | {user: .user.login, created_at, body}' \
  || true
gh api --paginate repos/lidge-jun/opencodex/pulls/4050/comments \
  --jq '.[] | select((.body | test("duplicate|parse|docstring|coverage"; "i"))) | {user: .user.login, path, line, original_line, body}' \
  || true
gh api repos/lidge-jun/opencodex/pulls/4050/reviews \
  --jq '.[] | {user: .user.login, state, submitted_at, body}' \
  || true

Length of output: 1526


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Changed test range =='
awk 'NR >= 115 && NR <= 225 { printf "%d:%s\n", NR, $0 }' \
  tests/providers/opencode-go-session-header.test.ts

echo '== PR diff for the test file =='
base="$(git merge-base HEAD origin/dev 2>/dev/null || true)"
if [ -n "$base" ]; then
  git diff "$base" HEAD -- tests/providers/opencode-go-session-header.test.ts
else
  echo 'Could not determine merge base with origin/dev.'
fi

echo '== TypeScript and lint configuration candidates =='
fd -HI '^tsconfig.*\.json$|^biome\.jsonc?$|^eslint\.config\.' . \
  -E node_modules -E dist -E build \
  | while IFS= read -r f; do
      echo "--- $f"
      sed -n '1,240p' "$f"
    done

echo '== Package scripts =='
sed -n '1,130p' package.json

echo '== PR `#4050` comments and reviews with relevant terms =='
gh api --paginate repos/lidge-jun/opencodex/issues/4050/comments \
  --jq '.[] | select((.body | test("duplicate|parse|docstring|coverage"; "i"))) | {user: .user.login, created_at, body}' \
  || true
gh api --paginate repos/lidge-jun/opencodex/pulls/4050/comments \
  --jq '.[] | select((.body | test("duplicate|parse|docstring|coverage"; "i"))) | {user: .user.login, path, line, original_line, body}' \
  || true
gh api repos/lidge-jun/opencodex/pulls/4050/reviews \
  --jq '.[] | {user: .user.login, state, submitted_at, body}' \
  || true

Length of output: 25148


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='cfff026d58c4d6e894214cbec5248d70d759ba7f'

echo '== Name and function-level diff =='
git diff --unified=20 "$base" HEAD -- \
  src/server/claude-messages.ts \
  src/server/responses/core.ts \
  tests/providers/opencode-go-session-header.test.ts

echo '== Source outlines =='
ast-grep outline src/server/claude-messages.ts --items all || true
ast-grep outline src/server/responses/core.ts --items all || true
ast-grep outline tests/providers/opencode-go-session-header.test.ts --items all || true

echo '== Function declarations near changed lines =='
for f in src/server/claude-messages.ts src/server/responses/core.ts tests/providers/opencode-go-session-header.test.ts; do
  echo "--- $f"
  git diff --unified=0 "$base" HEAD -- "$f" \
    | awk '
        /^@@/ { print }
        /^[+-][^+-]/ { print }
      '
done

Length of output: 57524


@david-wang-0, I cannot identify a duplicate declaration because none exists in the reviewed test source.

The merge-risk paragraph is incorrect. It should not state that the regression suite cannot parse.

Evidence at ee9a86c0950763c9fe064abe22c6219e039c016f:

  • tests/providers/opencode-go-session-header.test.ts imports spyOn once at Line 1.
  • The file has no repeated top-level declaration.
  • The added matrix uses nested lexical scopes at Lines 124–186. Repeated local names such as requests, config, and entropy are inside separate test callbacks or loop iterations.
  • The published review gives no identifier, line, TypeScript diagnostic, or parser output for its contrary claim.
  • Your focused test result for blob 4171ef00a85a0a115d551ce551681dc37056ec32 is consistent with this inspection.

The corrected paragraph is:

The affinity behavior appears well targeted. The added regression matrix has no identified duplicate declaration or parse failure. Run the normal required checks before merging.

The advisory Docstring Coverage result is also not actionable as published. It reports only an aggregate: three analyzed functions, 66.67% coverage, and one unsupported item. It does not identify the functions, source lines, or the unsupported syntax. The repository has no docstring-coverage script or configuration that can reproduce its function-level mapping.

The only plausible changed production function without a preceding JSDoc block is handleClaudeMessagesWithBudget in src/server/claude-messages.ts at Line 635. This is not a confirmed coverage finding. The modified applyFinalRouteRequestNormalization function has an existing docstring beginning at src/server/responses/core.ts Line 2304. The new HandleResponsesOptions.claudeGoAffinity field has a doc comment at Line 1655.

Therefore, I withdraw both implications that there is a known test parse failure and that the aggregate docstring percentage identifies a concrete missing contract. 🐇

You are interacting with an AI system.

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

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants