Rust AI 어시스턴트를 위한 Fail-Closed 게이트

발행: (2026년 1월 2일 오전 11:21 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

작업 회피 제안을 거부하기 전에 거부를 증명하도록 AI를 멈추게 하기

대부분의 AI 코딩 어시스턴트는 다음과 같은 워크플로를 따릅니다:

  1. 컴파일러 오류 읽기
  2. 오류 설명하기
  3. 해결책 제시하기

많은 언어에서 잘 동작하지만, Rust에서는 언어가 제공하는 보장을 깨뜨리는 경우가 종종 있습니다.

문제점

Rust 컴파일러 오류—특히 borrow‑checker 거부—는 형식적인 거부입니다:

  • 요청된 상태가 안전함을 증명할 수 없거나, 혹은
  • Rust의 불변식 아래 존재할 수 없을 때

AI 어시스턴트는 이를 보통 “사용자가 회피하고 싶어 할 것”으로 간주하고, 다음과 같은 예측 가능한 패턴을 만들게 됩니다:

  • clone()이 너무 일찍 등장
  • Arc가 기본 탈출구가 됨
  • RefCellunsafe가 명시적인 트레이드‑오프 없이 나타남

AI는 어떤 불변식이 희생되는지 결정하지 않고, 단순히 하나를 희생합니다.

핵심 아이디어: 제안은 증명될 때만 허용

AI를 “Rust 설명을 더 잘하게” 만드는 대신, 이 프로젝트는 한 가지 규칙을 강제합니다:

AI 어시스턴트는 허용된다는 증명을 할 때까지 어떤 제안도 하지 않아야 합니다.

이는 fail‑closed adjudication gate 로 구현됩니다.

두 역할, 하나의 확고한 경계

Adjudicator (LLM)

허용되는 행동:

  • 거부를 분류 (A / B / C / D)
  • 충돌이나 증명 공백 설명
  • 어떤 Rust 불변식이 유지되는지 명시

허용되지 않는 행동:

  • 코드 제안
  • 회피 방안 제시
  • 탈출 메커니즘에 대한 힌트

Auditor (Gate)

  • 의미를 해석하거나 Rust semantics를 이해하지 않음.

  • 구조적 검증만 수행:

    • 필수 필드 존재 여부
    • enum 일치 여부
    • 스코프 일관성
    • 금지된 제안 행동이 없는지 확인

검증에 실패하면 → fail‑close.

Fail‑close가 핵심 설계 선택인 이유

대부분의 AI 시스템은 fail open(“확신이 없으면 그래도 도와준다”) 방식입니다.
컴파일러는 fail closed(“증명되지 않으면 멈춘다”) 방식을 사용합니다.

이 게이트는 어시스턴트의 직감이 아니라 컴파일러의 철학을 복제합니다. 판정이 완전하지 않을 때 시스템은 구조화된 거부만 반환합니다—제안도, 회피 힌트도, “~을 시도해볼 수 있다” 같은 문구도 없습니다.

최소 흐름

Input (code + intent)

Adjudicator (LLM)
  - classify rejection
  - describe conflict

Auditor (Gate)
  - schema validation
  - enum checks

PASS → suggestions allowed
FAIL → suggestions blocked

결정은 모델이 아니라 게이트가 합니다.

이 데모가 의도적으로 하지 않는

  • rustc 오류 코드를 매핑
  • 설명 품질 판단
  • 프롬프트 최적화
  • Rust 교육

오직 한 가지만 증명합니다: 제안 제어는 프롬프트 관례가 아니라 제품 동작으로 강제될 수 있다는 점.

왜 Rust에서 이것이 눈에 띄는가

Rust는 불변식 위반을 명시적으로 드러내지만, 동일한 실패 모드는 다음 분야에서도 존재합니다:

  • 보안 도구
  • 금융 시스템
  • 안전‑중요 코드
  • 정책‑구동 시스템

“친절함”이 권한을 무시할 수 있는 모든 도메인에 이런 게이트가 필요합니다.

요점

AI 어시스턴트는 컴파일러와 경쟁해서는 안 됩니다; 컴파일러를 존중해야 합니다. 때로는 올바른 출력이 회피가 아니라 규칙에 의해 강제된 침묵일 수 있습니다.

Repository

https://github.com/yuer-dsl/rust-adjudication-gate

Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.