CI가 초록색이어도 글이 공개된 것은 아니다.
SEOJing study 발행에서 GitHub Actions 성공과 실제 공개 readback 사이에 backend ingest/readback gate가 필요하다는 것을 정리합니다.
새 study 글을 쓰고, 포맷을 맞추고, lint와 build를 통과시키고, GitHub Actions까지 초록색으로 끝났다. 여기까지만 보면 발행은 성공한 것처럼 보인다. 그런데 실제 글 URL은 404였다.
이 지점이 중요했다. CI가 통과했다는 말은 repository와 build pipeline이 깨지지 않았다는 뜻이지, 사용자가 읽는 route가 실제로 글을 돌려준다는 뜻은 아니었다. 오케이징은 이 차이를 운영 기준으로 분리해야 했다.
이번 경우 새 글 MDX는 main에 있었고 deploy도 끝났다. 하지만 study route는 backend article API가 가진 publish 상태와 맞물려 있었다. 그래서 MDX 파일만 추가되어서는 충분하지 않았다. backend DB에 해당 글이 publish 상태로 들어가야 public API와 canonical page가 같이 살아난다.
결국 복구는 단순했다. 새 Day 7 글 두 개를 pnpm mdx:ingest --write-db --publish 경로로 backend DB에 반영하고, 그 다음 API와 페이지를 다시 읽었다.
그제야 route readback이 통과했다.
MDX 작성
→ format / lint / build
→ deploy
→ backend article ingest + publish
→ public API readback
→ canonical page readback
이 순서에서 마지막 세 단계가 빠지면, GitHub Actions가 성공해도 실제 독자는 글을 못 읽을 수 있다.
예전에는 "build 성공"이 꽤 강한 신호였다. 정적 페이지 중심이라면 그럴 수 있다. 하지만 SEOJing은 이제 콘텐츠, Worker, backend article API, public route가 같이 움직인다. 그러면 검증도 하나의 초록불로 묶으면 안 된다.
| 경계 | 통과했다는 뜻 | 부족한 점 |
|---|---|---|
pnpm lint/build | 코드와 콘텐츠가 빌드된다 | 공개 route는 모른다 |
| GitHub Actions Deploy | Worker 배포가 끝났다 | backend DB publish 상태는 모른다 |
| article API readback | backend가 글을 돌려준다 | canonical page 조립은 별도다 |
| canonical page readback | 사용자가 읽는 URL이 살아 있다 | 내용/title 확인까지 해야 안전하다 |
오케이징 입장에서는 이 표가 포스트 발행 workflow의 checklist가 된다. 어느 경계가 실패했는지 알아야 다음 행동도 달라진다. build가 깨졌으면 MDX나 코드 문제고, deploy가 실패했으면 Worker나 Cloudflare 문제고, API readback만 실패하면 ingest 문제일 가능성이 높다.
이번 dual-study workflow는 반복 trace가 쌓였다. 하지만 trace가 늘었다는 이유만으로 더 과감하게 자동화하면 안 된다. 오히려 Day 6에는 Worker size limit이 있었고, Day 7에는 backend ingest 누락으로 404가 났다. 반복되고 있다는 사실보다 더 중요한 것은 실패 모양이 구체화되고 있다는 점이다.
그래서 다음 단계는 모델 학습이나 더 큰 자율성이 아니다. 먼저 publish checklist와 regression eval을 만들어야 한다.
이 정도가 되어야 "발행했다"고 말할 수 있다. 오케이징의 Hermes Report도 같은 기준을 따라야 한다. commit과 CI만 보고 끝내면, 실제 공개 상태를 과장하게 된다.
이 사건은 작은 배포 장애처럼 보이지만, 오케이징의 진화 그래프에서는 꽤 명확한 노드다.
SEOJing dual study publishing workflow
→ SEOJing article API ingest/readback gate
→ Verification / Hermes Report
이 노드는 "CI가 통과했다"와 "사용자가 읽을 수 있다"를 분리한다. 개인 AI 운영체계가 실제 작업을 맡으려면 이런 경계를 계속 세분화해야 한다. 초록색 로그 하나에 기대는 대신, 사용자가 받는 결과물의 경계까지 읽어야 한다.
오늘의 결론은 단순하다. 오케이징은 글을 쓸 수 있게 된 것이 아니라, 글이 정말 공개됐는지 의심하고 확인하는 쪽으로 조금 더 성숙했다.
Post Q&A
CI가 초록색이어도 글이 공개된 것은 아니다 전체를 기준으로 질문과 피드백을 받아요.답을 본 뒤에는 이 내용을 댓글로 달아서 서징에게도 물어볼 수 있어요. 작성자가 직접 볼 수 있어요!
SEOJing study 발행에서 GitHub Actions 성공과 실제 공개 readback 사이에 backend ingest/readback gate가 필요하다는 것을 정리합니다.
오케이징의 리뷰 루틴이 모든 것을 막는 검문소가 아니라, 위험도와 변경 범위에 맞게 증거를 요구하는 smart reviewer가 되어야 한다는 기준을 정리합니다.
오케이징이 반복 승인 피로를 줄이면서도 위험한 행동을 자동화하지 않기 위해, 승인을 세션 범위와 위험도 기준으로 나눠야 했던 이유를 정리합니다.
반복되는 에이전트 작업을 바로 파인튜닝으로 넘기지 않고, source-linked workflow trace와 평가 기준부터 모으기로 한 이유를 정리합니다.
오케이징 포스트가 루트에 흩어지고 밀리기 시작했을 때, 새 글을 쓰는 문제보다 먼저 글감·폴더·시간순 맥락을 회수해야 했던 이유를 정리합니다.
Codex goal 정책을 보면서 오케이징의 승인 피로를 줄이는 방향을 다시 잡았다. 핵심은 중간 컨트롤을 늘리는 게 아니라 요구사항, 선택지, 안전 승인 경계를 분리하는 것이었다.
Jing Studio에서 MSW mock API를 단순 목업 도구가 아니라 백엔드 요구사항 분석과 DTO 정리를 위한 실행 가능한 계약으로 다루게 된 과정을 정리합니다.
오케이징이 작업 결과를 한국어 Hermes Report 형식으로 남기게 된 이유와, 보고가 단순 요약이 아니라 인수인계 문서가 되는 과정을 정리합니다.
오케이징이 일반 대화와 실제 작업 요청을 어떻게 구분하는지, 티켓 생성 판단 기준을 정리합니다.
Discord thread만으로는 부족했던 작업 상태를 로컬 SQLite 티켓 시스템으로 남기게 된 이유를 정리합니다.
오케이징이 Discord에서 자연어 대화 공간과 실제 작업 추적 공간을 분리한 이유를 정리합니다.
헤르메스가 Discord 게이트웨이에 직접 연결됐고, 작업 흐름이 채팅에서 포럼 티켓으로 바뀌었습니다. 오케이징 관점에서 이 두 가지 변화가 뭘 의미하는지를 기록합니다.
Discord 게이트웨이 대신 md 파일 기반 독립 worker 구조로 전환했습니다. 오케이징이 task.md를 만들면 헤르메스가 구현하고 낫징이 리뷰합니다. 채팅을 거치지 않습니다.
멀티 에이전트 시스템에는 여러 조율 패턴이 있습니다. 오케이징 팀이 어떤 구조들을 검토했고 왜 티켓 기반 구조를 선택했는지, 그 장단점을 기록합니다.