---
name: create-domain-rule
version: 1.0.0
description: 새로운 도메인 rules.md 파일을 생성하기 위한 범용 스킬
---

# Create Domain Rule

## 목적

`agent-ops/rules/project/domain/<domain-name>/rules.md` 파일을 올바른 형식으로 생성한다.
실제 프로젝트 폴더 구조를 분석하여 경로와 구성 요소를 자동으로 채운다.
생성 후 `rules/project/rules.md`의 도메인 룰 로딩 안내와 도메인 매핑 테이블을 갱신한다.
생성한 domain rule에는 현재 코드 상태를 어디까지 반영했는지 알 수 있도록 기준 커밋 메타데이터를 기록한다.

## 언제 호출할지

- 새로운 도메인 영역의 코드를 처음 변경하기 전에
- 기존 domain rule이 없는 경로에 대해 규칙이 필요할 때
- 사용자가 특정 도메인의 rule 파일을 만들어 달라고 요청할 때
- agent-ops 초기 scaffold 이후 도메인을 추가 확장할 때

## 입력

- `domain-name`: 생성할 도메인 이름, kebab-case (필수)
- `domain-type`: `core` / `supporting` / `generic` 중 하나 (필수)
- `path-hints`: 이 도메인에 해당하는 경로 힌트 목록 (선택, 없으면 자동 탐색)

## 먼저 확인할 것

- [ ] `agent-ops/rules/project/domain/<domain-name>/rules.md` 가 이미 존재하는지 확인
- [ ] `agent-ops/rules/common/_templates/domain-rule-template.md` 를 읽어 최신 템플릿 형식 파악
- [ ] `agent-ops/rules/project/domain/` 하위 기존 domain rule 목록을 확인하여 중복·유사 도메인 여부 판단
- [ ] `git rev-parse HEAD` 로 기준 커밋을 확인
  - 이 값은 생성될 rules.md를 포함하는 미래 커밋 해시가 아니다
  - 의미: "이 커밋까지의 코드 상태를 보고 domain rule을 생성했다"

## 실행 절차

1. **중복 확인**
   - `agent-ops/rules/project/domain/<domain-name>/` 폴더 존재 여부 확인
   - 책임이 겹치는 기존 domain rule 이 있으면 사용자에게 알리고 중단한다

2. **경로 탐색**
   - `path-hints` 가 제공된 경우: 해당 경로를 기준으로 폴더 구조 확인
   - `path-hints` 가 없는 경우: `domain-name` 과 연관된 폴더명·파일명으로 프로젝트를 탐색
   - 실제로 존재하는 경로만 포함 경로에 기재한다
   - 존재하지 않는 경로는 기재하지 않는다

3. **도메인 분석**
   - 탐색된 경로의 주요 파일·모듈을 읽어 아래를 도출한다
     - 도메인의 목적 / 책임 한 줄 요약
     - 포함 경로 목록
     - 제외 경로 (인접 도메인과 겹칠 수 있는 경로)
     - 주요 구성 요소 (파일, 모듈, 클래스, 함수 등)
     - 유지할 패턴 (네이밍 규칙, 아키텍처 패턴 등)
     - 다른 도메인과의 경계
     - 금지 사항

4. **도메인 rules.md 생성**
   - 경로: `agent-ops/rules/project/domain/<domain-name>/rules.md`
   - `domain-rule-template.md` 형식을 따른다
   - frontmatter의 `last_rule_review_commit`에는 생성 직전에 확인한 `git rev-parse HEAD` 값을 기록한다
   - frontmatter의 `last_rule_updated_at`에는 생성일을 `YYYY-MM-DD` 형식으로 기록한다
   - 실제 코드에서 확인된 내용만 기재한다
   - 불확실한 항목은 `<!-- TODO: 확인 필요 -->` 주석으로 남긴다

5. **rules/project/rules.md 업데이트**
   - `agent-ops/rules/project/rules.md` 를 읽는다
   - `## 도메인 룰 로딩` 섹션이 없으면 `## 도메인 매핑` 바로 위에 아래 형식으로 추가한다
     ```
     ## 도메인 룰 로딩

     - 아래 도메인 매핑에 해당하는 작업에서 해당 domain 최초 진입 시 domain rule을 1회 읽는다.
     - 이미 읽은 domain rule은 같은 세션에서 반복해서 읽지 않는다.
     ```
   - 도메인 매핑 테이블에 아래 형식으로 추가한다
     ```
     | `<path-pattern>` | <domain-name> | `agent-ops/rules/project/domain/<domain-name>/rules.md` |
     ```
   - 경로 패턴은 실제 포함 경로를 기준으로 작성한다
   - 기존 로딩 섹션과 테이블 항목을 삭제하거나 재정렬하지 않는다

6. **결과 보고**
   - 생성한 파일 경로
   - rules/project/rules.md 에 추가한 항목
   - 불확실하여 TODO로 남긴 항목 (해당 시)

## 출력 형식

```
## 생성 완료

- Domain Rule 경로: agent-ops/rules/project/domain/<domain-name>/rules.md
- 도메인 유형: <core | supporting | generic>
- 도메인 룰 로딩 섹션: <추가함 | 이미 존재함>
- rules/project/rules.md 추가 경로 패턴: <path-pattern>

## TODO 항목 (확인 필요)
- <불확실하여 직접 확인이 필요한 항목> (해당 시)
```

## 실행 결과 검증

- [ ] `agent-ops/rules/project/domain/<domain-name>/rules.md` 파일이 생성되었는가
- [ ] 생성된 파일이 `domain-rule-template.md`의 frontmatter와 모든 섹션(목적, 포함 경로, 제외 경로, 주요 구성 요소, 유지할 패턴, 경계, 금지 사항)을 포함하는가
- [ ] `last_rule_review_commit`이 생성 직전 `HEAD`를 가리키는가
- [ ] `rules/project/rules.md`에 도메인 룰 로딩 섹션이 존재하는가
- [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 해당 도메인 항목이 추가되었는가
- [ ] 포함 경로에 기재된 경로가 실제로 프로젝트에 존재하는가
- 검증 실패 시: 누락된 섹션 또는 잘못된 경로를 사용자에게 알리고 해당 부분만 보완한다

## 금지 사항

- 이미 존재하는 rules.md 를 덮어쓰지 않는다
- 실제 존재하지 않는 경로를 포함 경로에 넣지 않는다
- 추측으로 패턴이나 금지 사항을 채우지 않는다 — 확인된 내용만 기재한다
- rules/project/rules.md 의 기존 로딩 섹션과 테이블 항목을 삭제하거나 재정렬하지 않는다
- 하나의 domain rule 에 여러 독립 도메인의 책임을 묶지 않는다
- 코드 변경을 수행하지 않는다 — 이 skill 은 rule 파일 생성만 담당한다
