Skip to content

fix(scheduler): 자격 증명 및 Actions 테스트 계약 복구 - #2029

Open
seonghobae wants to merge 3 commits into
fix/stacked-python-runtime-review-triggersfrom
codex/scheduler-credential-fixture-repair
Open

fix(scheduler): 자격 증명 및 Actions 테스트 계약 복구#2029
seonghobae wants to merge 3 commits into
fix/stacked-python-runtime-review-triggersfrom
codex/scheduler-credential-fixture-repair

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

변경

부모 #2002/#2003/#2004의 안전 계약을 보존한 스케줄러 테스트 수리입니다. 부모가 선택 토큰과 workflow 비교 토큰에 서로 다른 합성 값을 넣는 수정을 승계했습니다. 이 PR에는 취소 테스트 대역의 keyword-only stdin=None 검증 및 반환 계약, AGENTS.md 재발 방지 절차가 남습니다. 운영 코드는 변경하지 않습니다.

현재 검증

현재 HEAD ab61ec2. 부모 9fb02c92ef680710cd4737746b719f77cfd97cd5를 일반 병합하면서 동일 fixture 변경의 충돌을 해결했습니다. 부모의 합성 토큰 값을 받아들이고 이 PR의 엄격한 stdin 검증과 AGENTS.md는 유지했습니다. Actions 환경 및 -W error에서 스케줄러 334 passed / 44.35s, 종료 코드 0입니다. 현재 HEAD의 hosted 검사·리뷰는 별도 확인이 필요합니다.

이전 검증과 시각 검수

최초 부모 14f7c85에서 #2005의 15개 실패를 모두 재현했습니다. 이전 eb79481 HEAD에서는 관련 383개 로컬 검사 및 hosted run 34177963509의 2989 passed, 1 skipped, 21 subtests가 있었습니다. 이는 이전 수정본의 기록이며 새 HEAD의 전체 통과로 주장하지 않습니다.

AGENTS.md 새 문단은 실제 Edge 1897×969 화면에서 잘림과 겹침 없이 확인했습니다. 이번 부모 병합에서 해당 문서는 바뀌지 않았습니다. 근거: #2029 (comment)

실패 원인과 남은 일

이전 eb79481의 CodeQL은 분석 성공 상태 게시 후 exact-job 재시작이 경합했습니다. #2028 및 후속 #2032에서 처리합니다. Noema job 101911618506은 실제 gateway HTTP 502, phase=response_error, served_model=unknown으로 실패했습니다. 공급자 원인은 아직 증명하지 못했습니다. OpenCode job 101912771784는 해당 head의 APPROVED 또는 CHANGES_REQUESTED 리뷰 미도착으로 실패했습니다.

#2005의 inventory 생략 변경을 대체하지 않습니다. 독립 리뷰·필수 검사·보호 병합·배포는 미완료입니다.

Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: e6529ce1-2529-4bbc-8f74-6307a689afb1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Visual Inspection 완료: exact eebcc79a7ff6e099e0c7fd2fbfabbf9908ea80ec의 AGENTS.md를 실제 Edge Preview에서 열고 마지막 Scheduler credential fixtures 문단 전체를 확인했습니다. 1897px desktop 화면에서 3줄 모두 보이며 잘림·겹침이 없습니다. 최초 탭 생성 관찰은 시간 초과됐으나 기존 생성 탭을 재확인해 복구했고 최종 스크린샷은 정상 수신했습니다. 이는 문서 렌더링 검증이며 hosted 검사나 독립 승인을 대체하지 않습니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

현재 HEAD eebcc79a7ff6e099e0c7fd2fbfabbf9908ea80ec의 hosted 통합 CI가 completed/success로 종료됐습니다. Run 34176884415, job 101907942917: review-repair 단계 2980 passed, 1 skipped, 21 subtests / 91.23s; 대상 coverage 100%, interrogate 100%; workflow 계약 16 passed / 0.20s. 이전 부모의 15개 실패가 있었던 통합 단계가 이번 실제 Actions에서 통과했습니다. skip 1개 및 이 workflow가 선택하지 않은 검사 범위는 완료 주장에 포함하지 않습니다. 독립 리뷰·CodeQL terminal verdict·나머지 필수 검사와 보호 병합은 별도입니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

후속 CodeQL 범위 확인: 현재 eebcc79a의 codeql-dispatch/actions는 run34177078251에서 success이며 REQUIRED_JOBS에 actions job101908014186만 포함됩니다. Python job101908014233의 실제 로그는 DISPATCH_OUTCOME=success/VERDICT_STATE=pending 후 exit1입니다. 조회한 최신 repository_dispatch 목록에서는 같은 PR의 이전 run34176927124가 cancelled이고 추가 Python 실행은 찾지 못했습니다(최근100개 범위, 전체 부재 단정 아님). 따라서 actions 성공을 Python 완료로 승계할 수 없습니다. 언어별 dispatch가 같은 PR concurrency에서 서로 취소하는지 중앙 source 확인이 필요합니다. 현재 임의 rerun은 하지 않았습니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

CodeQL 혼합 버전 원인 확인: 이 PR의 codeql-pr.yml은 부모14f7과 동일한 구형 per-language dispatch caller입니다. 반면 실제 receiver78a4937의 codeql-scan-dispatch.yml은 병합된 #2008의 PR 단위 concurrency를 사용하며 legacy scalar payload도 허용합니다. 따라서 구형 caller가 같은 HEAD에 보낸 언어별 dispatch는 서로 독립적이지 않습니다. 실제 관측은 이전 run34176927124 cancelled, 후속34177078251 actions-only success, Python terminal status 부재입니다. #2008의 full-matrix caller와 receiver를 같은 계약으로 맞추는 부모 stack 정상 통합이 필요합니다. language suffix 복원이나 코드 스캔 면제로 우회하지 않으며 #2029 fixture delta는 보존합니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

main78a4937를 일반 merge로 통합해 구형 CodeQL caller/신형 receiver 혼합을 해소했습니다. 현재 HEAD eb79481. 부모2002/2003/2004 및 fixture 수정 delta는 모두 보존했습니다. 변경 없는 해당 HEAD에서 GITHUB_ACTIONS=true, -W error로 scheduler + CodeQL PR/dispatch + runner-image + docs-only admission 계약 383 passed / 203.87s / exit0를 확인하고 정상 push했습니다. 이전 eebcc79의 hosted2980pass를 새 HEAD의 원격 증거로 승계하지 않습니다. 이제 새 full-matrix dispatch가 모든 언어 terminal verdict와 각 required job wake를 완료하는지 실제 hosted 검증이 필요합니다.

@seonghobae seonghobae added bug Something isn't working priority: medium Normal-priority or P2 work labels Sep 8, 2026 — with ChatGPT Codex Connector

Copy link
Copy Markdown
Contributor Author

Fresh exact-head CodeQL RCA for eb79481bc1696c63273b6c2ca22b5e34f68d0208 (2026-09-08 UTC). This is a central owner defect, not evidence that the scheduler fixture delta regressed.

Required run 34177963535 dispatched both languages to central child 34178442472. Both scans, SARIF gates, artifact uploads, and terminal status publications succeeded. The actions shard woke the shared required run; the Python shard then failed the second wake with The workflow run containing this job is already running (HTTP 403). Attempt 2 consequently exists, so do not manually rerun or churn this head.

There is also a producer/consumer identity mismatch: each target-app status POST failed Resource not accessible by integration (HTTP 403), then the same-repository github-token fallback published the status as github-actions[bot]. The current leaf consumer accepts only opencode-agent[bot], and attempt-2 action job 101912769865 therefore failed without an authenticated terminal verdict.

Canonical repair remains #190251c9df5. Its run-wide settlement delta addresses the sibling-wake race, but the same-repository producer identity contradiction is now an exact-head P1 finding there. Keep #2029's fixture/source delta intact and out of merge until that owner repair lands on protected main and this unchanged head is revalidated. No status synthesis, broad bot allowlist, permission weakening, head churn, or blind rerun.

Copy link
Copy Markdown
Contributor Author

Current stacked-base finding on exact eb79481bc1696c63273b6c2ca22b5e34f68d0208: live parent #2004 is now 9fb02c92ef680710cd4737746b719f77cfd97cd5, while the two heads have diverged from merge base 14f7c85ca56be3297fa4d090d39d487d7be9bf14 (behind_by=7, ahead_by=2). GitHub reports this PR non-mergeable, and the overlap includes both CodeQL workflows/contracts plus the scheduler fixtures.

Please reconcile the current #2004 parent into this existing writer by ordinary two-parent merge/non-force update, preserving #2029's credential-fixture repair and the parent's seven newer commits. Then reacquire exact-head review and Checks; do not transfer 34177963509 or the predecessor CodeQL statuses. The current CodeQL failure is separately evidenced by attempt-2 rejecting github-actions[bot] receipts after the App status POST 403 and is being repaired at canonical owner #2028; do not resolve it with a no-op push, broad creator allowlist, self-approval, or bypass.

@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

  • .github/workflows/codeql-pr.yml — GitHub Actions review job
  • .github/workflows/codeql-scan-dispatch.yml — GitHub Actions review job
  • AGENTS.md — repository behavior
  • docs/adr/0025-codeql-required-workflow-dispatch-architecture.md — operator or user guidance
  • tests/test_codeql_pr_workflow_contract.py — regression suite
  • tests/test_codeql_scan_dispatch_workflow_contract.py — regression suite
  • tests/test_docs_only_pr_runner_admission.py — regression suite
  • tests/test_pr_review_merge_scheduler.py — regression suite
  • tests/test_scheduler_and_codeql_dispatch_runner_image_contract.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: codeql-pr.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: codeql-pr.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: codeql-scan-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> R2["Review risk: Workflow: codeql-scan-dispatch.yml"]
  R2 --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: AGENTS.md"]
  S3 --> I3["repository behavior"]
  I3 --> R3["Review risk: Repository file: AGENTS.md"]
  R3 --> V3["required checks"]
  Evidence --> S4["Docs: 0025-codeql-required-workflow-dispatch-architecture.md"]
  S4 --> I4["operator or user guidance"]
  I4 --> R4["Review risk: Docs: 0025-codeql-required-workflow-dispatch-architecture.md"]
  R4 --> V4["docs review"]
  Evidence --> S5["Test: test_codeql_pr_workflow_contract.py (5 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test: test_codeql_pr_workflow_contract.py (5 files)"]
  R5 --> V5["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: eb79481bc1696c63273b6c2ca22b5e34f68d0208
  • Workflow run: 34178631125
  • 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["Workflow: codeql-pr.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: codeql-scan-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: AGENTS.md"]
  S3 --> I3["repository behavior"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["required checks"]
  Evidence --> S4["Docs: 0025-codeql-required-workflow-dispatch-architecture.md"]
  S4 --> I4["operator or user guidance"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["docs review"]
  Evidence --> S5["Test: test_codeql_pr_workflow_contract.py (5 files)"]
  S5 --> I5["regression suite"]
  I5 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V5["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Sep 8, 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.

Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

충돌 복구 후 현재 ab61ec2 / 부모 9fb02c92를 재조회했습니다. GitHub는 MERGEABLE, mergeStateStatus=UNSTABLE이며 승인·필수 검사 완료를 뜻하지 않습니다. 이전 Noema artifact 10038393258을 직접 확인한 결과 gateway preflight는 ready였고 후보24/ready2/target8/probed16/rejected12/deferred2/skipped4였습니다. NIM 두 계정에서 각각 TimeoutError4 및 HTTP404 2개, OpenRouter HTTP429 2개가 기록됐습니다. 이후 실제 요청은 451.1초 뒤 HTTP502로 실패했습니다. stderr에는 약90초 간격 TimeoutError가 반복되지만 공급자 종료인지 내부 timeout인지 아직 입증하지 못했습니다. 준비 점검 ready를 실제 리뷰 성공으로 해석하지 않습니다. 원본 artifact: https://github.com/ContextualWisdomLab/.github/actions/runs/34177960954/artifacts/10038393258

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-head restack review: the non-force two-parent reconciliation now preserves both sides of the previously incomplete succession. Relative to current parent #2004@9fb02c92…, #2029 retains the four-line AGENTS recurrence rule and all three callable fixtures assert keyword-only stdin is None, while inheriting the host-scoped distinct-credential repairs. No new substantive finding in this reconciliation delta. This is not approval or merge authority: #2004 and its prerequisites are still Draft, current-head checks are queued, and the protected-main CodeQL provenance defect is being repaired in #1902. Keep #2029 alive and do not merge ahead of its parent stack.

@seonghobae

Copy link
Copy Markdown
Contributor Author

90초 제한의 코드 출처를 확인했습니다. 이 Noema job 실제 로그에 CO pin414f22973658c4ddc3d4320fcf7acd9b4e8ba991이 기록돼 있고, 해당 소스 ModelClient 생성자의 timeout 기본값90이 _open_provider의 HTTPConnection/HTTPSConnection 및 _connect_validated의 socket.settimeout으로 전달됩니다. 중앙 launcher의 두 ModelClient 생성자는 timeout을 지정하지 않습니다. 따라서 해당 소비자 실행에 암묵적 내부90초 제한이 존재한다는 점은 확인됐습니다. 마지막 HTTP502의 직접 원인이 이것만이라는 주장은 하지 않습니다. 기존 owner 수정 ContextualWisdomLab/contextual-orchestrator#1053에 실행·artifact·source 근거를 전달했습니다: ContextualWisdomLab/contextual-orchestrator#1053 (comment) . owner 보호 병합·release 후 중앙 pin 채택과 실제 runtime 검증이 남습니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head hosted verification refreshed: Agent Review Runtime Quality run 34182594520 / job 101924511318 completed SUCCESS on ab61ec2. Direct job log at 2026-09-08T03:24:51Z reports 2989 passed, 1 skipped, 21 subtests passed in 97.51s; the configured coverage scope reached 100%. The separate consolidated-workflow contract reported 16 passed. This replaces the earlier eb794-only runtime-quality receipt for the current head; it is not a claim that all required security/review checks have converged or that deployment has occurred. Remaining current-head checks were still queued in the latest rollup.

Copy link
Copy Markdown
Contributor Author

Exact-head CodeQL RCA for ab61ec247ddcbc92aea3116687f4e9d070cbb4a4:

  • Run 34182594620 is now terminal FAILURE. Both compatibility jobs ended with VERDICT_STATE=pending and the explicit fail-closed message that the dispatch workflow must publish a terminal verdict and rerun the exact failed job.
  • Coordinator job 101929883274 subsequently completed SUCCESS. Its log binds target_repository=ContextualWisdomLab/.github, PR 2029, base 9fb02c92ef680710cd4737746b719f77cfd97cd5, head ab61ec247ddcbc92aea3116687f4e9d070cbb4a4, required run 34182594620, and the actions+python matrix before posting the canonical repository dispatch.
  • Security Scan, SAST Semgrep, Python Security, and Agent Review Runtime Quality CI remain SUCCESS on this exact head. This is therefore a missing terminal receipt/rerun in the central CodeQL path, not evidence of a leaf scheduler-fixture defect.

Canonical repair remains .github #1902, currently Draft at 1a3133f5efd147bc6892a2920749bf103f4683da with its mixed-verdict recovery finding under active repair. No source mutation, empty retrigger, manual rerun, or predecessor evidence transfer was performed here.

@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

  • AGENTS.md — repository behavior
  • tests/test_pr_review_merge_scheduler.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Repository file: AGENTS.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: AGENTS.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_pr_review_merge_scheduler.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_pr_review_merge_scheduler.py"]
  R2 --> V2["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: ab61ec247ddcbc92aea3116687f4e9d070cbb4a4
  • Workflow run: 34183596351
  • 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: AGENTS.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: AGENTS.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_pr_review_merge_scheduler.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_pr_review_merge_scheduler.py"]
  R2 --> V2["targeted test run"]
Loading

@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

  • AGENTS.md — repository behavior
  • tests/test_pr_review_merge_scheduler.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Repository file: AGENTS.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: AGENTS.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_pr_review_merge_scheduler.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_pr_review_merge_scheduler.py"]
  R2 --> V2["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: ab61ec247ddcbc92aea3116687f4e9d070cbb4a4
  • Workflow run: 34187360399
  • 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: AGENTS.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Repository file: AGENTS.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_pr_review_merge_scheduler.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_pr_review_merge_scheduler.py"]
  R2 --> V2["targeted test run"]
Loading

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

Labels

bug Something isn't working priority: medium Normal-priority or P2 work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant