---
name: update-roadmap
version: 1.12.0
description: 기존 전체 목표, Phase, 결정 필요 체크리스트 기반 구현 잠금이 있는 순번 없는 Milestone 기반 한국어 로드맵을 갱신하고 신규 작업 배치, current.md 동기화, 완료/폐기 Milestone 아카이빙을 처리하는 공통 스킬
---

# 로드맵 업데이트

## 목적

기존 `agent-ops/roadmap/` 구조를 현재 프로젝트 방향과 진행 상태에 맞게 한국어로 갱신한다.
로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 활성 Milestone 창이 실제 작업 후보 목록으로 동작하게 한다.
Milestone은 구현 계획이 아니라 방향성, 범위, 위험, 확인 필요 사항을 기록하는 협업 문서로 유지한다.
구현 잠금은 승인 절차가 아니라 사용자 결정이 필요한지 표시하는 얇은 상태다.
제품 방향, 범위, 우선순위, 책임 경계처럼 사용자만 결정할 수 있는 항목이 남아 있으면 `잠금`으로 두고 `결정 필요` 체크리스트에 질문을 적는다.
기존 구조, 도메인 rule, 플랫폼 관례, 업계 표준으로 합리적으로 정할 수 있는 항목은 `결정 필요`가 아니라 필요 시 표준선으로 기록한다.
Milestone 전체에서 사용자만 결정할 항목이 더 이상 없고 에이전트가 표준선에 따라 실행하면 되는 상태라면 `해제`로 둔다.
잠금 상태 변경은 Milestone 완료 판정이 아니므로 `필수 기능`과 `완료 기준`을 자동 완료 처리하지 않는다.
완료 또는 폐기되어 현재 작업 후보에서 제외할 과거 Milestone은 `agent-ops/roadmap/archive/YYYY/MM/`로 이동하고, `ROADMAP.md`에는 아카이빙 당시 요약만 남긴다.
아카이브된 Milestone은 최신 스킬 규약이나 템플릿에 맞춰 재포맷하지 않고, 사용자가 명시적으로 과거 기록 확인이나 복원을 요청한 경우에만 읽는다.

## 언제 호출할지

- 사용자가 "로드맵 업데이트", "마일스톤 갱신", "phase 변경", "현재 활성 마일스톤 바꿔줘"라고 요청할 때
- 사용자가 "로드맵 한국어 전환", "로드맵 번역", "영문 로드맵을 한국어로 바꿔줘"라고 요청할 때
- Milestone 완료, 보류, 폐기, 신규 추가가 필요할 때
- 완료 또는 폐기된 Milestone을 요약하고 archive로 이동해야 할 때
- 특정 기능이나 작업을 새 Milestone, 기존 Milestone의 태스크, 기존 태스크 하위 항목 중 적절한 위치에 추가해야 할 때
- 활성 Milestone 창에 포함할 Milestone 목록이 달라졌을 때
- 기본 목표, Phase, Milestone의 목표, 범위, 필수 기능, 완료 기준이 달라졌을 때
- `ROADMAP.md` 또는 `current.md` 형식이 템플릿과 달라 표준화해야 할 때
- Milestone 문서 형식이 제각각이라 템플릿 기준으로 표준화해야 할 때
- 실제 구현 상태와 로드맵 파일이 어긋난 것 같아 동기화가 필요할 때
- 사용자가 Milestone의 방향/범위 보완, 구현 잠금 해제, 또는 잠금 상태 점검을 요청할 때

## 입력

- `mode`: `status` / `milestone` / `phase` / `replan` / `sync` / `concretize` / `archive` 중 하나 (선택, 요청에서 추론 가능)
- `target-milestone`: 갱신할 Milestone 이름, slug, 파일 경로 (선택)
- `active-milestones`: 활성 Milestone 창에 둘 Milestone 이름, slug, 파일 경로 목록 (선택)
- `new-feature`: 추가할 기능, 작업, 또는 새 Milestone 설명 (선택)
- `placement`: 새 작업 배치 위치. 예: `<anchor-milestone> 앞`, `<anchor-milestone> 뒤`, `<milestone-name> 안`, `<phase-name> 안`, `<anchor-task> 앞`, `<anchor-task> 아래`, `auto` (선택, 없으면 자동 판단)
- `placement-unit`: 삽입 단위. `milestone` / `task` / `subtask` / `auto` 중 하나 (선택, 없으면 작업 성격으로 판단)
- `lock-state`: Milestone 구현 잠금 상태. `잠금` / `해제` 중 하나 (선택, 없으면 기존 상태 유지 또는 결정 필요 여부로 판단)
- `decision-needed`: `구현 잠금`에 남길 사용자만 결정할 수 있는 질문 목록 (선택)
- `unlock-evidence`: 이전 문서 호환 입력. 새 문서에서는 별도 해제 근거 대신 필요한 사용자 결정이 남아 있는지로 상태를 판단한다 (선택)
- `concretization-evidence`: 이전 문서 호환 입력. 새 문서에서는 `decision-needed`를 우선 사용한다 (선택)
- `change-summary`: 반영할 방향 변경 또는 진행 상황 요약 (선택)
- `evidence`: 완료 판단에 사용할 파일, PR, 테스트, 커밋, 사용자 설명 (선택)
- `archive-date`: Milestone 아카이브 날짜. 없으면 현재 날짜를 사용한다 (선택)
- `archive-summary`: `ROADMAP.md`에 남길 과거 Milestone 요약. 없으면 대상 Milestone 문서와 evidence에서 1~2문장으로 추출한다 (선택)

## 모드

| mode | 사용 상황 |
|------|-----------|
| `status` | 태스크 체크박스, Milestone 상태, 완료 기준만 갱신 |
| `milestone` | Milestone 목표, 범위, 태스크 체크리스트, 완료 기준 수정 |
| `phase` | Phase 설명 또는 활성 Milestone 창 전환 |
| `replan` | 전체 Phase/Milestone 흐름 재구성 |
| `sync` | 실제 프로젝트 상태와 로드맵 불일치 점검 후 보정 |
| `concretize` | Milestone의 방향/범위를 보완하거나 결정 필요 여부에 따라 잠금 상태를 갱신 |
| `archive` | 완료 또는 폐기된 Milestone을 요약하고 `agent-ops/roadmap/archive/YYYY/MM/`로 이동 |

## 작성 언어

- `agent-ops/roadmap/` 하위 로드맵 문서는 사람이 함께 검토하고 수정하는 협업 문서이므로 기본 작성 언어를 한국어로 한다.
- 전체 구성, 섹션 제목, 설명 문장, 기능 설명, 완료 기준, TODO, 가정은 한국어 문장으로 작성한다.
- Goal, Phase, Milestone, Scope, API, CLI처럼 개발자에게 자연스러운 일반 용어, 파일명, 경로, slug, 코드 식별자는 영어 또는 숫자를 유지할 수 있다.
- 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다.
- 기존 영문 상태 값은 `Planned` -> `계획`, `Active` -> `진행 중`, `Done` -> `완료`, `Paused` -> `보류`, `Dropped` -> `폐기`로 맞춘다.
- 기존 영문 섹션명이 갱신 범위에 포함되면 아래 한국어 표준 섹션명으로 정리한다.
  - `Goal` -> `목표`
  - `Phase` -> `단계`
  - `Status` -> `상태`
  - `Implementation Lock` / `구현 구체화` -> `구현 잠금`
  - `Scope` -> `범위`
  - `Required Features` -> `필수 기능`
  - `Success Criteria` -> `완료 기준`
  - `Non-Goals` -> `범위 제외`
  - `Context for Work` -> `작업 컨텍스트`

## 로드맵 문서 템플릿

- `agent-ops/roadmap/ROADMAP.md`는 `agent-ops/skills/common/_templates/roadmap-template.md` 형식을 기준으로 생성·갱신한다.
- `agent-ops/roadmap/current.md`는 `agent-ops/skills/common/_templates/roadmap-current-template.md` 형식을 기준으로 생성·갱신한다.
- `ROADMAP.md` 표준 섹션은 `전체 목표`, `Phase 흐름`, `Milestone 목록`, `아카이브 Milestone 요약`, `로딩 정책`이다.
- `ROADMAP.md`에는 Phase/Milestone 흐름, 현재 참조할 Milestone 문서 링크, 아카이브된 Milestone 요약만 두고, 상세 작업 체크리스트는 Milestone 문서에 둔다.
- `Milestone 목록`은 현재 흐름에서 직접 참조할 아카이브되지 않은 Milestone 목록이다. 아카이브된 항목은 이 목록에서 제거하고 `아카이브 Milestone 요약`으로 옮긴다.
- `아카이브 Milestone 요약`에는 아카이브 당시 상태, 날짜, 목표 요약, 핵심 산출물 또는 근거, 후속 영향만 짧게 남긴다. 아카이브 문서 링크나 상세 경로는 넣지 않는다.
- `current.md` 표준 섹션은 `활성 Milestone`, `선택 규칙`이다.
- `current.md`는 활성 Milestone 후보 목록이며, 개인별 현재 작업 위치나 완료 상태의 진실로 쓰지 않는다.
- `current.md`의 활성 Milestone은 `agent-ops/roadmap/milestones/` 하위 문서만 가리키며, `agent-ops/roadmap/archive/**`는 포함하지 않는다.
- 갱신 범위에 포함된 `ROADMAP.md`나 `current.md`가 템플릿과 다르면, 프로젝트 로드맵 정보는 보존하면서 표준 섹션 순서로 재배치한다.
- `current.md`에 남아 있는 개인별 또는 세션별 작업 위치/완료 상태는 공유 로드맵 정보로 이관하지 말고 결과 보고의 확인 필요 항목에 남긴다.

## Milestone 문서 템플릿

- Milestone 문서는 `agent-ops/skills/common/_templates/roadmap-milestone-template.md` 형식을 기준으로 생성·갱신한다.
- 표준 섹션 순서는 `목표`, `단계`, `상태`, `구현 잠금`, `범위`, `필수 기능`, `완료 기준`, `범위 제외`, `작업 컨텍스트`다.
- 갱신 범위에 포함된 Milestone 문서가 제각각 형식이면, 내용을 삭제하지 말고 표준 섹션 순서로 재배치한다.
- 기존 Milestone에 `구현 잠금` 섹션이 없으면 추가하고, 사용자만 결정할 수 있는 항목이 남아 있는지 보고 `잠금` 또는 `해제`를 정한다.
- `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 코드 구현, `agent-task` 구현 계획, 세부 API/파일 구조 확정을 시작하기 전에 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인한다.
- `구현 잠금`은 사용자만 결정할 수 있는 항목이 있으면 `잠금`, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없고 에이전트가 표준선에 따라 실행하면 되면 `해제`로 둔다.
- `구현 잠금`에는 상태와 `결정 필요` 체크리스트만 유지한다. 결정할 항목이 없으면 `결정 필요: 없음`으로 적고, 별도 해제 근거/금지 목록은 만들지 않는다.
- 기존 Milestone 문서에 `이유`, `해제 근거`, `잠금 중 금지`, 잠금 해제를 위한 별도 체크리스트가 있으면 사용자만 결정할 수 있는 질문만 `결정 필요` 체크리스트로 옮기고, 표준선이나 배경 설명은 `작업 컨텍스트`로 옮기거나 제거한다.
- `필수 기능`은 구현 파일/함수 단위 작업 목록이 아니라 Milestone에서 달성해야 할 capability 또는 산출물 체크리스트로 유지한다.
- `필수 기능`의 각 체크리스트 항목은 `- [ ] [item-id] 설명` 형식을 사용한다. item-id는 사람이 타이핑하고 LLM이 참조하기 쉬운 공백 없는 짧은 ASCII 토큰으로 작성한다.
- item-id는 영문/숫자 segment 1~4개로 작성하고, segment 구분자는 `-`, `_`, `+`, `=`만 사용한다. 가능하면 1~3 segment를 우선하며, 전체 길이는 32자 이하를 권장한다.
- item-id의 유일성 범위는 해당 Milestone 문서 안으로 제한하며, 다른 Milestone에서는 같은 item-id를 다시 사용할 수 있다. 기존 item-id는 사용자가 명시적으로 바꾸라고 하지 않는 한 보존하고, 새 항목에는 소문자 영문 중심의 의미 있는 id를 만든다.
- `완료 기준`은 검증 가능한 조건의 체크리스트로 유지한다.
- 일반 불릿이나 설명 문장에 숨어 있는 capability/산출물은 성격을 판단해 `필수 기능` 체크리스트 또는 기존 항목의 하위 체크리스트로 옮긴다.
- `범위`, `범위 제외`, `작업 컨텍스트`는 설명 목록으로 유지하고, 실행해야 할 작업을 이 섹션에 숨기지 않는다.

## Milestone 아카이브 정책

- 활성 또는 예정 Milestone 문서는 `agent-ops/roadmap/milestones/<milestone-slug>.md`에 둔다.
- 완료 또는 폐기되어 현재 작업 후보에서 제외할 Milestone은 `agent-ops/roadmap/archive/YYYY/MM/<milestone-slug>.md`로 이동한다.
- 아카이브 날짜는 사용자 지정 `archive-date`, 완료 evidence 날짜, 현재 날짜 순으로 결정한다.
- 아카이브 전 대상 Milestone 문서를 1회 읽어 `ROADMAP.md`의 `아카이브 Milestone 요약`에 남길 요약을 만든다.
- 아카이브 요약은 `Milestone 이름`, `상태`, `아카이브일`, `요약`, `핵심 산출물/근거`, `후속 영향`만 짧게 담는다.
- 첫 아카이브 항목을 추가할 때 `아카이브 Milestone 요약`의 `- 없음` placeholder는 제거한다.
- 아카이브된 Milestone은 `ROADMAP.md`의 `Milestone 목록`에서 제거하고, `current.md`의 활성 Milestone에서도 제거한다.
- `agent-ops/roadmap/archive/**`는 사용자가 과거 기록 확인, 복원, 또는 아카이브 문서 직접 수정을 명시적으로 요청한 경우에만 읽는다.
- sync, 템플릿 표준화, 스킬 규약 업데이트는 아카이브 문서를 갱신 범위에 포함하지 않는다.
- 아카이브 문서는 아카이빙 당시의 기록 스냅샷으로 보고, 최신 `roadmap-milestone-template.md` 형식에 맞춰 재포맷하지 않는다.
- 아카이브 대상 경로가 이미 있으면 덮어쓰지 않고 확장자 앞에 `-1`, `-2`처럼 다음 숫자를 붙인다.

## 순서 정책

- Phase와 Milestone 이름에 `1`, `2`, `M01`, `P1` 같은 순번을 붙이지 않는다.
- 진행 순서는 `ROADMAP.md`에 적힌 위에서 아래 순서로만 해석한다.
- 새 Milestone 파일은 순번 없이 `agent-ops/roadmap/milestones/<milestone-slug>.md`로 만든다.
- 중간에 Phase나 Milestone을 끼워 넣을 수 있도록 기존 항목의 이름과 파일명을 불필요하게 바꾸지 않는다.
- 기존 프로젝트에 이미 순번 파일명이 있으면 대규모 rename을 하지 말고, 갱신 범위에 포함된 새 항목부터 순번 없는 형식을 적용한다.
- 새 작업은 습관적으로 새 Milestone으로 만들거나 목록 맨 앞/뒤에 붙이지 않는다.
- 사용자가 특정 Milestone 앞/뒤, 특정 Phase 안, 필수 기능 목록 내 위치, 기존 태스크 item-id, 또는 기존 태스크 앞/뒤/아래를 지정하면 목표와 범위 제외 항목에 충돌하지 않는 한 그 위치를 우선한다.
- 사용자가 위치를 지정하지 않으면 `ROADMAP.md`의 Phase 흐름, 기존 Milestone 목표, 기존 필수 기능/태스크, 선후 의존성, 활성 Milestone 창, 완료 기준을 보고 가장 자연스러운 위치를 자동으로 판단한다.
- 자동 배치한 경우 결과 보고에 선택한 삽입 단위, Phase/Milestone/태스크 위치, 판단 근거를 짧게 남긴다.

## 삽입 단위 정책

신규 추가 요청은 먼저 "어디에 둘지"와 "어떤 단위로 둘지"를 분리해서 판단한다. 여기서 태스크는 Milestone 문서 `필수 기능` 섹션의 체크리스트 항목 또는 기존 체크리스트 항목을 뜻한다.

| 삽입 단위 | 사용 기준 |
|-----------|-----------|
| 새 Milestone | 독립적인 목표와 완료 기준이 필요하거나, 여러 기능을 묶는 산출물이고, 별도 상태 추적이 필요하며, Phase 흐름이나 선후 의존성에 의미 있는 경계를 만든다 |
| 기존 Milestone의 태스크 | 기존 Milestone의 목표와 범위 안에 들어가며, 하나의 완료 가능한 capability/산출물이지만 별도 Milestone 상태 추적까지는 필요하지 않다 |
| 기존 태스크의 하위 작업 | 기존 태스크의 구현 세부, 보완, 테스트, 문서화, 예외 처리, 완료 기준 보완처럼 부모 태스크를 완성하기 위한 세부 항목이다. 잠긴 Milestone이어도 현재 작업에 직접 영향을 주는 사용자 결정이 없고 표준선으로 처리 가능하면 사용할 수 있다 |
| 작업 컨텍스트/TODO | 사용자 결정이 아니라 조사/확인이 먼저 필요해 필수 기능으로 확정하기 어렵다 |

- 신규 Milestone은 사용자만 결정할 수 있는 항목이 있으면 `구현 잠금: 잠금`, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없으면 `구현 잠금: 해제`로 생성한다.
- 잠긴 Milestone 안에 새 작업을 추가할 때 현재 요청에 직접 걸리는 사용자 결정은 `결정 필요` 체크리스트로 옮기고, 표준선으로 처리 가능한 세부 작업은 관련 `필수 기능` 항목의 하위 작업이나 `작업 컨텍스트`로 배치한다.
- `구현 잠금`이 없거나 잠긴 Milestone에 대해 사용자가 작업, 구현, 계획 작성을 명시하면 현재 요청에 직접 영향을 주는 결정 필요 항목이 남아 있는지 먼저 판단한다. 남은 결정이 없으면 잠금을 유지하더라도 표준선으로 요청한 작업을 이어갈 수 있고, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없을 때만 상태를 `해제`로 갱신한다.
- 위치 지정이 있으면 anchor의 레벨을 먼저 확인한다. `<anchor-task> 아래`처럼 하위 위치가 명시되면 기존 태스크 하위 항목으로 넣고, `<anchor-task> 앞/뒤`면 같은 목록 레벨의 형제 항목으로 넣는다.
- 사용자가 item-id를 언급하면 해당 Milestone의 `필수 기능` 체크리스트에서 정확히 일치하는 item-id를 우선 매칭한다. 중복되거나 없으면 임의로 고르지 말고 확인한다.
- 여러 Milestone 후보에서 같은 item-id가 발견되면 item-id만으로 확정하지 말고 Milestone 이름이나 문서 경로를 확인한다.
- 위치는 지정됐지만 단위가 명시되지 않은 경우, anchor 레벨과 작업 성격을 함께 보고 새 Milestone, 태스크, 하위 작업 중 하나를 선택한다.
- 위치 지정이 `<phase-name> 안` 또는 `<milestone-name> 안`처럼 컨테이너만 지정된 경우, 해제된 Milestone에서 작업 내용이 기존 태스크의 세부 구현이면 해당 컨테이너 안에서 가장 관련 있는 태스크 아래에 넣을 수 있다. 이 경우 결과 보고에 "위치는 지정된 컨테이너를 따랐고, 단위는 하위 작업으로 판단"처럼 남긴다.
- 위치 지정이 `<anchor-milestone> 앞/뒤` 또는 `<anchor-task> 앞/뒤`처럼 순서 anchor인 경우, 같은 레벨의 앞/뒤 배치를 유지한다. 작업 성격상 다른 레벨이 더 적절해 보여도 조용히 재배치하지 말고 사용자에게 확인한다.
- `placement-unit`을 사용자가 명시한 경우 그 단위를 우선한다. 다만 지정 단위가 anchor 레벨, Milestone 목표, 범위 제외, 명백한 선후 의존성과 충돌하면 수정 전에 충돌 내용을 알리고 방향을 확인한다.
- 작업이 둘 이상의 Milestone에 걸치면 바로 하나의 기존 태스크에 넣지 않는다. 공통 기반 작업이면 새 Milestone을 고려하고, 단순 연계 작업이면 각 Milestone에 나눌지 사용자에게 확인한다.
- 기존 태스크와 중복되거나 기존 태스크의 완료 기준으로 자연스럽게 흡수되는 요청은 새 Milestone이나 새 형제 태스크로 만들지 말고 기존 태스크를 보완한다.

### current.md 형식

`agent-ops/roadmap/current.md`는 `agent-ops/skills/common/_templates/roadmap-current-template.md` 형식을 유지한다.

`current.md`는 개인별 작업 위치나 완료 상태의 진실이 아니다. 현재 열려 있는 Milestone 후보 목록이며, 실제 현 작업 지점과 남은 작업은 `analyze-roadmap-position` 스킬이 코드와 git 상태를 함께 읽고 분석한다.

## 먼저 확인할 것

- [ ] `agent-ops/roadmap/ROADMAP.md` 존재 여부 확인
- [ ] `agent-ops/roadmap/current.md` 존재 여부 확인
- [ ] `current.md`가 가리키는 활성 Milestone 문서 존재 여부 확인
- [ ] `current.md`가 `agent-ops/roadmap/archive/**` 경로를 가리키지 않는지 확인
- [ ] `current.md`가 정해진 한국어 형식을 유지하는지 확인
- [ ] `agent-ops/skills/common/_templates/roadmap-template.md`를 읽어 최신 ROADMAP 형식 확인
- [ ] `agent-ops/skills/common/_templates/roadmap-current-template.md`를 읽어 최신 current.md 형식 확인
- [ ] `agent-ops/skills/common/_templates/roadmap-milestone-template.md`를 읽어 최신 Milestone 형식 확인
- [ ] 로드맵 파일이 없으면 `create-roadmap` 스킬 사용을 안내하고 중단
- [ ] 완료 상태로 바꾸는 경우 사용자의 명시 또는 확인 가능한 evidence가 있는지 확인
- [ ] archive 모드이면 대상 Milestone이 `agent-ops/roadmap/milestones/` 하위에 있고, `ROADMAP.md`에 남길 요약 근거가 있는지 확인
- [ ] 대상 Milestone의 `구현 잠금` 상태와 `결정 필요` 체크리스트를 확인. 섹션이 없거나 잠금 상태에서 작업/구현/계획 작성을 요청받은 경우 현재 요청에 직접 영향을 주는 사용자 결정이 남아 있는지 판단한다.
- [ ] Milestone 전체에서 사용자만 결정할 항목이 더 이상 없으면 `구현 잠금`을 `해제`로 두고, 현재 요청과 직접 관련 없더라도 사용자 결정 항목이 남아 있으면 `잠금` 상태와 체크리스트를 유지한다.

## 실행 절차

1. **갱신 범위 결정**
   - 요청에서 mode, target Milestone, new feature, placement, placement-unit을 추론한다.
   - 요청이 Milestone 방향/범위 보완, 잠금 해제, 결정 필요 항목 정리, 또는 잠긴 Milestone의 작업/구현/계획 작성이면 `concretize`로 본다.
   - 요청이 완료 또는 폐기된 Milestone을 과거 기록으로 넘기는 것이라면 `archive`로 본다.
   - 로드맵 언어 전환, ROADMAP/current 형식 표준화, 또는 Milestone 형식 표준화 요청이면 `sync`로 보고 `ROADMAP.md`, `current.md`, `agent-ops/roadmap/milestones/` 하위 Milestone 문서를 갱신 범위에 포함할 수 있다.
   - `sync` 또는 템플릿 표준화 요청에서도 `agent-ops/roadmap/archive/**`는 갱신 범위에 포함하지 않는다.
   - `status` 갱신이면 `current.md`와 대상 Milestone 문서를 우선 읽는다.
   - `archive`이면 `ROADMAP.md`, `current.md`, 대상 Milestone 문서만 읽고 아카이브 디렉터리의 다른 문서는 읽지 않는다.
   - 요청이 활성 Milestone에 없으면 `ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
   - Phase 전환, Milestone 추가/삭제, 순서 변경, 전체 재계획이면 `ROADMAP.md`도 읽는다.
   - 신규 작업 추가이고 placement가 명시되어 있으면 anchor의 종류(Phase, Milestone, 태스크), 앞/뒤/안/아래 방향, 대상 Phase 또는 Milestone을 함께 기록한다.
   - 불필요하게 모든 Milestone 문서를 읽지 않는다.

2. **현재 로드맵 상태 파악**
   - `ROADMAP.md`의 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약을 확인한다.
   - `current.md`의 활성 Milestone 창과 선택 규칙을 확인한다.
   - `current.md`에 아카이브 경로가 있으면 해당 항목을 읽지 말고 제거 대상으로 기록한다.
   - `ROADMAP.md`와 `current.md`가 표준 템플릿 섹션 순서와 형식을 따르는지 확인한다.
   - 대상 또는 후보 Milestone 문서의 목표, 범위, 필수 기능, 완료 기준, 범위 제외 항목을 확인한다.
   - 대상 또는 후보 Milestone 문서의 `구현 잠금` 상태와 `결정 필요` 항목을 확인한다.
   - `구현 잠금`이 없거나 잠긴 Milestone에 대한 작업, 구현, 구현 계획 요청이면 현재 요청에 직접 영향을 주는 사용자 결정이 남아 있는지 판단한다. 남은 결정이 없으면 잠금을 유지하더라도 표준선으로 요청한 작업을 이어갈 수 있고, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없는 경우에만 `구현 잠금` 상태를 `해제`로 갱신한다.
   - 대상 Milestone 문서가 표준 템플릿 섹션 순서와 체크리스트 형식을 따르는지 확인한다.
   - 대상 Milestone 문서의 `필수 기능` item-id 목록을 확인하고, 중복 또는 누락이 갱신 범위에 있으면 보정 대상으로 기록한다.
   - 신규 작업과 이름, 산출물, 코드 경계, 완료 기준이 겹치는 기존 태스크가 있는지 확인한다.

3. **신규 작업 삽입 단위와 위치 판단**
   - 추가 요청이면 placement, placement-unit, 작업 성격을 함께 보고 새 Milestone, 기존 Milestone의 태스크, 기존 태스크의 하위 작업, 작업 컨텍스트/TODO 중 어느 단위가 맞는지 결정한다.
   - 사용자가 위치를 지정한 경우 `ROADMAP.md`에서 anchor Phase/Milestone을 확인하고, 필요한 경우 대상 Milestone 문서의 태스크 anchor까지 확인해 충돌 여부를 확인한다.
   - 지정된 anchor가 없거나 여러 항목과 매칭되어 모호하면 임의 배치하지 말고 사용자에게 짧게 확인한다.
   - 사용자가 순서 anchor를 지정했으면 같은 레벨의 앞/뒤 배치를 유지하고, 컨테이너 anchor를 지정했으면 컨테이너 안에서 작업 성격에 맞는 하위 단위를 선택한다.
   - 위치 지정이 없으면 `ROADMAP.md`의 위아래 흐름, 현재 활성 Milestone, 선행되어야 할 작업, 후속 작업이 기대하는 산출물, 관련 코드/문서 경계, 기존 태스크와의 포함 관계를 기준으로 자동 배치한다.
   - 자동 배치는 "가장 빨리 할 수 있는 곳"이 아니라 "의존성과 완료 기준이 자연스럽게 이어지는 곳"을 우선한다.
   - 대상 Milestone이 잠겨 있으면 현재 요청에 직접 걸리는 사용자 판단은 `구현 잠금`의 `결정 필요` 체크리스트로 옮기고, 표준선으로 처리 가능한 새 항목은 capability/산출물/완료 기준 후보 또는 관련 기존 태스크의 하위 작업으로 배치한다.
   - 기존 태스크를 완성하는 세부 구현이면 하위 작업으로 넣고, 기존 태스크와 같은 수준의 독립 완료 항목이면 같은 Milestone의 태스크로 넣는다.
   - 기존 Milestone의 목표/범위를 넓히거나 완료 기준을 과도하게 키우는 작업이면 새 Milestone으로 분리한다.
   - 사용자 지정 위치가 Phase 목표, Milestone 범위 제외, 명백한 선후 의존성과 충돌하면 수정 전에 충돌 내용을 알리고 방향을 확인한다.

4. **변경 내용 검증**
   - 기능 완료 체크는 사용자 설명 또는 파일/테스트/커밋 등 확인 가능한 근거를 기준으로 한다.
   - evidence 없이 완료 여부가 불확실하면 체크하지 않고 TODO 또는 확인 필요로 남긴다.
   - 변경 요청이 전체 목표 또는 Phase 목표와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다.

5. **로드맵 파일 갱신**
   - `ROADMAP.md`는 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약, 로딩 정책이 바뀔 때만 수정한다.
   - `current.md`는 활성 Milestone 창이 바뀔 때 `roadmap-current-template.md` 형식으로 수정한다.
   - 갱신 대상 `ROADMAP.md`가 표준 템플릿과 다르면 기존 내용을 보존하면서 `전체 목표`, `Phase 흐름`, `Milestone 목록`, `아카이브 Milestone 요약`, `로딩 정책` 순서로 정리한다.
   - 갱신 대상 `current.md`가 표준 템플릿과 다르면 기존 활성 Milestone 목록을 보존하면서 `활성 Milestone`, `선택 규칙` 순서로 정리한다.
   - `current.md`에 `agent-ops/roadmap/archive/**` 경로가 있으면 활성 Milestone에서 제거하고, 필요하면 결과 보고의 확인 필요 항목에 남긴다.
   - `ROADMAP.md`에 상세 작업 체크리스트가 있으면 삭제하지 말고 관련 Milestone 문서의 `필수 기능` 체크리스트로 옮긴다.
   - `current.md`에 개인별 현재 작업 위치나 완료 상태가 있으면 `current.md`에서는 제거하고 공유 로드맵으로 이관하지 않는다. 프로젝트에 의미 있는 근거가 명확한 내용만 관련 Milestone 문서나 작업 컨텍스트로 옮기고, 이관하지 않은 내용은 결과 보고의 확인 필요 항목에 남긴다.
   - Milestone 문서는 해당 Milestone의 목표, 범위, 필수 기능, 완료 기준, 범위 제외, 작업 컨텍스트가 바뀔 때 수정한다.
   - 갱신 대상 Milestone 문서가 표준 템플릿과 다르면 기존 내용을 보존하면서 템플릿 섹션 순서로 정리하고, 누락 섹션은 TODO 또는 확인 필요 표시와 함께 추가한다.
   - 갱신 대상 Milestone 문서에 `구현 잠금` 섹션이 없으면 추가하고, 사용자만 결정할 수 있는 항목이 남아 있는지에 따라 상태를 정한다.
   - `concretize` 모드에서는 구현 세부를 무작정 채우지 말고, 사용자 요청에 필요한 방향/범위 보완, 표준선 기록, 또는 잠금 상태 갱신만 반영한다.
   - `구현 잠금`을 갱신할 때는 `결정 필요` 항목이 남아 있는지 결과 보고에 남긴다. 이 갱신만으로 `필수 기능`이나 `완료 기준`을 완료 처리하지 않는다.
   - 새 Milestone은 사용자 지정 또는 자동 판단 위치에 삽입하고, 기존 Milestone 이름이나 파일명을 순서 맞춤 목적으로 바꾸지 않는다.
   - 새 Milestone은 사용자만 결정할 수 있는 항목이 있으면 `잠금`, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없으면 `해제`로 작성한다.
   - 기존 Milestone에 새 태스크를 넣는 경우 `필수 기능` 체크리스트에 사용자 지정 또는 자동 판단 위치로 삽입하고, 근거 없이 목록 맨 앞이나 맨 뒤에 붙이지 않는다.
   - 해제된 Milestone에서 기존 태스크의 하위 작업으로 넣는 경우 부모 태스크 아래의 하위 체크리스트로 작성하고, 부모 태스크의 의미가 바뀌면 부모 문장도 필요한 만큼만 보완한다.
   - 새로 추가하거나 형식 보정 범위에 포함된 `필수 기능` 항목은 `- [ ] [item-id] 설명` 또는 `- [x] [item-id] 설명` 형식으로 작성한다.
   - 기존 `필수 기능`이 일반 불릿이면 상태 근거를 보존해 `- [ ] [item-id] 설명` 또는 `- [x] [item-id] 설명` 체크리스트로 변환한다.
   - 기존 `필수 기능` 체크리스트에 item-id가 있으면 사용자가 명시적으로 바꾸라고 하지 않는 한 유지한다. item-id가 없는 항목을 갱신 범위에서 보정할 때는 해당 Milestone 안에서 중복되지 않는 id를 붙인다.
   - 기존 `완료 기준`이 일반 불릿이면 검증 조건 단위의 체크리스트로 변환한다.
   - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다.
   - 단순 상태 갱신이면 완료된 Milestone의 기록을 삭제하지 않고 상태만 변경한다.
   - `archive` 모드에서는 대상 Milestone의 최종 상태를 `완료` 또는 `폐기`로 확정할 근거가 있는지 확인한 뒤 진행한다.
   - `archive` 모드에서는 대상 Milestone 문서에서 `ROADMAP.md`의 `아카이브 Milestone 요약`에 남길 요약을 추출하거나, 사용자가 준 `archive-summary`를 반영한다.
   - `archive` 모드에서는 `ROADMAP.md`의 `Milestone 목록`에서 대상 링크를 제거하고, `아카이브 Milestone 요약`에 상태, 아카이브일, 요약, 핵심 산출물/근거, 후속 영향을 짧게 추가한다.
   - `archive` 모드에서는 `current.md`의 활성 Milestone 목록에서 대상 Milestone을 제거한다.
   - `archive` 모드에서는 대상 파일을 `agent-ops/roadmap/archive/YYYY/MM/<milestone-slug>.md`로 이동하고, 아카이브 대상 경로가 이미 있으면 확장자 앞에 다음 숫자를 붙인다.
   - 아카이브로 이동한 Milestone 문서는 이동 전 내용 그대로 보존하고, 최신 템플릿에 맞춘 재포맷이나 체크리스트 보정을 하지 않는다.

6. **로드맵 룰 라우팅 점검**
   - `agent-ops/rules/common/rules.md`가 `agent-ops/roadmap/` 디렉터리 존재 시 `agent-ops/rules/common/rules-roadmap.md`를 읽도록 라우팅하는지 확인한다.
   - `agent-ops/rules/common/rules.md`와 `rules-roadmap.md`에 `agent-ops/roadmap/archive/**`를 명시 요청 없이 읽지 않는 규칙이 있는지 확인한다.
   - `agent-ops/rules/common/rules-roadmap.md`에 `current.md` 의미, Milestone 선택, `ROADMAP.md` 로딩 조건, 구현 잠금, 현재 작업 지점 확인 방법, Milestone archive 정책이 포함되어 있는지 확인한다.
   - 로드맵 컨텍스트 로딩 규칙은 공통 로드맵 룰에 둔다. 프로젝트 전용 `rules/project/rules.md`에는 중복 마일스톤 컨텍스트 로딩 섹션을 추가하지 않는다.
   - 기존 프로젝트 규칙에 마일스톤 컨텍스트 로딩 섹션이 남아 있으면 프로젝트 고유 내용이 아닌지 확인하고, 공통 룰과 중복되는 내용은 제거 대상으로 보고한다.

7. **결과 보고**
   - 수정한 파일 목록
   - 변경된 Phase / Milestone / 상태
   - 신규 작업의 삽입 단위와 배치 위치, 자동 배치인 경우 판단 근거
   - ROADMAP/current/Milestone 문서 템플릿 보정 여부
   - 활성 Milestone 창 변경 사항
   - archive 모드이면 아카이브 경로와 `ROADMAP.md`에 남긴 요약
   - 체크하거나 추가/제거한 태스크 또는 하위 작업
   - 확인 필요로 남긴 항목

## 실행 결과 검증

- [ ] `current.md`의 활성 Milestone 경로가 실제 파일을 가리키는가
- [ ] `current.md`의 활성 Milestone 경로가 `agent-ops/roadmap/archive/**`를 가리키지 않는가
- [ ] `ROADMAP.md`가 `roadmap-template.md`의 섹션 순서와 형식을 따르는가
- [ ] `ROADMAP.md`에 `아카이브 Milestone 요약` 섹션이 있는가
- [ ] `current.md`가 `roadmap-current-template.md`의 섹션 순서와 형식을 따르는가
- [ ] `ROADMAP.md`의 Milestone 목록과 대상 Milestone 문서의 상태가 서로 충돌하지 않는가
- [ ] 갱신 대상 Milestone 문서가 `roadmap-milestone-template.md`의 섹션 순서와 형식을 따르는가
- [ ] 갱신 대상 Milestone 문서에 `구현 잠금` 섹션이 있는가
- [ ] 잠금 상태인 Milestone의 `구현 잠금` 섹션에 사용자만 결정할 수 있는 항목이 체크리스트로 남아 있는가
- [ ] `구현 잠금`이 없거나 잠긴 Milestone에 현재 요청과 직접 관련된 사용자 결정 필요 항목을 확인하지 않은 채 구현 태스크, `agent-task` 계획, 세부 API/파일 구조 확정을 추가하지 않았는가
- [ ] 잠금 상태를 갱신한 경우 결정 필요 항목이 남아 있는지 결과 보고에 남겼는가
- [ ] 갱신 대상 Milestone 문서의 `필수 기능`과 `완료 기준`이 체크리스트 형식인가
- [ ] 갱신 대상 Milestone 문서의 `필수 기능` 체크리스트 항목이 `- [ ] [item-id] 설명` 형식이고 item-id가 해당 Milestone 안에서 유일한가
- [ ] 신규 작업이 사용자 지정 위치를 따랐거나, 위치 미지정 시 자동 배치 근거가 남아 있는가
- [ ] 신규 작업의 삽입 단위가 작업 성격과 기존 태스크 포함 관계에 맞는가
- [ ] 자동 배치 위치가 Phase/Milestone 목표, 범위 제외 항목, 선후 의존성과 충돌하지 않는가
- [ ] 대상 Milestone 문서의 상태가 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나인가
- [ ] 완료 처리한 기능에 사용자 설명 또는 확인 가능한 evidence가 있는가
- [ ] archive 모드이면 대상 Milestone이 `Milestone 목록`과 `current.md`에서 제거되고 `아카이브 Milestone 요약`에 당시 요약이 남았는가
- [ ] archive 모드이면 이동한 문서를 최신 템플릿으로 재포맷하지 않았는가
- [ ] `rules/common/rules.md`가 로드맵 디렉터리 존재 시 `rules-roadmap.md`를 읽도록 라우팅하는가
- [ ] `rules/common/rules-roadmap.md`에 로드맵 컨텍스트 로딩, 구현 잠금, 아카이브 제외 규칙이 유지되는가
- 검증 실패 시: 불일치한 파일만 다시 읽고 해당 항목만 수정한다.

## 출력 형식

```markdown
## 업데이트 완료

- 모드: <status | milestone | phase | replan | sync | concretize | archive>
- 수정 파일: <해당 항목만 나열>
  - agent-ops/roadmap/ROADMAP.md
  - agent-ops/roadmap/current.md
  - agent-ops/roadmap/milestones/<milestone-slug>.md
  - agent-ops/roadmap/archive/YYYY/MM/<milestone-slug>.md (archive 모드)

## 변경 사항

- Phase: <변경 없음 | 요약>
- 삽입 단위: <Milestone | 태스크 | 하위 작업 | 작업 컨텍스트/TODO | 변경 없음>
- 배치: <사용자 지정 위치 반영 | 자동 배치 위치와 근거 | 변경 없음>
- 템플릿 보정: <ROADMAP 적용 | current.md 적용 | Milestone 적용 | 이미 일치 | 변경 없음>
- 구현 잠금: <잠금 유지 | 잠금 추가 | 해제 | 변경 없음>; 결정 필요: <없음 | 항목 요약>
- 활성 Milestone: <변경 없음 | 추가/제거 요약>
- 아카이브: <변경 없음 | 이동 경로와 ROADMAP 요약>
- 상태: <변경 없음 | 이전 -> 이후>
- 태스크: <추가/수정/완료/제거 요약>

## TODO 항목

- <확인이 필요한 항목> (해당 시)
```

## 금지 사항

- 로드맵 파일이 없는데 새 구조를 임의로 만들지 않는다. 이 경우 `create-roadmap`을 사용한다.
- evidence 없이 기능이나 Milestone을 완료 처리하지 않는다.
- 전체 `ROADMAP.md`를 모든 작업의 필수 로딩 파일로 만들지 않는다.
- `ROADMAP.md`에 상세 작업 체크리스트를 남기지 않는다.
- `current.md`에 개인별 현재 작업 위치나 완료 상태를 남기지 않는다.
- `current.md`에 `agent-ops/roadmap/archive/**` 경로를 남기지 않는다.
- 완료된 Milestone 기록을 삭제하지 않는다.
- 아카이브된 Milestone 문서를 명시 요청 없이 읽거나 최신 템플릿으로 재포맷하지 않는다.
- 아카이브된 Milestone을 `ROADMAP.md`의 활성 `Milestone 목록`에 링크로 계속 남기지 않는다.
- Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다.
- 기존 순번 파일명을 대규모 rename하지 않는다.
- 신규 작업을 근거 없이 항상 새 Milestone으로 만들거나 맨 앞/맨 뒤에 추가하지 않는다.
- 작업 성격과 기존 태스크 포함 관계를 확인하지 않고 모든 신규 작업을 같은 단위로 처리하지 않는다.
- `구현 잠금`이 없거나 잠긴 Milestone에 대해 현재 요청과 직접 관련된 `결정 필요` 항목을 확인하기 전에 코드 구현, `agent-task` 구현 계획, 세부 API/파일 구조 확정을 시작하지 않는다.
- 현재 요청과 직접 관련 없는 미정 항목만 남아 있거나 표준선으로 처리 가능한 작업까지 잠금 상태라는 이유만으로 막지 않는다.
- 사용자만 결정할 수 있는 항목이 남아 있는데 Milestone의 `구현 잠금`을 `해제`로 바꾸지 않는다.
- Milestone 전체에서 사용자만 결정할 항목이 더 이상 없는 Milestone을 관성적으로 `잠금` 상태로 두지 않는다.
- 초기 Milestone을 구현 계획처럼 자세한 package/file/function 체크리스트로 채우지 않는다.
- 사용자가 지정한 앞/뒤/아래 anchor 또는 대상 Phase/Milestone 컨테이너를 무시하지 않는다.
- Milestone 목표와 범위 제외 항목을 무시하고 태스크 체크리스트만 갱신하지 않는다.
- 해야 할 작업을 `필수 기능` 체크리스트 밖의 설명 문장에 숨기지 않는다.
- 사용자가 명시하지 않은 기존 `필수 기능` item-id를 바꾸지 않는다.
- 갱신 대상 Milestone의 형식이 다르다는 이유로 기존 내용이나 완료 체크 근거를 삭제하지 않는다.
- 타겟 프로젝트에서 `agent-ops/rules/common/` 또는 `agent-ops/skills/common/`을 직접 수정하지 않는다.
