From 2635d7e2d46d883126f0754928566297927a32b8 Mon Sep 17 00:00:00 2001 From: toki Date: Thu, 21 May 2026 20:22:07 +0900 Subject: [PATCH] sync: agent-ops from agentic-framework v1.1.25 --- .clinerules | 3 +- .cursorrules | 3 +- AGENTS.md | 3 +- CLAUDE.md | 3 +- GEMINI.md | 3 +- agent-ops/.version | 2 +- agent-ops/rules/common/rules.md | 3 +- .../common/analyze-roadmap-position/SKILL.md | 107 ++++++++++++ .../skills/common/create-roadmap/SKILL.md | 112 +++++++------ agent-ops/skills/common/router.md | 1 + .../skills/common/update-roadmap/SKILL.md | 155 ++++++++++-------- 11 files changed, 262 insertions(+), 133 deletions(-) create mode 100644 agent-ops/skills/common/analyze-roadmap-position/SKILL.md diff --git a/.clinerules b/.clinerules index 7a5784e..9d34371 100644 --- a/.clinerules +++ b/.clinerules @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/.cursorrules b/.cursorrules index 7a5784e..9d34371 100644 --- a/.cursorrules +++ b/.cursorrules @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/AGENTS.md b/AGENTS.md index 7a5784e..9d34371 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/CLAUDE.md b/CLAUDE.md index 7a5784e..9d34371 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/GEMINI.md b/GEMINI.md index 7a5784e..9d34371 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/agent-ops/.version b/agent-ops/.version index 3fe3e58..0bfff3d 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.24 +1.1.25 diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index 7a5784e..9d34371 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -8,12 +8,11 @@ `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. -현재 작업 위치 질문은 `agent-ops/roadmap/current.md`와 기본 Milestone 문서를 보고 짧게 답한다. 변경 요청이 아니면 수정하지 않는다. - 아래 성격의 요청은 사용자가 명시적으로 요청한 경우에만 `agent-ops/skills/common/router.md`를 작업 최초 1회 읽고 수행한다. 자동으로 수행하지 않는다. - agent-ops 초기화 - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 +- 현재 작업 지점/남은 작업 분석 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/agent-ops/skills/common/analyze-roadmap-position/SKILL.md b/agent-ops/skills/common/analyze-roadmap-position/SKILL.md new file mode 100644 index 0000000..8cc2d4f --- /dev/null +++ b/agent-ops/skills/common/analyze-roadmap-position/SKILL.md @@ -0,0 +1,107 @@ +--- +name: analyze-roadmap-position +version: 1.0.0 +description: "지금 작업이 뭐지?, 현재 작업 분석, 남은 작업 확인 요청에 대해 활성 Milestone과 코드 상태를 함께 읽어 현재 작업 지점과 남은 일을 추정하는 읽기 전용 스킬" +--- + +# 작업 지점 분석 + +## 목적 + +현재 브랜치, 변경 파일, 코드 구조, 활성 Milestone 문서를 함께 분석해 지금 작업이 어느 Milestone에 걸쳐 있는지와 남은 작업 후보를 보고한다. +`current.md`만 보고 현재 작업 위치를 단정하지 않고, 실제 코드 상태와 요청 내용을 근거로 판단한다. + +## 언제 호출할지 + +- 사용자가 "지금 작업이 뭐지?", "현재 작업이 뭐야?", "어디까지 했지?"라고 물을 때 +- 사용자가 현재 브랜치 또는 변경 파일 기준으로 남은 작업을 알고 싶어 할 때 +- 활성 Milestone 안에서 이번 요청이 어느 범위에 속하는지 확인해야 할 때 +- 구현 전에 로드맵 기준 작업 위치를 가볍게 점검해야 할 때 + +## 입력 + +- `question`: 사용자의 현재 작업 지점 질문 또는 남은 작업 질문 (선택) +- `scope`: 분석할 경로, 기능명, 도메인명, 브랜치명 힌트 (선택) +- `depth`: `quick` 또는 `deep` (선택, 없으면 `quick`) + +## 먼저 확인할 것 + +- [ ] `agent-ops/roadmap/current.md` 존재 여부 확인 +- [ ] `current.md`의 활성 Milestone 목록이 가리키는 문서 존재 여부 확인 +- [ ] git 저장소이면 현재 브랜치, `git status --short`, 변경 파일 목록 확인 +- [ ] 변경 파일이 있으면 `agent-ops/rules/project/rules.md`의 도메인 매핑 기준으로 관련 domain rule 확인 + +## 실행 절차 + +1. **활성 Milestone 창 확인** + - `agent-ops/roadmap/current.md`를 읽고 활성 Milestone 후보와 선택 규칙을 파악한다. + - 활성 Milestone 문서를 모두 읽되, 목록이 많으면 사용자 요청이나 변경 파일과 관련 높은 문서부터 읽는다. + - `current.md`가 없거나 형식이 맞지 않으면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 불확실성을 보고한다. + +2. **작업 흔적 확인** + - git 저장소이면 `git branch --show-current`, `git status --short`, `git diff --name-only`, 필요 시 `git diff --stat`을 확인한다. + - 변경 파일이 없으면 사용자의 요청 문장과 최근 대상 경로 힌트를 기준으로 추정한다. + - 변경 파일이 있으면 관련 코드와 테스트 파일을 필요한 만큼만 읽는다. + +3. **Milestone 매칭** + - 활성 Milestone의 목표, 범위, 완료 기준, 범위 제외 항목과 변경 파일/요청 내용을 비교한다. + - 하나의 Milestone에 명확히 속하면 단일 후보로 보고한다. + - 둘 이상의 Milestone에 걸치면 복수 후보로 보고하고, 어떤 파일이나 기능이 어느 Milestone에 닿는지 나눈다. + - 활성 Milestone 밖으로 보이면 `ROADMAP.md`의 Milestone 목록을 확인하고 전환 또는 신규 Milestone 필요성을 제안한다. + +4. **남은 작업 분류** + - `확인됨`: 코드, 문서, 테스트, diff로 근거가 있는 남은 작업 + - `추정됨`: 구조상 필요해 보이지만 추가 확인이 필요한 작업 + - `확인 필요`: 제품 판단, 범위 결정, 사용자 의도가 필요한 작업 + - 완료 여부는 evidence 없이 확정하지 않는다. + +5. **결과 보고** + - 추정 Milestone과 신뢰도 + - 판단 근거 + - 구현된 것으로 보이는 부분 + - 남은 작업 + - 확인 필요 항목 + - 읽은 주요 파일 + +## 실행 결과 검증 + +- [ ] `current.md`만 근거로 현재 위치를 단정하지 않았는가 +- [ ] 활성 Milestone 문서의 목표와 범위 제외 항목을 확인했는가 +- [ ] 변경 파일 또는 사용자 요청과 Milestone 판단 근거가 연결되어 있는가 +- [ ] 남은 작업을 `확인됨`, `추정됨`, `확인 필요`로 구분했는가 +- [ ] 로드맵 파일을 수정하지 않았는가 +- 검증 실패 시: 부족한 근거를 명시하고 신뢰도를 낮춘다. + +## 출력 형식 + +```markdown +## 현재 작업 분석 + +- 추정 Milestone: +- 신뢰도: <높음 | 중간 | 낮음> + +## 근거 + +- <변경 파일, 브랜치, 요청 내용, Milestone 범위와 연결된 근거> + +## 구현된 것으로 보이는 부분 + +- <코드/문서 근거가 있는 항목> + +## 남은 작업 + +- 확인됨: <항목> +- 추정됨: <항목> +- 확인 필요: <항목> + +## 읽은 주요 파일 + +- +``` + +## 금지 사항 + +- `current.md`만 읽고 현재 작업 위치를 확정하지 않는다. +- 사용자가 명시하지 않은 상태에서 `ROADMAP.md`, `current.md`, Milestone 문서를 수정하지 않는다. +- evidence 없이 Milestone이나 기능을 완료 처리하지 않는다. +- 활성 Milestone 밖 작업을 임의로 새 Milestone으로 추가하지 않는다. diff --git a/agent-ops/skills/common/create-roadmap/SKILL.md b/agent-ops/skills/common/create-roadmap/SKILL.md index b489e62..d29518c 100644 --- a/agent-ops/skills/common/create-roadmap/SKILL.md +++ b/agent-ops/skills/common/create-roadmap/SKILL.md @@ -1,7 +1,7 @@ --- name: create-roadmap -version: 1.1.0 -description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase, Milestone 기반 한국어 로드맵 파일과 기본/진행 중 Milestone 컨텍스트 로딩 규칙을 처음 생성하는 공통 스킬 +version: 1.2.0 +description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase, 순번 없는 Milestone 문서, 활성 Milestone 창을 처음 생성하는 공통 스킬 --- # 로드맵 생성 @@ -9,7 +9,7 @@ description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase, Mil ## 목적 `agent-ops/roadmap/` 하위에 전체 목표 / Phase / Milestone 기반 한국어 로드맵 구조를 처음 생성한다. -전체 로드맵은 마일스톤 설계 시에만 읽고, 일반 작업에서는 `current.md`의 기본 Milestone 또는 요청에 맞는 진행 중인 Milestone 정의만 읽도록 컨텍스트 로딩 규칙을 만든다. +전체 로드맵은 로드맵 설계와 갱신 때만 읽고, 일반 작업에서는 `current.md`의 활성 Milestone 창과 관련 Milestone 문서만 읽도록 컨텍스트 로딩 규칙을 만든다. ## 언제 호출할지 @@ -23,8 +23,7 @@ description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase, Mil - `overall-goal`: 프로젝트 전체 목표 한 줄 또는 짧은 문단 (선택, 없으면 README와 현재 구조에서 추론) - `phase-hints`: 예상 Phase 목록 또는 단계 힌트 (선택) - `milestone-hints`: 예상 Milestone 목록 또는 기능 힌트 (선택) -- `default-milestone`: 애매한 요청이나 현재 집중 작업의 기본 Milestone 이름 또는 번호 (선택, 없으면 추론 후 사용자에게 확인) -- `active-milestones`: 동시에 진행 중인 Milestone 목록 (선택, 없으면 현재 구현 상태와 요청에서 추론) +- `active-milestones`: 현재 열어둘 Milestone 목록 (선택, 없으면 현재 구현 상태와 요청에서 추론) ## 생성 구조 @@ -34,24 +33,30 @@ agent-ops/ ROADMAP.md current.md milestones/ - M01-.md - M02-.md + .md ``` | 파일 | 역할 | |------|------| -| `agent-ops/roadmap/ROADMAP.md` | 전체 목표, Phase 흐름, Milestone 인덱스. 로드맵 생성/갱신/Phase 전환 때만 읽는다 | -| `agent-ops/roadmap/current.md` | 현재 Phase, 기본 Milestone, 동시에 진행 중인 Milestone 목록을 가리키는 얇은 포인터 | -| `agent-ops/roadmap/milestones/MNN-.md` | 일반 작업 시 읽는 Milestone 단위 목표, 범위, 기능 목록, 범위 제외 항목 | +| `agent-ops/roadmap/ROADMAP.md` | 전체 목표, Phase 흐름, 문서 순서 기반 Milestone 목록. 로드맵 생성/갱신/Phase 전환 때만 읽는다 | +| `agent-ops/roadmap/current.md` | 지금 열려 있는 활성 Milestone 창과 선택 규칙을 담는 얇은 포인터 | +| `agent-ops/roadmap/milestones/.md` | 일반 작업 시 읽는 Milestone 단위 목표, 범위, 기능 목록, 범위 제외 항목 | ## 작성 언어 - `agent-ops/roadmap/` 하위 로드맵 문서는 사람이 함께 검토하고 수정하는 협업 문서이므로 기본 작성 언어를 한국어로 한다. - 전체 구성, 섹션 제목, 설명 문장, 기능 설명, 완료 기준, TODO, 가정은 한국어 문장으로 작성한다. -- Goal, Phase, Milestone, Scope, API, CLI처럼 개발자에게 자연스러운 일반 용어, 파일명, 경로, Milestone ID(`M01` 등), slug, 코드 식별자는 영어 또는 숫자를 유지할 수 있다. +- Goal, Phase, Milestone, Scope, API, CLI처럼 개발자에게 자연스러운 일반 용어, 파일명, 경로, slug, 코드 식별자는 영어 또는 숫자를 유지할 수 있다. - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다. - 프로젝트 규칙에 별도 문서 언어가 명시되어 있으면 그 규칙을 우선하되, 명시가 없으면 한국어를 기본값으로 삼는다. +## 순서 정책 + +- Phase와 Milestone 이름에 `1`, `2`, `M01`, `P1` 같은 순번을 붙이지 않는다. +- 진행 순서는 `ROADMAP.md`에 적힌 위에서 아래 순서로만 해석한다. +- Milestone 파일명은 순번 없이 `agent-ops/roadmap/milestones/.md`로 만든다. +- 중간에 Phase나 Milestone을 끼워 넣을 수 있도록 기존 항목의 이름과 파일명을 불필요하게 바꾸지 않는다. + ### current.md 형식 `agent-ops/roadmap/current.md`는 아래 형식을 유지한다. @@ -59,16 +64,18 @@ agent-ops/ ```markdown # 현재 로드맵 컨텍스트 -- 현재 Phase: -- 기본 Milestone: -- 기본 Milestone 파일: agent-ops/roadmap/milestones/MNN-.md +## 활성 Milestone -## 진행 중인 Milestone +- : agent-ops/roadmap/milestones/.md -- : agent-ops/roadmap/milestones/MNN-.md +## 선택 규칙 + +- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 Milestone을 선택한다. +- 활성 Milestone 둘 이상에 걸치면 필요한 Milestone 문서를 모두 읽고 작업 범위를 좁힌다. +- 활성 Milestone 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. ``` -기본 Milestone은 애매한 요청의 기본 작업 초점이다. 진행 중인 Milestone은 동시에 진행 중인 Milestone 후보 목록이며, 요청이 기본 Milestone과 맞지 않으면 이 목록에서 가장 관련 있는 Milestone을 읽는다. +`current.md`는 개인별 작업 위치가 아니라 현재 열어둘 Milestone 후보 목록이다. 실제 현 작업 지점과 남은 작업은 `analyze-roadmap-position` 스킬이 코드와 git 상태를 함께 읽고 분석한다. ## 먼저 확인할 것 @@ -81,26 +88,26 @@ agent-ops/ ## 실행 절차 1. **기존 로드맵 확인** - - `agent-ops/roadmap/` 하위 기존 파일 존재 여부를 확인한다 - - 기존 로드맵이 있으면 새로 만들지 않고 `update-roadmap`을 사용하도록 안내한다 - - 일부 파일만 있으면 누락 파일을 보완할지, 기존 구조를 유지할지 사용자에게 짧게 확인한다 + - `agent-ops/roadmap/` 하위 기존 파일 존재 여부를 확인한다. + - 기존 로드맵이 있으면 새로 만들지 않고 `update-roadmap`을 사용하도록 안내한다. + - 일부 파일만 있으면 누락 파일을 보완할지, 기존 구조를 유지할지 사용자에게 짧게 확인한다. 2. **프로젝트 방향 분석** - - README와 프로젝트 규칙에서 대상 사용자, 해결하려는 문제, 현재 구현 상태를 파악한다 - - 전체 코드를 정독하지 않는다. 로드맵 설계에 필요한 문서와 상위 구조만 확인한다 - - 불확실한 제품 방향은 단정하지 않고 "가정" 또는 ``로 남긴다 + - README와 프로젝트 규칙에서 대상 사용자, 해결하려는 문제, 현재 구현 상태를 파악한다. + - 전체 코드를 정독하지 않는다. 로드맵 설계에 필요한 문서와 상위 구조만 확인한다. + - 불확실한 제품 방향은 단정하지 않고 "가정" 또는 ``로 남긴다. 3. **목표 / Phase / Milestone 설계** - - 전체 목표는 프로젝트가 궁극적으로 만들려는 결과를 1~3문장으로 작성한다 - - Phase는 큰 진화 단위로 나누고, 각 Phase에 목표를 둔다 - - Milestone은 Phase 안에서 완료 판단이 가능한 단위로 나눈다 - - Milestone ID는 `M01`, `M02`처럼 2자리 번호를 사용하고 파일명은 `M01-.md`로 만든다 - - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다 + - 전체 목표는 프로젝트가 궁극적으로 만들려는 결과를 1~3문장으로 작성한다. + - Phase는 큰 진화 단위로 나누고, 각 Phase에 목표를 둔다. + - Milestone은 Phase 안에서 완료 판단이 가능한 단위로 나눈다. + - Phase와 Milestone은 순번 없이 이름으로만 작성하고, 순서는 문서의 위에서 아래 흐름으로 표현한다. + - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다. 4. **로드맵 파일 생성** - - `agent-ops/roadmap/ROADMAP.md`에는 전체 목표, 현재 위치, Phase 개요, Milestone 인덱스, 로딩 정책을 작성한다 - - `agent-ops/roadmap/current.md`에는 정해진 `current.md 형식` 그대로 현재 Phase, 기본 Milestone, 진행 중인 Milestone 목록을 작성한다 - - 각 Milestone 문서에는 아래 섹션을 포함한다 + - `agent-ops/roadmap/ROADMAP.md`에는 전체 목표, Phase 개요, Milestone 목록, 로딩 정책을 작성한다. + - `agent-ops/roadmap/current.md`에는 정해진 `current.md 형식` 그대로 활성 Milestone 목록과 선택 규칙을 작성한다. + - 각 Milestone 문서에는 아래 섹션을 포함한다. - `목표` - `단계` - `상태` @@ -109,38 +116,39 @@ agent-ops/ - `완료 기준` - `범위 제외` - `작업 컨텍스트` - - 미래 Milestone은 확정된 내용만 작성하고, 불확실한 기능은 TODO로 둔다 + - 미래 Milestone은 확정된 내용만 작성하고, 불확실한 기능은 TODO로 둔다. 5. **마일스톤 컨텍스트 로딩 규칙 추가** - - `agent-ops/rules/project/rules.md`가 있으면 아래 섹션을 추가한다 + - `agent-ops/rules/project/rules.md`가 있으면 아래 섹션을 추가한다. ```markdown ## 마일스톤 컨텍스트 로딩 - 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다. - - 요청이 기본 Milestone 범위에 맞으면 기본 Milestone 문서를 같은 세션에서 1회 읽는다. - - 요청이 기본 Milestone과 맞지 않으면 `current.md`의 진행 중인 Milestone 목록에서 가장 관련 있는 Milestone 문서를 같은 세션에서 1회 읽는다. - - 진행 중인 Milestone에도 맞지 않으면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 인덱스를 확인하고 사용자에게 진행/전환 여부를 확인한다. + - `current.md`는 현재 작업 위치가 아니라 활성 Milestone 후보 목록이다. + - 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 활성 Milestone 문서를 같은 세션에서 1회 읽는다. + - 요청이 활성 Milestone 둘 이상에 걸치면 필요한 Milestone 문서를 모두 읽고 작업 범위를 좁힌다. + - 활성 Milestone 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. - `agent-ops/roadmap/ROADMAP.md`는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정 요청이 있을 때만 읽는다. - 작업 요청이 선택된 Milestone의 목표 또는 범위 제외 항목과 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다. ``` - - 같은 섹션이 이미 있으면 중복 추가하지 않고 필요한 문장만 보완한다 - - `agent-ops/rules/project/rules.md`가 없으면 파일을 새로 만들지 말고, 추가하지 못한 항목으로 보고한다 + - 같은 섹션이 이미 있으면 중복 추가하지 않고 필요한 문장만 보완한다. + - `agent-ops/rules/project/rules.md`가 없으면 파일을 새로 만들지 말고, 추가하지 못한 항목으로 보고한다. 6. **결과 보고** - 생성한 로드맵 파일 목록 - - 현재 Phase, 기본 Milestone, 진행 중인 Milestone + - 활성 Milestone 목록 - `rules/project/rules.md`에 추가한 로딩 규칙 여부 - 확인이 필요한 TODO 또는 가정 ## 실행 결과 검증 - [ ] `agent-ops/roadmap/ROADMAP.md`가 생성되었는가 -- [ ] `agent-ops/roadmap/current.md`가 기본 Milestone 문서 경로와 진행 중인 Milestone 문서 경로를 정확히 가리키는가 -- [ ] `agent-ops/roadmap/milestones/` 하위에 Milestone 문서가 생성되었는가 +- [ ] `agent-ops/roadmap/current.md`가 활성 Milestone 문서 경로를 정확히 가리키는가 +- [ ] `agent-ops/roadmap/milestones/` 하위에 순번 없는 Milestone 문서가 생성되었는가 - [ ] 각 Milestone 문서가 한국어 필수 섹션을 포함하는가 - [ ] `ROADMAP.md`에 전체 로드맵을 일반 작업마다 읽지 말라는 로딩 정책이 포함되었는가 - [ ] `agent-ops/rules/project/rules.md`가 있는 경우 마일스톤 컨텍스트 로딩 섹션이 추가되었는가 -- 검증 실패 시: 누락된 파일이나 섹션만 보완하고 기존 내용을 덮어쓰지 않는다 +- 검증 실패 시: 누락된 파일이나 섹션만 보완하고 기존 내용을 덮어쓰지 않는다. ## 출력 형식 @@ -149,14 +157,13 @@ agent-ops/ - 로드맵: agent-ops/roadmap/ROADMAP.md - 현재 컨텍스트: agent-ops/roadmap/current.md -- 기본 Milestone: agent-ops/roadmap/milestones/MNN-.md -- 진행 중인 Milestone: +- Milestone 문서: +- 활성 Milestone: - 프로젝트 규칙 업데이트: <추가함 | 이미 존재함 | rules/project/rules.md 없음> -## 현재 위치 +## 활성 Milestone -- Phase: -- 기본 Milestone: +- : agent-ops/roadmap/milestones/.md ## TODO 항목 @@ -165,8 +172,9 @@ agent-ops/ ## 금지 사항 -- 기존 `agent-ops/roadmap/` 파일을 덮어쓰지 않는다 -- 일반 작업마다 전체 `ROADMAP.md`를 읽도록 규칙을 만들지 않는다 -- Milestone 문서를 단순 TODO 목록으로만 만들지 않는다. 반드시 목표, 범위, 완료 기준, 범위 제외 항목을 포함한다 -- 확정되지 않은 제품 방향을 사실처럼 단정하지 않는다 -- `agent-ops/rules/common/`이나 `agent-ops/skills/common/`을 타겟 프로젝트에서 직접 수정하지 않는다 +- 기존 `agent-ops/roadmap/` 파일을 덮어쓰지 않는다. +- 일반 작업마다 전체 `ROADMAP.md`를 읽도록 규칙을 만들지 않는다. +- Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다. +- Milestone 문서를 단순 TODO 목록으로만 만들지 않는다. 반드시 목표, 범위, 완료 기준, 범위 제외 항목을 포함한다. +- 확정되지 않은 제품 방향을 사실처럼 단정하지 않는다. +- `agent-ops/rules/common/`이나 `agent-ops/skills/common/`을 타겟 프로젝트에서 직접 수정하지 않는다. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index 46da514..95db012 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -7,6 +7,7 @@ | skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` | | 로드맵 만들어줘, roadmap 생성, 마일스톤 설계, goal/phase 구조 잡아줘 | `agent-ops/skills/common/create-roadmap/SKILL.md` | | 로드맵 업데이트, roadmap 갱신, 마일스톤 갱신, phase 변경, 현재 마일스톤 변경, 로드맵 한국어 전환, 로드맵 번역 | `agent-ops/skills/common/update-roadmap/SKILL.md` | +| 지금 작업이 뭐지?, 현재 작업 분석, 어디까지 했지?, 남은 작업 뭐야 | `agent-ops/skills/common/analyze-roadmap-position/SKILL.md` | | 계획 세워줘, 구현 계획, PLAN.md, plan | `agent-ops/skills/common/plan/SKILL.md` | | 코드 리뷰해줘, 리뷰 진행해, 리뷰해줘, code review, CODE_REVIEW.md, 리뷰 루프 | `agent-ops/skills/common/code-review/SKILL.md` | | 커밋해줘, 푸시해줘, commit, push, 반영해줘 | `agent-ops/skills/common/commit-push/SKILL.md` | diff --git a/agent-ops/skills/common/update-roadmap/SKILL.md b/agent-ops/skills/common/update-roadmap/SKILL.md index 68f4107..6e030cf 100644 --- a/agent-ops/skills/common/update-roadmap/SKILL.md +++ b/agent-ops/skills/common/update-roadmap/SKILL.md @@ -1,7 +1,7 @@ --- name: update-roadmap -version: 1.1.0 -description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵을 갱신하고 current.md의 기본/진행 중 Milestone 정의를 동기화하는 공통 스킬 +version: 1.2.0 +description: 기존 전체 목표, Phase, 순번 없는 Milestone 기반 한국어 로드맵을 갱신하고 current.md의 활성 Milestone 창을 동기화하는 공통 스킬 --- # 로드맵 업데이트 @@ -9,22 +9,22 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 ## 목적 기존 `agent-ops/roadmap/` 구조를 현재 프로젝트 방향과 진행 상태에 맞게 한국어로 갱신한다. -로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 기본 Milestone과 진행 중인 Milestone 목록이 실제 작업 기준으로 동작하게 한다. +로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 활성 Milestone 창이 실제 작업 후보 목록으로 동작하게 한다. ## 언제 호출할지 -- 사용자가 "로드맵 업데이트", "마일스톤 갱신", "phase 변경", "현재 마일스톤 바꿔줘"라고 요청할 때 +- 사용자가 "로드맵 업데이트", "마일스톤 갱신", "phase 변경", "현재 활성 마일스톤 바꿔줘"라고 요청할 때 - 사용자가 "로드맵 한국어 전환", "로드맵 번역", "영문 로드맵을 한국어로 바꿔줘"라고 요청할 때 - Milestone 완료, 보류, 폐기, 신규 추가가 필요할 때 -- 기본 Milestone 또는 진행 중인 Milestone의 목표, 범위, 필수 기능, 완료 기준이 달라졌을 때 +- 활성 Milestone 창에 포함할 Milestone 목록이 달라졌을 때 +- 기본 목표, Phase, Milestone의 목표, 범위, 필수 기능, 완료 기준이 달라졌을 때 - 실제 구현 상태와 로드맵 파일이 어긋난 것 같아 동기화가 필요할 때 ## 입력 - `mode`: `status` / `milestone` / `phase` / `replan` / `sync` 중 하나 (선택, 요청에서 추론 가능) -- `target-milestone`: 갱신할 Milestone ID 또는 이름 (선택) -- `default-milestone`: 기본 작업 초점으로 둘 Milestone ID 또는 이름 (선택) -- `active-milestones`: 동시에 진행 중 상태로 둘 Milestone ID 또는 이름 목록 (선택) +- `target-milestone`: 갱신할 Milestone 이름, slug, 파일 경로 (선택) +- `active-milestones`: 활성 Milestone 창에 둘 Milestone 이름, slug, 파일 경로 목록 (선택) - `change-summary`: 반영할 방향 변경 또는 진행 상황 요약 (선택) - `evidence`: 완료 판단에 사용할 파일, PR, 테스트, 커밋, 사용자 설명 (선택) @@ -34,7 +34,7 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 |------|-----------| | `status` | 기능 체크박스, Milestone 상태, 완료 기준만 갱신 | | `milestone` | Milestone 목표, 범위, 기능 목록, 완료 기준 수정 | -| `phase` | 현재 Phase, 기본 Milestone, 진행 중인 Milestone 전환 | +| `phase` | Phase 설명 또는 활성 Milestone 창 전환 | | `replan` | 전체 Phase/Milestone 흐름 재구성 | | `sync` | 실제 프로젝트 상태와 로드맵 불일치 점검 후 보정 | @@ -42,24 +42,52 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 - `agent-ops/roadmap/` 하위 로드맵 문서는 사람이 함께 검토하고 수정하는 협업 문서이므로 기본 작성 언어를 한국어로 한다. - 전체 구성, 섹션 제목, 설명 문장, 기능 설명, 완료 기준, TODO, 가정은 한국어 문장으로 작성한다. -- Goal, Phase, Milestone, Scope, API, CLI처럼 개발자에게 자연스러운 일반 용어, 파일명, 경로, Milestone ID(`M01` 등), slug, 코드 식별자는 영어 또는 숫자를 유지할 수 있다. +- Goal, Phase, Milestone, Scope, API, CLI처럼 개발자에게 자연스러운 일반 용어, 파일명, 경로, slug, 코드 식별자는 영어 또는 숫자를 유지할 수 있다. - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다. -- 기존 영문 상태 값은 `Planned` → `계획`, `Active` → `진행 중`, `Done` → `완료`, `Paused` → `보류`, `Dropped` → `폐기`로 맞춘다. +- 기존 영문 상태 값은 `Planned` -> `계획`, `Active` -> `진행 중`, `Done` -> `완료`, `Paused` -> `보류`, `Dropped` -> `폐기`로 맞춘다. - 기존 영문 섹션명이 갱신 범위에 포함되면 아래 한국어 표준 섹션명으로 정리한다. - - `Goal` → `목표` - - `Phase` → `단계` - - `Status` → `상태` - - `Scope` → `범위` - - `Required Features` → `필수 기능` - - `Success Criteria` → `완료 기준` - - `Non-Goals` → `범위 제외` - - `Context for Work` → `작업 컨텍스트` + - `Goal` -> `목표` + - `Phase` -> `단계` + - `Status` -> `상태` + - `Scope` -> `범위` + - `Required Features` -> `필수 기능` + - `Success Criteria` -> `완료 기준` + - `Non-Goals` -> `범위 제외` + - `Context for Work` -> `작업 컨텍스트` + +## 순서 정책 + +- Phase와 Milestone 이름에 `1`, `2`, `M01`, `P1` 같은 순번을 붙이지 않는다. +- 진행 순서는 `ROADMAP.md`에 적힌 위에서 아래 순서로만 해석한다. +- 새 Milestone 파일은 순번 없이 `agent-ops/roadmap/milestones/.md`로 만든다. +- 중간에 Phase나 Milestone을 끼워 넣을 수 있도록 기존 항목의 이름과 파일명을 불필요하게 바꾸지 않는다. +- 기존 프로젝트에 이미 순번 파일명이 있으면 대규모 rename을 하지 말고, 갱신 범위에 포함된 새 항목부터 순번 없는 형식을 적용한다. + +### current.md 형식 + +`agent-ops/roadmap/current.md`는 아래 형식을 유지한다. + +```markdown +# 현재 로드맵 컨텍스트 + +## 활성 Milestone + +- : agent-ops/roadmap/milestones/.md + +## 선택 규칙 + +- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 Milestone을 선택한다. +- 활성 Milestone 둘 이상에 걸치면 필요한 Milestone 문서를 모두 읽고 작업 범위를 좁힌다. +- 활성 Milestone 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. +``` + +`current.md`는 개인별 작업 위치나 완료 상태의 진실이 아니다. 현재 열려 있는 Milestone 후보 목록이며, 실제 현 작업 지점과 남은 작업은 `analyze-roadmap-position` 스킬이 코드와 git 상태를 함께 읽고 분석한다. ## 먼저 확인할 것 - [ ] `agent-ops/roadmap/ROADMAP.md` 존재 여부 확인 - [ ] `agent-ops/roadmap/current.md` 존재 여부 확인 -- [ ] `current.md`가 가리키는 기본 Milestone 문서와 진행 중인 Milestone 문서 존재 여부 확인 +- [ ] `current.md`가 가리키는 활성 Milestone 문서 존재 여부 확인 - [ ] `current.md`가 정해진 한국어 형식을 유지하는지 확인 - [ ] 로드맵 파일이 없으면 `create-roadmap` 스킬 사용을 안내하고 중단 - [ ] 완료 상태로 바꾸는 경우 사용자의 명시 또는 확인 가능한 evidence가 있는지 확인 @@ -67,62 +95,52 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 ## 실행 절차 1. **갱신 범위 결정** - - 요청에서 mode와 target milestone을 추론한다 - - 로드맵 언어 전환 요청이면 `sync`로 보고 `ROADMAP.md`, `current.md`, 전체 Milestone 문서를 갱신 범위에 포함할 수 있다 - - `status` 갱신이면 `current.md`와 대상 Milestone 문서를 우선 읽는다 - - 요청이 기본 Milestone과 맞지 않으면 `current.md`의 진행 중인 Milestone 목록에서 대상 Milestone을 찾는다 - - 진행 중인 Milestone에도 맞지 않으면 `ROADMAP.md`의 Milestone 인덱스를 확인하고 사용자에게 진행/전환 여부를 확인한다 - - Phase 전환, Milestone 추가/삭제, 순서 변경, 전체 재계획이면 `ROADMAP.md`도 읽는다 - - 불필요하게 모든 Milestone 문서를 읽지 않는다 + - 요청에서 mode와 target Milestone을 추론한다. + - 로드맵 언어 전환 요청이면 `sync`로 보고 `ROADMAP.md`, `current.md`, 전체 Milestone 문서를 갱신 범위에 포함할 수 있다. + - `status` 갱신이면 `current.md`와 대상 Milestone 문서를 우선 읽는다. + - 요청이 활성 Milestone에 없으면 `ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. + - Phase 전환, Milestone 추가/삭제, 순서 변경, 전체 재계획이면 `ROADMAP.md`도 읽는다. + - 불필요하게 모든 Milestone 문서를 읽지 않는다. 2. **현재 로드맵 상태 파악** - - `ROADMAP.md`의 전체 목표, Phase 개요, Milestone 인덱스를 확인한다 - - `current.md`의 현재 Phase, 기본 Milestone, 진행 중인 Milestone 포인터를 확인한다 - - 대상 Milestone 문서의 목표, 범위, 필수 기능, 완료 기준, 범위 제외 항목을 확인한다 + - `ROADMAP.md`의 전체 목표, Phase 개요, Milestone 목록을 확인한다. + - `current.md`의 활성 Milestone 창과 선택 규칙을 확인한다. + - 대상 Milestone 문서의 목표, 범위, 필수 기능, 완료 기준, 범위 제외 항목을 확인한다. 3. **변경 내용 검증** - - 기능 완료 체크는 사용자 설명 또는 파일/테스트/커밋 등 확인 가능한 근거를 기준으로 한다 - - evidence 없이 완료 여부가 불확실하면 체크하지 않고 TODO 또는 확인 필요로 남긴다 - - 변경 요청이 전체 목표 또는 Phase 목표와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다 + - 기능 완료 체크는 사용자 설명 또는 파일/테스트/커밋 등 확인 가능한 근거를 기준으로 한다. + - evidence 없이 완료 여부가 불확실하면 체크하지 않고 TODO 또는 확인 필요로 남긴다. + - 변경 요청이 전체 목표 또는 Phase 목표와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다. 4. **로드맵 파일 갱신** - - `ROADMAP.md`는 전체 목표, Phase 개요, Milestone 인덱스, 현재 위치가 바뀔 때만 수정한다 - - `current.md`는 현재 Phase, 기본 Milestone, 진행 중인 Milestone 목록이 바뀔 때 아래 형식으로 수정한다 - ```markdown - # 현재 로드맵 컨텍스트 - - - 현재 Phase: - - 기본 Milestone: - - 기본 Milestone 파일: agent-ops/roadmap/milestones/MNN-.md - - ## 진행 중인 Milestone - - - : agent-ops/roadmap/milestones/MNN-.md - ``` - - Milestone 문서는 해당 Milestone의 목표, 범위, 필수 기능, 완료 기준, 범위 제외, 작업 컨텍스트가 바뀔 때 수정한다 - - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다 - - 완료된 Milestone의 기록은 삭제하지 않고 상태만 변경한다 + - `ROADMAP.md`는 전체 목표, Phase 개요, Milestone 목록, 로딩 정책이 바뀔 때만 수정한다. + - `current.md`는 활성 Milestone 창이 바뀔 때 정해진 `current.md 형식`으로 수정한다. + - Milestone 문서는 해당 Milestone의 목표, 범위, 필수 기능, 완료 기준, 범위 제외, 작업 컨텍스트가 바뀔 때 수정한다. + - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다. + - 완료된 Milestone의 기록은 삭제하지 않고 상태만 변경한다. 5. **마일스톤 컨텍스트 로딩 규칙 점검** - - `agent-ops/rules/project/rules.md`가 있으면 `## 마일스톤 컨텍스트 로딩` 섹션이 있는지 확인한다 - - 없으면 `create-roadmap`과 동일한 로딩 규칙을 추가한다 - - 기존 섹션이 있으면 전체 `ROADMAP.md`를 일반 작업마다 읽도록 되어 있지 않은지 확인하고 보정한다 + - `agent-ops/rules/project/rules.md`가 있으면 `## 마일스톤 컨텍스트 로딩` 섹션이 있는지 확인한다. + - 없으면 `create-roadmap`과 동일한 로딩 규칙을 추가한다. + - 기존 섹션이 있으면 전체 `ROADMAP.md`를 일반 작업마다 읽도록 되어 있지 않은지 확인하고 보정한다. + - 기존 섹션이 `current.md`를 현재 작업 위치로 단정하게 만들면 활성 Milestone 후보 목록으로 의미를 고친다. 6. **결과 보고** - 수정한 파일 목록 - 변경된 Phase / Milestone / 상태 + - 활성 Milestone 창 변경 사항 - 체크하거나 추가/제거한 필수 기능 - 확인 필요로 남긴 항목 ## 실행 결과 검증 -- [ ] `current.md`의 기본 Milestone과 진행 중인 Milestone 경로가 실제 파일을 가리키는가 -- [ ] `current.md`가 `# 현재 로드맵 컨텍스트`, `현재 Phase`, `기본 Milestone`, `기본 Milestone 파일`, `진행 중인 Milestone` 형식을 유지하는가 -- [ ] `ROADMAP.md`의 현재 위치와 Milestone 인덱스가 `current.md`와 일치하는가 -- [ ] 대상 Milestone 문서의 상태가 `ROADMAP.md`의 Milestone 인덱스 상태와 일치하는가 +- [ ] `current.md`의 활성 Milestone 경로가 실제 파일을 가리키는가 +- [ ] `current.md`가 `# 현재 로드맵 컨텍스트`, `활성 Milestone`, `선택 규칙` 형식을 유지하는가 +- [ ] `ROADMAP.md`의 Milestone 목록과 대상 Milestone 문서의 상태가 서로 충돌하지 않는가 +- [ ] 대상 Milestone 문서의 상태가 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나인가 - [ ] 완료 처리한 기능에 사용자 설명 또는 확인 가능한 evidence가 있는가 - [ ] `rules/project/rules.md`가 있는 경우 마일스톤 컨텍스트 로딩 섹션이 유지되는가 -- 검증 실패 시: 불일치한 파일만 다시 읽고 해당 항목만 수정한다 +- 검증 실패 시: 불일치한 파일만 다시 읽고 해당 항목만 수정한다. ## 출력 형식 @@ -133,14 +151,13 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 - 수정 파일: - agent-ops/roadmap/ROADMAP.md - agent-ops/roadmap/current.md - - agent-ops/roadmap/milestones/MNN-.md + - agent-ops/roadmap/milestones/.md ## 변경 사항 -- Phase: <변경 없음 | 이전 → 이후> -- 기본 Milestone: <변경 없음 | 이전 → 이후> -- 진행 중인 Milestone: <변경 없음 | 추가/제거 요약> -- 상태: <변경 없음 | 이전 → 이후> +- Phase: <변경 없음 | 요약> +- 활성 Milestone: <변경 없음 | 추가/제거 요약> +- 상태: <변경 없음 | 이전 -> 이후> - 필수 기능: <추가/수정/완료/제거 요약> ## TODO 항목 @@ -150,9 +167,11 @@ description: 기존 전체 목표, Phase, Milestone 기반 한국어 로드맵 ## 금지 사항 -- 로드맵 파일이 없는데 새 구조를 임의로 만들지 않는다. 이 경우 `create-roadmap`을 사용한다 -- evidence 없이 기능이나 Milestone을 완료 처리하지 않는다 -- 전체 `ROADMAP.md`를 모든 작업의 필수 로딩 파일로 만들지 않는다 -- 완료된 Milestone 기록을 삭제하지 않는다 -- Milestone 목표와 범위 제외 항목을 무시하고 기능 목록만 갱신하지 않는다 -- 타겟 프로젝트에서 `agent-ops/rules/common/` 또는 `agent-ops/skills/common/`을 직접 수정하지 않는다 +- 로드맵 파일이 없는데 새 구조를 임의로 만들지 않는다. 이 경우 `create-roadmap`을 사용한다. +- evidence 없이 기능이나 Milestone을 완료 처리하지 않는다. +- 전체 `ROADMAP.md`를 모든 작업의 필수 로딩 파일로 만들지 않는다. +- 완료된 Milestone 기록을 삭제하지 않는다. +- Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다. +- 기존 순번 파일명을 대규모 rename하지 않는다. +- Milestone 목표와 범위 제외 항목을 무시하고 기능 목록만 갱신하지 않는다. +- 타겟 프로젝트에서 `agent-ops/rules/common/` 또는 `agent-ops/skills/common/`을 직접 수정하지 않는다.