Skip to content

fix(coverage): unblock org-wide OpenCode approval + docs(gaps) corrections - #1438

Open
seonghobae wants to merge 50 commits into
mainfrom
claude/noema-contextualwisdomlab-commercialization-afow1j
Open

fix(coverage): unblock org-wide OpenCode approval + docs(gaps) corrections#1438
seonghobae wants to merge 50 commits into
mainfrom
claude/noema-contextualwisdomlab-commercialization-afow1j

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Exact current identity and evidence

  • exact head: 18987a7191f070fdcb134d5feb96a07442c39a98
  • protected base: main@1ff8268255b061461d9d49b4cab4febf9a8e7bfa
  • current delta remains six files: .gitignore, CHANGELOG.md, docs/product-technical-gap-baseline.md, scripts/ci/contextual_orchestrator_review_sidecar.sh, and two sidecar tests.
  • scripts/ci/pingora_edge_policy.py is not in the current diff. The earlier coverage-fix narrative below is historical and must not be treated as this PR's current source delta.
  • current-head generated Security Scan, SAST, CodeQL, Python Security, OSV, SBOM, secret, Scorecard, readiness quality, and Strix changed-path quality workflows are terminal success.
  • exact-current-head required OpenCode, Noema, and Strix review/scan evidence is absent. The previous required runs belong to historical head 50febfe7a9bd74c8c33d1eef6526a33f116f5c2f and cannot satisfy this head.
  • historical Strix run 33331290092 attempt 1 verified 50febfe7, passed discovery/health/gateway preflight, then timed out after 5400 seconds and emitted STRIX_PROVIDER_UNAVAILABLE without an authoritative scan result; attempt 2 was cancelled during provisioning. This is provider/infrastructure evidence recorded on fix(ci): gate Strix's orchestrator/free access on live diversity evidence #1437, not a source finding or current-head pass.
  • current non-outdated unresolved threads: 0; exact-current-head formal approval: absent.

Original summary (docs correction + sidecar tail widening — unchanged):

  1. Docs correction (docs/product-technical-gap-baseline.md): the "2026-08-30 post-chore(fuzz): remove dead duplicate fuzz target #1486/fix(coverage): unblock org-wide OpenCode approval + docs(gaps) corrections #1438 wake" entry misdiagnosed the incident on two counts, found by a 7-agent investigation:
    • Bytez can never populate orchestrator/free regardless of its HTTP status (_parse_bytez never sets is_free) — its logged HTTP 500 changed nothing about the outcome.
    • The request_failed status=413 line is the sidecar's own unconditional offline self-test, not a live ZDR-catalog prefetch that "fell back" to anything.
    • This branch's own follow-up "correction" entry has itself been revised to defer to main's much more thorough "sidecar-preflight outage: consolidated evidence" entry as the authoritative root cause, rather than presenting this branch's own generic "two call sites, no retry" theory as confirmed for this specific incident (that mechanism is still real, just not what caused this one — see ContextualWisdomLab/contextual-orchestrator#923).
  2. SIDECAR_STDERR_TAIL_LINES: widens the sidecar's failure-path stderr tail from a fixed 20 lines to a named constant (60), complementary to (not overlapping with) main's new preflight-evidence log line — so discovery-error diagnostics can't be silently truncated alongside it.

Also includes the original §5.1 next-increment-list refresh (#1297 already merged; #1345/#1326 closed unmerged), the naruon-Noema role-clarification entry, and a CodeRabbit 10-star/rate-limit gap entry, all from earlier in this branch's history.

Verification

  • PYTHONPATH=. python -m coverage run -m pytest tests -q → 1897 passed, 1 skipped, 21 subtests, coverage TOTAL 100%.
  • python -m interrogate → 100.0%.
  • bash -n scripts/ci/contextual_orchestrator_review_sidecar.sh → syntax OK.
  • PYTHONPATH=. python -m pytest tests/test_product_technical_gap_baseline.py -q → 5 passed (doc contract markers intact).
  • PYTHONPATH=. python -m pytest tests/test_pingora_edge_policy.py -q → 61 passed.

Related

  • ContextualWisdomLab/contextual-orchestrator#923 — companion discovery-side retry fix (independent resilience improvement, not the fix for this specific incident).
  • ContextualWisdomLab/naruon#1486 — the PR whose CI run first surfaced this incident.
  • ContextualWisdomLab/.github#1398 — the owner's own in-flight, more extensive coverage-evidence/Python-lock work; this PR's dead-code fix is narrowly scoped and orthogonal to it.

Summary by CodeRabbit

  • 개선 사항

    • 오케스트레이터 사이드카가 초기화·상태 확인 실패 시 더 많은 진단 로그를 표시합니다.
    • 제공자 패밀리별 후보 상한을 확대했습니다.
  • 버그 수정

    • 커버리지 검사에서 발생하던 도달 불가능한 코드 관련 실패를 해결했습니다.
    • 잘못된 시도 횟수 값(예: "00", "0000")을 올바르게 거부합니다.
  • 문서

    • 기술적 격차 기준선과 후속 작업 상태를 최신 내용으로 갱신했습니다.
  • 테스트

    • 확장된 진단 로그와 잘못된 입력값 검증을 확인하는 테스트를 추가했습니다.

…ma increment

#1297 was already merged and #1345/#1326 were closed unmerged, but all
three were still listed as pending candidates for this loop's next pass.
Replace with current state and record this pass's actual increment:
ContextualWisdomLab/naruon#1486 adds a check_calendar_conflict tool to
naruon's noema-general-agent, reusing the existing deterministic conflict
policy instead of a second one, and clarifies that naruon's Noema and
this repo's central review-bot Noema are separate agents sharing only a
name.
@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

Review Change Stack

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0225a51e-cf5c-42ec-930e-715e4cfb5d7f

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7f4e6c61-24ed-4d56-96e4-e60877a2dde0

📥 Commits

Reviewing files that changed from the base of the PR and between 50febfe and 8a843c4.

📒 Files selected for processing (1)
  • docs/product-technical-gap-baseline.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/product-technical-gap-baseline.md

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Sidecar의 stderr 진단 출력 한도를 20줄에서 60줄로 확장했습니다. Provider-family별 catalog 후보 상한을 4에서 8로 변경했습니다. 선행 0이 포함된 잘못된 재시도 설정을 거부하고 관련 테스트와 운영 문서를 갱신했습니다.

Changes

Sidecar 진단 및 운영 기록

Layer / File(s) Summary
Sidecar 진단 출력 및 preflight 검증
scripts/ci/contextual_orchestrator_review_sidecar.sh, tests/test_contextual_orchestrator_review_sidecar_contract.py, tests/test_contextual_orchestrator_review_runtime_preflight.py
Sidecar가 세 진단 경로에서 SIDECAR_STDERR_TAIL_LINES=60을 사용합니다. Provider-family별 catalog 후보 상한을 8로 변경했습니다. 선행 0이 포함된 잘못된 REVIEW_PREFLIGHT_GATEWAY_MAX_ATTEMPTS 값을 거부합니다. 계약 테스트가 변경된 동작을 검증합니다.
사건 분석 및 후속 작업 기록
CHANGELOG.md, docs/product-technical-gap-baseline.md
Coverage 수정, preflight 원인, 리뷰 트리거 조건, 관련 PR 상태와 후속 작업을 기록했습니다.
저장소 제외 규칙
.gitignore
.claude/ 디렉터리를 Git 무시 규칙에 추가했습니다.

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

Merge Risk: 🔵 Low · up to 8a843

The change mainly improves failure diagnostics and documentation, but the sidecar still has a configuration edge case where leading-zero zero values can disable retries through an immediate failure; the PR is mergeable with explicit owner awareness and follow-up.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 3 files. (1 skipped: 1 …
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목의 docs(gaps) corrections 부분은 gap-baseline과 CHANGELOG 수정이라는 주요 변경을 정확히 설명합니다. 그러나 현재 diff에 scripts/ci/pingora_edge_policy.py 변경이 없으므로 coverageunblock org-wide OpenCode approval 표현은 변경 범위를 …
Full details: Docstring Coverage

Explanation

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

Full details: Title check

Explanation

제목의 docs(gaps) corrections 부분은 gap-baseline과 CHANGELOG 수정이라는 주요 변경을 정확히 설명합니다. 그러나 현재 diff에 scripts/ci/pingora_edge_policy.py 변경이 없으므로 coverageunblock org-wide OpenCode approval 표현은 변경 범위를 완전히 반영하지 않습니다.

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/noema-contextualwisdomlab-commercialization-afow1j

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.

Copy link
Copy Markdown
Contributor Author

opencode-review is currently failing because there is no APPROVED/CHANGES_REQUESTED review from opencode-agent at the current head yet (##[error]No APPROVED or CHANGES_REQUESTED from opencode-agent on the current head...). This is the required-check gate correctly failing closed while it waits for the separate async OpenCode dispatch to post a current-head verdict — expected for a freshly-pushed head, not a defect in this PR's diff (docs-only change to docs/product-technical-gap-baseline.md and CHANGELOG.md). No action needed; it clears once the dispatch posts, and the central queue scanner (scan-pr-queue, seen success on this same head) retries it. Keeping this PR watched.


Generated by Claude Code

naruon#1486 confirms the current sidecar pin (30c6d716...) actually
reaches a hosted PR-target run, but still fails closed with a new
signature: a non-fatal 413 on ZDR-catalog prefetch (falls back to a
live feed) followed by bytez discovery returning HTTP 500, which empties
the orchestrator/free pool the same way the already-tracked structural
gap describes. Also confirms opencode-review's gate correctly fails
closed awaiting the async dispatch verdict on fresh heads (naruon#1486,
.github#1438) — expected, not a defect.

Copy link
Copy Markdown
Contributor Author

noema-review is also failing on this PR's current head with the identical signature already documented on ContextualWisdomLab/naruon#1486 (and in docs/product-technical-gap-baseline.md): sidecar vendors the current pin 30c6d716… fine, a ZDR-catalog prefetch gets 413 request_too_large and falls back to a live OpenRouter feed (non-fatal), then the sidecar exits before /healthz — same central orchestrator/free-pool-exhaustion class, not caused by this PR's docs-only diff. Not duplicating the full write-up here; see the naruon PR and the gap baseline for details. I'm actively investigating a real fix for the underlying single-provider fragility rather than just continuing to log it — will report back here and on the gap baseline once that lands.


Generated by Claude Code

claude added 2 commits August 30, 2026 11:14
…tail

The review sidecar's live warm-up preflight already records a bounded
error_type/http_status per rejected route, but only into a JSON
artifact -- not the CI job's visible console log. That made a real
fail-closed incident impossible to diagnose as transient or not
without downloading the artifact separately, and led directly to a
misdiagnosis this pass corrects in docs/product-technical-gap-baseline.md.

Add _log_preflight_rejections (mirrors the existing _log_discovery_errors
visibility fix), a matching sanitizer allowlist entry, and widen the
failure-path stderr tail from a fixed 20 lines to a named
SIDECAR_STDERR_TAIL_LINES=60 so discovery errors plus preflight
rejections plus summary lines can no longer silently truncate.

Companion to ContextualWisdomLab/contextual-orchestrator#923, which
fixes the analogous single-shot discovery fetch. This repo's own
completion-warm-up-probe call site is deliberately left single-shot;
see that PR's description for the latency/amplification risk that
ruled out retrying it blind.
Adversarial re-investigation (triggered by direct feedback that a
single provider erroring should never fail-close org-wide review CI)
found the "2026-08-30 post-#1486/#1438 wake" entry misdiagnosed the
incident on two counts: Bytez can never populate orchestrator/free
regardless of HTTP status (_parse_bytez never sets is_free), and the
413 line is the sidecar's own unconditional self-test, not a live
ZDR-prefetch fallback -- also present in two earlier entries, flagged
here rather than hand-edited there. The actual terminating message was
"review sidecar preflight failed" (a live warm-up-probe rejection),
not the "no eligible models" path those entries claimed.

Records the real root cause (two single-shot HTTP call sites with no
retry) and the fix that follows: contextual-orchestrator#923 (discovery
retry) and this repo's own #1438 (preflight-rejection visibility +
wider stderr tail). Updates §5.1 to track both to merge.
@seonghobae seonghobae changed the title docs(gaps): refresh stale §5.1 next-increment list, record naruon Noema increment fix(sidecar): surface preflight-rejection detail; correct gap-baseline bytez misattribution Aug 30, 2026
main advanced with the owner's own parallel investigation into the
same sidecar-preflight incident this branch was fixing, with far more
precise evidence than this branch's own analysis had (actual hosted-run
preflight/discovery artifacts, not just log-pattern reading). The real
root cause turned out to be contextual_orchestrator_review_policy.py's
family_cap selecting the same alphabetically-first candidates every
run -- 2 of which are permanently-retired NVIDIA model ids returning
HTTP 404 forever, not a transient failure -- plus a too-tight gateway
smoke-test timeout and a max_tokens/probe-budget desync. All three are
already fixed on main (family_cap 4->8, gateway timeout 30s->120s,
max_tokens 16->4096).

Conflict resolution:
- CHANGELOG.md / docs/product-technical-gap-baseline.md: kept both
  sides' entries; revised this branch's own "correction" entry to
  defer to main's much more thorough "sidecar-preflight outage:
  consolidated evidence" entry as the authoritative root cause and
  fix, rather than presenting this branch's own generic
  "two call sites, no retry" theory as confirmed. That mechanism is
  still real (kept, reframed as independent/complementary), just not
  what caused this specific incident.
- scripts/ci/contextual_orchestrator_review_sidecar.sh: kept main's new
  preflight-report console dump and this branch's
  SIDECAR_STDERR_TAIL_LINES threading -- complementary, not
  overlapping.

Deliberate follow-up simplification in the same commit: dropped this
branch's own _log_preflight_rejections (launcher.py), its sanitizer
allowlist entry, and its tests -- main's own
`log "sidecar preflight route evidence: ..."` fix already surfaces the
same already-bounded-safe preflight_report JSON to the console,
achieving the same operator-visibility goal more directly. Keeping
both would have been duplicate code solving the same problem twice.

Full suite: 1897 passed, 1 skipped, 21 subtests; coverage 100% on all
touched files (pre-existing pingora_edge_policy.py:274 gap, owned by
#1398, unaffected); interrogate 100%; bash -n clean.
@seonghobae seonghobae changed the title fix(sidecar): surface preflight-rejection detail; correct gap-baseline bytez misattribution docs(gaps): correct bytez/413 misattribution; widen sidecar failure-log tail Aug 30, 2026
@seonghobae
seonghobae marked this pull request as ready for review August 30, 2026 11:28

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

claude added 2 commits August 30, 2026 11:30
…ixes

Summarizes the wakeup that found main had advanced with the owner's
own deeper investigation into the same bytez/preflight incident,
reconciled this branch's three open PRs against it (merged current
main/develop into each, dropped the now-redundant preflight-visibility
fix, marked all three ready for review), and explicitly defers
.github#1347's merge conflict to a dedicated next pass given it
overlaps a file main has independently hardened for SSRF.
… finding

naruon#1486 and contextual-orchestrator#923 both hit a PR-governance
metadata-gate block that looked like a blocking CodeRabbit finding but was
actually CodeRabbit's own "approval pending, not reviewed yet" state -- every
ContextualWisdomLab repo is below CodeRabbit's 10-GitHub-star automatic-review
threshold, so it never reviews a new commit without an explicit
@coderabbitai review trigger. Triggered both PRs manually; documents the
structural gap and a deferred central-automation candidate fix.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review


Generated by Claude Code

devin-ai-integration[bot]

This comment was marked as resolved.

claude added 2 commits August 30, 2026 11:53
Devin review on #1438 flagged two real issues in the CodeRabbit gap-baseline
entry: bare naruon#1486/contextual-orchestrator#923 references don't create
durable cross-repo links (missing the org prefix), and the claim that "every
org PR" is affected outran the evidence (only 4 repos were actually checked).
Both fixed.

Copy link
Copy Markdown
Contributor Author

opencode-review is failing on the current head (ef311a0) with ##[error]No APPROVED or CHANGES_REQUESTED from opencode-agent on the current head... — the same documented, expected wait-state already noted on ContextualWisdomLab/naruon#1486 and ContextualWisdomLab/contextual-orchestrator#923: the gate correctly fails closed until the separate async OpenCode dispatch posts a current-head verdict. Not a defect in this PR's diff. No action needed; will clear once the dispatch posts and the central queue scanner retries it.


_Generated by Claude Code


Generated by Claude Code

coderabbitai[bot]

This comment was marked as resolved.

… a fix

CodeRabbit correctly flagged that "already fixed"/"resolves" overstates the
4->8 family-cap raise: it reduces the odds of the same retired/timed-out
candidates being selected every run, but doesn't guarantee against it, and
hosted-run confirmation of the fix is still pending. Softened both the
changelog bullet and the gap-baseline correction entry to "mitigates ...
hosted confirmation remains pending".
@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

@seonghobae, I will review the changes in #1438.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode reviewed the current-head product diff. Coverage is a separate gate.

Changed files

  • CHANGELOG.md — repository behavior
  • docs/product-technical-gap-baseline.md — operator or user guidance
  • scripts/ci/contextual_orchestrator_review_sidecar.sh — review and security gate shell path
  • tests/test_contextual_orchestrator_review_sidecar_contract.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Repository file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: product-technical-gap-baseline.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: product-technical-gap-baseline.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["CI script: contextual_orchestrator_review_sidecar.sh"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script: contextual_orchestrator_review_sidecar.sh"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test: test_contextual_orchestrator_review_sidecar_contract.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_contextual_orchestrator_review_sidecar_contract.py"]
  R4 --> V4["targeted test run"]
Loading

Findings

No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.

  • Head SHA: c11b68c2e3cb4d14099c0925f4239c1ae13dc674
  • Workflow run: 33310753001
  • Workflow attempt: 1
  • Coverage gate: failure

Review outcome

Coverage is a gate, not the review. This body reviews the changed product files.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Repository file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: product-technical-gap-baseline.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: product-technical-gap-baseline.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["CI script: contextual_orchestrator_review_sidecar.sh"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script: contextual_orchestrator_review_sidecar.sh"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test: test_contextual_orchestrator_review_sidecar_contract.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_contextual_orchestrator_review_sidecar_contract.py"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment.

claude added 2 commits August 30, 2026 12:22
_load_changed_files's post-loop PolicyError at the end of the pagination
loop can never execute: 31 full 100-item pages would push the file count
past 3,000 during page 31's own iteration (30 full pages = exactly 3,000),
tripping the len(files) > 3_000 raise inside the loop before the outer
range(1, 32) can ever exhaust without an early return or that inner raise.

This dead line has been silently failing this repo's org-wide
coverage-evidence gate (fail_under=100 on scripts/ci) for every PR reviewed
through the central OpenCode/Noema/Strix dispatcher -- confirmed via live
Actions logs on multiple unrelated PRs (.github#1161, #1438) all showing
"Coverage failure: total of 99 is less than fail-under=100" at this exact
line, which in turn blocks opencode-agent from ever posting an APPROVED
verdict anywhere in the org. Marked pragma: no cover with a justification,
matching this repo's existing convention for provably-unreachable
defensive code (see other pragma: no cover sites in scripts/ci/*.py).

Verified: full suite 1897 passed, 1 skipped, 21 subtests; coverage TOTAL
100% (9966/9966 statements, 3926/3926 branches); interrogate 100%.
Consolidates a 5-agent investigation into why opencode-agent had not posted
a verdict on any of the three tracked PRs: naruon#1486 is stuck on a stale
scheduler thread-count snapshot, contextual-orchestrator#923 is missing a
cross-repo dispatch credential in its scheduler run, and .github#1438's
dispatch ran but was blocked by the pingora_edge_policy.py coverage bug
fixed in the preceding commit. Also records hosted-run confirmation that
the earlier family_cap sidecar mitigation is now working (3/3 post-fix
runs clean), while flagging a separate, still-open "healthz passes then
completion request hangs" signature on the same commit.
@seonghobae seonghobae changed the title docs(gaps): correct bytez/413 misattribution; widen sidecar failure-log tail fix(coverage): unblock org-wide OpenCode approval + docs(gaps) corrections Aug 30, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

The required strix check failed on this head (50febfe7), same signature already diagnosed on naruon#1486 earlier this session: sidecar startup and preflight both succeeded (healthz and provider-route preflight confirmed after 48s, gateway chat/completions preflight confirmed (attempt 1/3)), but the scan itself then hung — Strix run timed out after 5400sStrix run failed for model 'orchestrator/free' after 5404s (exit code 124)STRIX_PROVIDER_UNAVAILABLE: contextual-orchestrator/orchestrator/free exhausted; the gateway owns provider discovery and failover → the bounded-retry gate had only 595s of job budget left, too little to retry, so it failed closed.

Noting the escalation: this is the same "preflight passes, then the actual scan-time completions stall" sub-symptom that just hit naruon#1486 (head da816566, ~19:42–19:52 UTC) recurring here on a different repository roughly an hour later (19:4221:12 UTC). Two occurrences on two repos within about the same window points at an active, ongoing orchestrator/free pool degradation right now, not an isolated flake. Not this PR's diff — re-ran the failed job once (rerun_failed_jobs on run 33331290092); recording this in the gap-baseline doc and keeping both PRs watched.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

A second strix failure landed on the very next head (8a843c40, run 33335906496) — but this one is not the same 5400s-hang class from the comment above. Distinguishing it explicitly rather than lumping it in:

The job's own internal bounded-retry loop made 3 attempts (135s, 65s, 73s — each fast, no hang), and all three failed on the identical model: agent_id: nvidia_nim_meta_llama_3_2_90b_vision_instruct, model: meta/llama-3.2-90b-vision-instruct, same error every time:

Error code: 400 - invalid_request_error: Model 'meta/llama-3.2-90b-vision-instruct' via agent 'nvidia_nim_meta_llama_3_2_90b_vision_instruct': provider rejected the request with HTTP 400. Adjust the request parameters and retry.
detail: {'provider_status': 400, 'retryable': False, 'transport': 'passthrough'}

This repeating 3/3 on the exact same model/agent rules out transient flake — it's a deterministic selection/compatibility bug: a vision-only model (llama-3.2-90b-vision-instruct) is apparently being selected into the orchestrator/free pool for Strix's plain-text agentic chat-completion workload, and the provider correctly, deterministically rejects a non-multimodal request against it every time. This is a distinct root-cause candidate from the runtime-hang class above — likely connected to the pool's family_cap widening (4→8) pulling in a vision variant that a text-only consumer can never use successfully, with no apparent fallback-past-a-hard-400 in the routing.

Not re-running this one: since it's deterministic (not flaky), a re-run would very likely hit the same model again and fail identically — that would just burn CI time repeating already-conclusive evidence. Not this PR's diff (the model-selection/family_cap logic lives in contextual-orchestrator's discovery code, not touched here). Recording this precisely in the gap-baseline doc as a new, more actionable finding for whoever owns the free-pool model catalog — worth excluding vision-only models from pools serving text-only agentic consumers, or having the router skip past a retryable: false 400 to the next candidate instead of giving up.


Generated by Claude Code

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Fresh exact-head sidecar acceptance evidence to absorb on this current writer head 18987a7191f070fdcb134d5feb96a07442c39a98 (also recorded on #1399): Required Noema run/job 33341290448/99337282309 for #1460 exact target 2cc819a9bca2f960ef1b0e67bf2e382c1eaf6251 passed healthz and provider-route readiness after 23s, then six minutes later could not reach the local sidecar for all 3 gateway-preflight attempts and failed closed.

The present diff widens only the pre-health stderr tail and validates zero-valued retry limits; it does not expose post-ready process death. Please preserve those compatible fixes and add a deterministic RED where the sidecar passes readiness then exits before gateway preflight. The narrow repair should retain/capture process exit status plus a scrubbed bounded stderr tail on the gateway failure path. This must remain an infrastructure/provider non-pass, not a fabricated review or source finding.

…hable one in gateway preflight

When the gateway-preflight retry loop exhausted every attempt with no
usable HTTP response, it always recorded generic "transport exhausted"
evidence, even when the sidecar process itself had already exited after
passing readiness -- discarding the single most useful diagnostic (the
process's own exit status and stderr). Now checks kill -0 "$sidecar_pid"
first (safe for a bash-owned background job: a failing kill -0 means
bash's own job table has already reaped it, so the following wait
retrieves the real cached exit status -- the same pattern the
pre-existing healthz branch already used) and records distinct evidence
plus a distinct fail message when the sidecar has exited.

Reported via a cross-agent coordination comment on .github#1438,
verified against issue #1399 and PR #1460 before acting on it.
Exact-head evidence: Strix run/job 33341290448/99337282309 for
#1460 target 2cc819a.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6UJHYbfbGdHfYPjgbVhAr

Copy link
Copy Markdown
Contributor Author

Fixed and pushed (commit d8ba170a): the gateway-preflight retry loop in scripts/ci/contextual_orchestrator_review_sidecar.sh now distinguishes a sidecar process that has already exited after passing readiness from one that is merely unreachable over the network.

Previously, when every gateway-preflight attempt exhausted with no usable HTTP response, the script always recorded generic gateway_transport_exhausted evidence — discarding the sidecar's own exit status and stderr, the single most useful diagnostic for telling "still running, network/gateway problem" apart from "already crashed." This is the class of failure reported via the cross-agent coordination comment on this PR, verified against issue #1399 and PR #1460 before I acted on it — exact-head evidence there: Strix run/job 33341290448/99337282309 for ContextualWisdomLab/.github#1460 target 2cc819a9 (healthz/readiness passed at 23s, then all 3 gateway-preflight attempts failed to reach the sidecar six minutes later, with no record of whether it had died).

Fix: before recording the generic transport-exhausted evidence, check kill -0 "$sidecar_pid". Since this is a job the script's own bash process spawned, a failing kill -0 reliably means bash's own job table has already reaped it — so the following wait "$sidecar_pid" retrieves the real, cached exit status rather than attempting a fresh waitpid() on an already-gone zombie (same pattern the pre-existing healthz branch already relies on). When the sidecar has exited, the script now records distinct evidence (error_type: "sidecar_process_exited", exit status, attempt count) and fails with a message including the exit status and stderr tail, instead of the generic transport-exhausted path.

TDD: new structural contract test (test_gateway_preflight_distinguishes_a_dead_sidecar_from_an_unreachable_one) plus a new live-subprocess test (test_gateway_retry_loop_diagnoses_a_sidecar_that_died_after_readiness) that spawns a genuinely-dying child and confirms the retry loop's own wait retrieves its real exit status. Fixed 2 pre-existing-test regressions this surfaced in each of the two affected test files (assertion-scope tightening only, no invariant weakened). Verified: full suite 1935 passed/1 skipped/21 subtests, coverage 100%, interrogate 100%, bash -n OK. Documented in docs/product-technical-gap-baseline.md and CHANGELOG.md.

CI is currently running on the new head; will keep watching.


Generated by Claude Code

devin-ai-integration[bot]

This comment was marked as resolved.

…s shipped

Cross-references naruon#1486 commit 733f22cf, which applied
AttachmentReparseWorker's already-fixed dedicated-lease-connection and
starvation-free-cursor pattern to NewsdomRecognitionWorker's own
attachment and document sweeps -- the deferred candidate this doc
recorded when the reparse worker's version of these bugs was fixed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6UJHYbfbGdHfYPjgbVhAr

Copy link
Copy Markdown
Contributor Author

Independent exact-head verification for 0224535d195a6b7f7fe280b19894a64c25217edd:

  • focused sidecar/runtime-preflight suite: 85 passed
  • full central pytest suite: 1,935 passed, 1 skipped, 21 subtests
  • generated Security Scan, SAST, CodeQL, Python Security, OSV, SBOM, Secret Scan, Scorecard, commercial-readiness quality, and Strix changed-path quality are terminal success on this exact head
  • current unresolved review threads: 0
  • formal exact-head approvals: 0

The post-readiness process-death boundary is now causally typed: a dead child is reported as sidecar_process_exited with bounded scrubbed stderr and exact exit status, while a live-but-unreachable child remains gateway_transport_exhausted. This preserves fail-closed behavior and the active writer's source ownership.

This is source/test evidence only. Protected-main integration followed by an operational review canary is still required; cancelled required Strix and absent formal approval remain non-passing, so no merge is attempted.

claude and others added 3 commits August 31, 2026 04:20
…alwisdomlab-commercialization-afow1j

# Conflicts:
#	.gitignore
#	CHANGELOG.md
#	docs/product-technical-gap-baseline.md
Fold in this pass's resolution of .github#1438's dirty mergeable_state
(three-file conflict against a since-advanced main: .gitignore,
CHANGELOG.md, docs/product-technical-gap-baseline.md itself), the
ordinary merge commit ca4c5ad, and full-suite/coverage/interrogate
re-verification, plus naruon#1486's current-head Check status.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants