기계가 읽을 수 있는 실패

기계가 읽을 수 있는 실패

개요

AI에게 실패는 텍스트가 아니라 입력이다. 그래서 failure format이 애매하면, AI는 실패를 이해하기보다 주변 코드에서 다른 우회를 추측한다.

좋은 AI 작업자 하네스는 failure를 machine-readable하게 만든다.

이 문서는 harness/ai 적용 레이어에서 failure를 어떻게 수정 가능한 입력으로 바꿀지 본다.


왜 형식이 중요한가

사람은 약간 모호한 에러도 문맥과 경험으로 보완할 수 있다. 하지만 AI는 가장 가까운 문자열과 패턴에 강하게 반응한다.

  • rule id가 없으면 같은 실패를 묶기 어렵고
  • 위치가 흐리면 수정 범위가 넓어지며
  • 대안이 없으면 주변 shortcut을 추측한다

그래서 failure format은 설명 문장보다 구조가 중요하다.


좋은 failure format의 최소 요소

  • stable rule identifier
  • file / line / symbol 같은 위치 정보
  • 관측된 위반 경로 또는 값
  • 허용되는 canonical path
  • 가능한 경우 실행해야 할 다음 check

이 다섯 가지가 있으면 AI는 실패를 보고 다음 행동을 비교적 좁은 범위로 수렴시킬 수 있다.


형식은 일관되어야 한다

같은 종류의 failure가 도구마다 다른 말로 나오면 안 된다.

  • lint는 한 이름
  • runtime은 다른 이름
  • pre-commit은 또 다른 설명

이렇게 흩어지면 사람도 헷갈리고, AI는 더더욱 같은 규칙으로 연결하지 못한다.

가능하면 같은 rule id와 같은 canonical path를 공유하는 편이 좋다.


나쁜 failure format 패턴

  • not allowed처럼 이유가 너무 짧다
  • 위치가 없어서 어디를 고쳐야 할지 모른다
  • 내부 구현 dump만 길고 대안이 없다
  • 여러 위반을 한 문장에 뭉갠다
  • failure마다 naming이 달라 searchability가 없다

이런 형식은 failure를 signal이 아니라 잡음으로 만든다.


pre-commit과 auto-correction에서 왜 중요해지는가

AI가 local gate를 통과하려면 실패가 곧바로 수정 입력으로 바뀌어야 한다.

  • pre-commit에서 failure가 machine-readable하면 즉시 재시도 가능하다
  • auto-correction loop에서 같은 failure를 정확히 재확인할 수 있다
  • 반복 failure를 같은 rule bucket으로 묶어 개선 포인트를 읽을 수 있다

즉 failure format은 feedback loop와 correction loop를 이어주는 접점이다.


실무 질문

  • rule id가 stable하게 남는가
  • 위치 정보가 수정 범위를 좁혀주는가
  • 허용되는 대안이 명시되는가
  • 같은 규칙이 도구마다 같은 이름으로 보이는가
  • AI가 이 failure를 보고 broad refactor가 아니라 local fix로 수렴할 수 있는가

요약

좋은 machine-readable failure는 다음을 만족한다.

  • 규칙 이름이 안정적이고
  • 위치가 정확하며
  • 대안이 명시되고
  • 도구 전반에 걸쳐 일관된다

하네스의 AI 적용에서 failure format은 부가 정보가 아니라, loop를 제대로 닫기 위한 핵심 인터페이스다.