[
  {
    "rule_id": "IR-001",
    "rule_name": "조용한_fallback_금지",
    "detect": "예외를 잡고 로그·재던짐 없이 pass 하거나 정상값을 반환하는 패턴",
    "severity": "block"
  },
  {
    "rule_id": "IR-002",
    "rule_name": "SSoT",
    "detect": "같은 상수·설정값을 두 곳 이상에서 리터럴로 정의",
    "severity": "block"
  },
  {
    "rule_id": "IR-003",
    "rule_name": "멱등성",
    "detect": "재시도 루프 안에서 생성·결제 등 부수효과를 매번 새로 일으키는 패턴",
    "severity": "block"
  },
  {
    "rule_id": "IR-004",
    "rule_name": "SRP",
    "detect": "한 함수가 검증·저장·알림 등 서로 다른 책임을 함께 수행",
    "severity": "warn"
  },
  {
    "rule_id": "IR-005",
    "rule_name": "원자성",
    "detect": "여러 상태 변경을 트랜잭션 경계 없이 순차 수행",
    "severity": "warn"
  },
  {
    "rule_id": "IR-006",
    "rule_name": "일관성",
    "detect": "미정의 심볼 참조 또는 빈 변경 등 완결되지 않은 코드",
    "severity": "block"
  },
  {
    "rule_id": "IR-007",
    "rule_name": "조용한_fallback_금지",
    "detect": "자바스크립트에서 catch 블록이 비어 있거나 에러를 무시하고 기본값을 반환",
    "severity": "block"
  },
  {
    "rule_id": "IR-008",
    "rule_name": "SSoT",
    "detect": "환경변수·설정 파일 값과 코드 리터럴이 같은 의미로 이중 정의",
    "severity": "warn"
  },
  {
    "rule_id": "IR-009",
    "rule_name": "멱등성",
    "detect": "동일 요청 키 없이 외부 API 를 호출해 재시도 시 중복 부수효과 발생",
    "severity": "block"
  },
  {
    "rule_id": "IR-010",
    "rule_name": "원자성",
    "detect": "저장과 알림을 한 트랜잭션 밖에서 순차 처리해 부분 실패 가능",
    "severity": "warn"
  },
  {
    "rule_id": "IR-011",
    "rule_name": "SRP",
    "detect": "핸들러가 파싱·검증·영속화·응답 포맷을 한 함수에 모두 담음",
    "severity": "warn"
  },
  {
    "rule_id": "IR-012",
    "rule_name": "일관성",
    "detect": "타입 선언과 실제 반환값이 어긋나 정적 검사로 잡히는 불일치",
    "severity": "block"
  }
]