GitHub Agentic Workflows CI failure analysis read-only test — 2026-06-15
요약 3줄
wiki/work/resources/github-agentic-workflows-template-v0.1.md의 Template B — CI Failure Analysis 하나만 선택해 테스트했다.
sandbox repository /home/administrator/projects/jyp-github-workflow-sandbox-ci에 sample issue/log/diff를 만들고, label·assignment·comment·rerun 없이 read-only 분석만 수행했다.
분석 결과는 code_change 가능성이 높으며, 실제 write 단계는 모두 approval_required로 남겼다.
작업 계약
Goal: GitHub Agentic Workflows 설계 템플릿의 JYP Labs 적용 순서 1~3단계를 read-only로 1회 실행해 검토 가능한 OMW note를 남긴다.
Context:
설계 문서: wiki/work/resources/github-agentic-workflows-template-v0.1.md
선택 템플릿: Template B — CI Failure Analysis
sandbox repo: /home/administrator/projects/jyp-github-workflow-sandbox-ci
sample inputs: samples/sample-issue.md, samples/ci-failing-log.txt, samples/sample.diff
Boundaries:
자동 가능: sandbox 파일 생성, local test 실행, log/diff 읽기, OMW note 저장
승인 필요: GitHub draft comment, workflow rerun, label 적용, assignee 지정, fix commit push
금지: 실제 GitHub issue/PR/workflow에 write side effect 발생
Validation:
python3 -m pytest -q로 sample CI failure 재현
sample log/diff read-back
OMW note 작성 후 omw fields와 touched-file lint 확인
Stop:
완료: read-only 분석 결과가 OMW note로 저장되고 승인 경계가 명시됨
반려/중단: 근거가 log/diff와 연결되지 않거나 민감 정보가 포함됨
에스컬레이션: 실제 GitHub comment/rerun/label/assignment 요청 시 대표님 승인 필요
준비한 sample 입력
입력 경로 내용 Sample issue /home/administrator/projects/jyp-github-workflow-sandbox-ci/samples/sample-issue.mdtimeout default 변경 후 pytest 실패를 설명하는 mock issue Sample log /home/administrator/projects/jyp-github-workflow-sandbox-ci/samples/ci-failing-log.txttests/test_api_client.py::test_timeout_default 실패 로그Sample diff /home/administrator/projects/jyp-github-workflow-sandbox-ci/samples/sample.diffget_timeout_default()가 15를 반환하도록 바뀐 diff와 requests dependency bump
실행 명령 결과
명령 결과 근거 git init + baseline commitsuccess sandbox repo HEAD cd7cb4f 생성 git diff --statsuccess pyproject.toml, tests/test_api_client.py 변경 확인python3 -m pytest -qexpected failure FAILED tests/test_api_client.py::test_timeout_default - assert 15 == 10sample inputs read-back success issue/log/diff 파일 내용을 확인
Template B Output Schema 적용 결과
ci_failure_analysis :
run_id : sandbox-local-2026-06-15-0958-kst
failing_job : pytest
suspected_cause : code_change
confidence : high
evidence :
- "samples/ci-failing-log.txt:7-13 — assert get_timeout_default() == 10, but 15 was returned"
- "samples/sample.diff:19-25 — get_timeout_default() introduced with return 15; test still expects 10"
- "local pytest output — FAILED tests/test_api_client.py::test_timeout_default - assert 15 == 10"
recommended_next_checks :
- "Decide whether the intended timeout default is 15 or the test expectation should remain 10."
- "If 15 is intended, update the test/spec/docs together after approval."
- "If 10 is intended, revert or adjust the code path returning 15 after approval."
- "Treat pyproject dependency bump as unrelated unless additional failing logs implicate requests."
safe_next_action : ask_owner
approval_required :
- rerun_workflow
- push_fix
- modify_ci_config
- post_github_comment
판정
항목 판정 근거 원인 후보 code_change실패값 15가 diff에서 새로 추가된 return 15와 직접 연결됨 confidence high local pytest와 sample log가 같은 assertion mismatch를 가리킴 flake 가능성 낮음 시간·네트워크·순서 의존 로그가 없고 결정적 assertion mismatch임 dependency 가능성 낮음/확인 필요 requests==2.32.0 변경은 있으나 실패 지점은 dependency import 없이 local function assertion임안전한 다음 액션 ask_ownertimeout 기본값 15가 의도인지 제품 판단이 필요함
Human review 요청 항목
대표님 또는 담당자가 아래를 표시하면 다음 루프 정확도 평가에 쓸 수 있다.
오탐 여부: code_change 판정이 맞는가?
누락 여부: dependency bump 또는 CI 환경 요인을 더 봐야 하는가?
권장 액션: timeout 기본값을 15로 바꾸는 것이 의도인가, 테스트 기대값 10이 맞는가?
draft comment 확장 여부: 같은 유형 테스트가 3회 이상 안정적으로 맞은 뒤 진행한다.
승인 경계
이번 실행에서는 GitHub label, assignment, comment, workflow rerun, CI config 변경, fix commit push를 하지 않았다.
GitHub draft comment 단계는 3회 이상 안정성 확인 후 확장한다.
실제 label/assignment/workflow rerun은 별도 승인 전까지 금지한다.
원시 출력 요약
$ python3 -m pytest -q
F [100%]
FAILED tests/test_api_client.py::test_timeout_default - assert 15 == 10
1 failed in 0.02s
$ git diff --stat
pyproject.toml | 2 +-
tests/test_api_client.py | 6 +++++-
2 files changed, 6 insertions(+), 2 deletions(-)