From 5833babe1b1bd587912afcd6e66967c77da99234 Mon Sep 17 00:00:00 2001 From: toki Date: Sun, 24 May 2026 07:07:56 +0900 Subject: [PATCH] sync: agent-ops from agentic-framework v1.1.30 --- .clinerules | 2 +- .cursorrules | 2 +- AGENTS.md | 2 +- CLAUDE.md | 2 +- GEMINI.md | 2 +- agent-ops/.version | 2 +- agent-ops/bin/init-agent-ops.sh | 35 +++++---- agent-ops/rules/common/rules-roadmap.md | 12 ++- agent-ops/rules/common/rules.md | 2 +- .../_templates/roadmap-current-template.md | 1 + .../common/_templates/roadmap-template.md | 9 +++ .../common/analyze-roadmap-position/SKILL.md | 6 +- .../skills/common/create-roadmap/SKILL.md | 14 +++- .../skills/common/init-agent-ops/SKILL.md | 18 ++--- agent-ops/skills/common/plan/SKILL.md | 1 + agent-ops/skills/common/router.md | 2 +- .../skills/common/update-roadmap/SKILL.md | 75 +++++++++++++++---- 17 files changed, 138 insertions(+), 49 deletions(-) diff --git a/.clinerules b/.clinerules index 8095d70..226a177 100644 --- a/.clinerules +++ b/.clinerules @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/.cursorrules b/.cursorrules index 8095d70..226a177 100644 --- a/.cursorrules +++ b/.cursorrules @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/AGENTS.md b/AGENTS.md index 8095d70..226a177 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/CLAUDE.md b/CLAUDE.md index 8095d70..226a177 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/GEMINI.md b/GEMINI.md index 8095d70..226a177 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/agent-ops/.version b/agent-ops/.version index ad7bb75..40e713d 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.29 +1.1.30 diff --git a/agent-ops/bin/init-agent-ops.sh b/agent-ops/bin/init-agent-ops.sh index 7a1f196..a8be7a5 100755 --- a/agent-ops/bin/init-agent-ops.sh +++ b/agent-ops/bin/init-agent-ops.sh @@ -15,7 +15,8 @@ if [ -z "$1" ]; then fi TARGET_DIR=$(realpath "$1") -ARCHIVE_IGNORE_PATTERN="agent-task/archive/**" +TASK_ARCHIVE_IGNORE_PATTERN="agent-task/archive/**" +ROADMAP_ARCHIVE_IGNORE_PATTERN="agent-ops/roadmap/archive/**" append_unique_line() { local file="$1" @@ -81,10 +82,14 @@ apply_agent_ops_entry_files "$COMMON_RULES" "$TARGET_DIR" ensure_common_rules_file "$SOURCE_DIR" "$TARGET_DIR/agent-ops" # 4. AI ignore / permission 설정 -append_unique_line "$TARGET_DIR/.geminiignore" "$ARCHIVE_IGNORE_PATTERN" -append_unique_line "$TARGET_DIR/.aiexclude" "$ARCHIVE_IGNORE_PATTERN" -append_unique_line "$TARGET_DIR/.cursorignore" "$ARCHIVE_IGNORE_PATTERN" -append_unique_line "$TARGET_DIR/.clineignore" "$ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.geminiignore" "$TASK_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.geminiignore" "$ROADMAP_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.aiexclude" "$TASK_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.aiexclude" "$ROADMAP_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.cursorignore" "$TASK_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.cursorignore" "$ROADMAP_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.clineignore" "$TASK_ARCHIVE_IGNORE_PATTERN" +append_unique_line "$TARGET_DIR/.clineignore" "$ROADMAP_ARCHIVE_IGNORE_PATTERN" mkdir -p "$TARGET_DIR/.claude" if [ ! -f "$TARGET_DIR/.claude/settings.json" ]; then @@ -93,13 +98,14 @@ if [ ! -f "$TARGET_DIR/.claude/settings.json" ]; then "$schema": "https://json.schemastore.org/claude-code-settings.json", "permissions": { "deny": [ - "Read(./agent-task/archive/**)" + "Read(./agent-task/archive/**)", + "Read(./agent-ops/roadmap/archive/**)" ] } } EOF -elif ! grep -q "agent-task/archive" "$TARGET_DIR/.claude/settings.json"; then - echo "Note: .claude/settings.json exists; add Read(./agent-task/archive/**) manually." +elif ! grep -q "agent-task/archive" "$TARGET_DIR/.claude/settings.json" || ! grep -q "agent-ops/roadmap/archive" "$TARGET_DIR/.claude/settings.json"; then + echo "Note: .claude/settings.json exists; add Read(./agent-task/archive/**) and Read(./agent-ops/roadmap/archive/**) manually." fi if [ ! -f "$TARGET_DIR/opencode.json" ]; then @@ -108,21 +114,24 @@ if [ ! -f "$TARGET_DIR/opencode.json" ]; then "$schema": "https://opencode.ai/config.json", "permission": { "read": { - "agent-task/archive/**": "deny" + "agent-task/archive/**": "deny", + "agent-ops/roadmap/archive/**": "deny" }, "glob": { - "agent-task/archive/**": "deny" + "agent-task/archive/**": "deny", + "agent-ops/roadmap/archive/**": "deny" } }, "watcher": { "ignore": [ - "agent-task/archive/**" + "agent-task/archive/**", + "agent-ops/roadmap/archive/**" ] } } EOF -elif ! grep -q "agent-task/archive" "$TARGET_DIR/opencode.json"; then - echo "Note: opencode.json exists; add agent-task/archive/** read/glob deny and watcher ignore manually." +elif ! grep -q "agent-task/archive" "$TARGET_DIR/opencode.json" || ! grep -q "agent-ops/roadmap/archive" "$TARGET_DIR/opencode.json"; then + echo "Note: opencode.json exists; add agent-task/archive/** and agent-ops/roadmap/archive/** read/glob deny and watcher ignore manually." fi # 5. .gitignore 설정 diff --git a/agent-ops/rules/common/rules-roadmap.md b/agent-ops/rules/common/rules-roadmap.md index dc85fa1..b9a0975 100644 --- a/agent-ops/rules/common/rules-roadmap.md +++ b/agent-ops/rules/common/rules-roadmap.md @@ -5,15 +5,18 @@ ## 로딩 - 세션 최초 1회 `agent-ops/roadmap/current.md`를 읽고 활성 Milestone 후보의 이름, 경로, 선택 규칙만 짧게 기억한다. -- Milestone의 목표, 주요 범위, 범위 제외는 선택한 Milestone 문서에서 확인한다. +- 활성 Milestone 후보는 `agent-ops/roadmap/milestones/` 하위 문서만 대상으로 한다. +- Milestone의 목표, 주요 범위, 범위 제외는 선택한 활성 Milestone 문서에서 확인한다. - 일반 작업에서는 `ROADMAP.md`를 읽지 않는다. - `ROADMAP.md`는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정, 활성 Milestone 밖 작업 확인 때만 읽는다. +- `agent-ops/roadmap/archive/**`는 사용자가 과거 Milestone 상세 확인이나 복원을 명시적으로 요청한 경우에만 읽는다. ## Milestone 선택 - `current.md`는 현재 작업 위치가 아니라 활성 Milestone 후보 목록이다. - 기능 추가, 구조 변경, 스킬/문서 구조 변경 전에는 요청, 브랜치, 변경 파일, 관련 경로를 보고 관련 Milestone 문서를 1회 읽는다. - 선택한 Milestone의 목표 또는 범위 제외와 요청이 충돌하면 구현 전에 사용자에게 확인한다. +- `current.md`가 아카이브 경로를 가리키면 그 항목은 활성 후보로 읽지 말고 로드맵 갱신이 필요하다고 보고한다. ## 구현 잠금 @@ -33,3 +36,10 @@ - 현재 작업 지점이나 남은 작업 분석 요청은 `analyze-roadmap-position` 스킬로 처리한다. - 이때 `current.md`만으로 단정하지 말고 코드, git 상태, diff, 활성 Milestone 문서를 함께 본다. + +## Milestone 아카이브 + +- 완료 또는 폐기되어 현재 작업 후보에서 제외할 Milestone은 `update-roadmap` 스킬로 아카이빙한다. +- 아카이브 대상 문서는 `agent-ops/roadmap/archive/YYYY/MM/.md`로 이동한다. +- 아카이빙할 때는 `ROADMAP.md`에 당시 요약만 남기고, 아카이브 문서 자체는 최신 템플릿이나 스킬 규약에 맞춰 재포맷하지 않는다. +- 아카이브된 Milestone은 `current.md`에 남기지 않고, 일반 Milestone 선택이나 위치 분석의 후보로 삼지 않는다. diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index 8095d70..226a177 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -4,7 +4,7 @@ - 코드 변경 전 관련 domain rule을 먼저 확인한다. - 요청 범위를 넘는 변경을 하지 않는다. - 불확실하면 단정하지 말고 후보를 제시한다. -- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. `agent-ops/rules/project/rules.md`와 `agent-ops/rules/private/rules.md`는 세션 최초 1회 읽는다. 파일이 없으면 무시한다. diff --git a/agent-ops/skills/common/_templates/roadmap-current-template.md b/agent-ops/skills/common/_templates/roadmap-current-template.md index a06011f..1d2c548 100644 --- a/agent-ops/skills/common/_templates/roadmap-current-template.md +++ b/agent-ops/skills/common/_templates/roadmap-current-template.md @@ -7,6 +7,7 @@ ## 선택 규칙 - 이 문서는 활성 Milestone 후보 목록이며, 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다. +- 활성 Milestone은 `agent-ops/roadmap/milestones/` 하위 문서만 가리키며, `agent-ops/roadmap/archive/**`는 포함하지 않는다. - 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 Milestone을 선택하고 같은 세션에서 1회 읽는다. - 활성 Milestone 둘 이상에 걸치면 필요한 Milestone 문서를 모두 읽고 작업 범위를 좁힌다. - 활성 Milestone 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. diff --git a/agent-ops/skills/common/_templates/roadmap-template.md b/agent-ops/skills/common/_templates/roadmap-template.md index a4de040..c4afb32 100644 --- a/agent-ops/skills/common/_templates/roadmap-template.md +++ b/agent-ops/skills/common/_templates/roadmap-template.md @@ -14,15 +14,24 @@ - [](milestones/.md) - 상태: <계획 | 진행 중 | 완료 | 보류 | 폐기>; 목표: <짧은 목표 요약> +## 아카이브 Milestone 요약 + + +- 없음 + ## 로딩 정책 - 일반 작업에서는 `agent-ops/roadmap/ROADMAP.md`를 매번 읽지 않는다. - 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다. - `current.md`는 현재 작업 위치가 아니라 활성 Milestone 후보 목록이다. - `current.md`에는 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다. +- `current.md`의 활성 Milestone은 `agent-ops/roadmap/milestones/` 하위 문서만 가리키며, `agent-ops/roadmap/archive/**`는 포함하지 않는다. - 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 활성 Milestone 문서를 같은 세션에서 1회 읽는다. - 활성 Milestone 밖의 작업이면 이 문서의 Milestone 목록을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다. - 이 문서는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정 요청이 있을 때만 읽는다. - 상세 작업과 완료 기준은 각 Milestone 문서의 체크리스트로 관리한다. +- 완료 또는 폐기되어 아카이브된 Milestone은 이 문서의 `아카이브 Milestone 요약`에 당시 요약만 남기고, 아카이브 문서 링크나 상세 경로는 남기지 않는다. +- 상세 문서가 있는 `agent-ops/roadmap/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다. +- 아카이브된 Milestone 문서는 최신 템플릿이나 스킬 규약에 맞춰 재포맷하지 않는다. - 선택된 Milestone의 `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 코드 구현, `agent-task` 구현 계획 생성, 세부 API/파일 구조 확정을 시작하지 않는다. - `구현 잠금`이 없거나 잠긴 Milestone은 사용자가 "진행"을 요청해도 우회하지 않고, 먼저 Milestone 문서의 구현 구체화와 잠금 해제를 사용자에게 요청한다. diff --git a/agent-ops/skills/common/analyze-roadmap-position/SKILL.md b/agent-ops/skills/common/analyze-roadmap-position/SKILL.md index c0c4c78..0aa24b3 100644 --- a/agent-ops/skills/common/analyze-roadmap-position/SKILL.md +++ b/agent-ops/skills/common/analyze-roadmap-position/SKILL.md @@ -1,6 +1,6 @@ --- name: analyze-roadmap-position -version: 1.2.0 +version: 1.2.1 description: "지금 작업이 뭐지?, 현재 작업 분석, 남은 작업 확인 요청에 대해 활성 Milestone과 코드 상태를 함께 읽어 현재 작업 지점, Milestone 문서 링크, 남은 일을 추정하는 읽기 전용 스킬" --- @@ -30,6 +30,7 @@ Milestone의 `필수 기능` 항목에 item-id가 있으면 남은 작업과 판 - [ ] `agent-ops/roadmap/current.md` 존재 여부 확인 - [ ] `current.md`의 활성 Milestone 목록이 가리키는 문서 존재 여부 확인 +- [ ] 활성 Milestone 목록이 `agent-ops/roadmap/archive/**` 경로를 가리키지 않는지 확인 - [ ] 활성 Milestone 이름과 문서 경로를 결과 출력에 쓸 Markdown 링크로 기록 - [ ] git 저장소이면 현재 브랜치, `git status --short`, 변경 파일 목록 확인 - [ ] 변경 파일이 있으면 `agent-ops/rules/project/rules.md`의 도메인 매핑 기준으로 관련 domain rule 확인 @@ -38,6 +39,7 @@ Milestone의 `필수 기능` 항목에 item-id가 있으면 남은 작업과 판 1. **활성 Milestone 창 확인** - `agent-ops/roadmap/current.md`를 읽고 활성 Milestone 후보와 선택 규칙을 파악한다. + - `current.md`의 후보가 `agent-ops/roadmap/archive/**`를 가리키면 해당 문서는 읽지 말고 로드맵 갱신 필요 항목으로 기록한다. - 활성 Milestone 문서를 모두 읽되, 목록이 많으면 사용자 요청이나 변경 파일과 관련 높은 문서부터 읽는다. - 읽은 Milestone은 `: ` 형태로 보존하고, 결과 보고에서는 `[]()` Markdown 링크로 출력한다. - `current.md`가 없거나 형식이 맞지 않으면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 목록을 확인하고 불확실성을 보고한다. @@ -79,6 +81,7 @@ Milestone 문서 경로를 찾지 못한 경우에도 링크 항목을 생략하 - [ ] `current.md`만 근거로 현재 위치를 단정하지 않았는가 - [ ] 활성 Milestone 문서의 목표와 범위 제외 항목을 확인했는가 +- [ ] `agent-ops/roadmap/archive/**` 문서를 명시 요청 없이 읽지 않았는가 - [ ] 활성 Milestone 문서의 `구현 잠금` 섹션 존재 여부와 상태를 확인했는가 - [ ] 추정 Milestone마다 문서 링크를 출력했는가 - [ ] 관련 `필수 기능` 항목에 item-id가 있으면 결과에 함께 표시했는가 @@ -120,5 +123,6 @@ Milestone 문서 경로를 찾지 못한 경우에도 링크 항목을 생략하 - `current.md`만 읽고 현재 작업 위치를 확정하지 않는다. - 사용자가 명시하지 않은 상태에서 `ROADMAP.md`, `current.md`, Milestone 문서를 수정하지 않는다. +- 사용자가 명시하지 않은 상태에서 `agent-ops/roadmap/archive/**`를 읽지 않는다. - 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 122a415..bbde383 100644 --- a/agent-ops/skills/common/create-roadmap/SKILL.md +++ b/agent-ops/skills/common/create-roadmap/SKILL.md @@ -1,6 +1,6 @@ --- name: create-roadmap -version: 1.6.0 +version: 1.6.1 description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase, 구현 구체화 잠금이 있는 순번 없는 Milestone 문서, 활성 Milestone 창을 처음 생성하는 공통 스킬 --- @@ -36,6 +36,8 @@ agent-ops/ current.md milestones/ .md + archive/ + YYYY/MM/.md # 아카이빙 시 생성 ``` | 파일 | 역할 | @@ -43,13 +45,15 @@ agent-ops/ | `agent-ops/roadmap/ROADMAP.md` | 전체 목표, Phase 흐름, 문서 순서 기반 Milestone 목록. 로드맵 생성/갱신/Phase 전환 때만 읽는다 | | `agent-ops/roadmap/current.md` | 지금 열려 있는 활성 Milestone 창과 선택 규칙을 담는 얇은 포인터 | | `agent-ops/roadmap/milestones/.md` | 일반 작업 시 읽는 Milestone 단위 목표, 구현 잠금, 범위, capability 체크리스트, 완료 기준, 범위 제외 항목 | +| `agent-ops/roadmap/archive/YYYY/MM/.md` | 완료 또는 폐기되어 현재 후보에서 제외한 과거 Milestone. 사용자가 명시적으로 요청한 경우에만 읽는다 | ## 로드맵 문서 템플릿 - `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 목록, 로딩 정책만 담고, 상세 작업 체크리스트를 넣지 않는다. +- `ROADMAP.md`는 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약, 로딩 정책만 담고, 상세 작업 체크리스트를 넣지 않는다. - `current.md`는 활성 Milestone 후보 목록과 선택 규칙만 담고, 개인별 현재 작업 위치나 완료 상태를 적지 않는다. +- 아카이브된 과거 Milestone은 `ROADMAP.md`의 `아카이브 Milestone 요약`에 당시 요약만 남기며, 아카이브 문서 자체는 일반 컨텍스트로 읽지 않는다. ## Milestone 문서 템플릿 @@ -123,8 +127,9 @@ agent-ops/ 4. **로드맵 파일 생성** - `agent-ops/roadmap/ROADMAP.md`는 `roadmap-template.md`의 섹션 순서와 형식을 따른다. - `agent-ops/roadmap/current.md`는 `roadmap-current-template.md`의 섹션 순서와 형식을 따른다. - - `ROADMAP.md`에는 전체 목표, Phase 흐름, Milestone 목록, 로딩 정책을 작성하고, 상세 작업 체크리스트는 Milestone 문서에 둔다. + - `ROADMAP.md`에는 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약, 로딩 정책을 작성하고, 상세 작업 체크리스트는 Milestone 문서에 둔다. - `current.md`에는 활성 Milestone 목록과 선택 규칙만 작성하고, 개인별 현재 작업 위치나 완료 상태는 적지 않는다. + - 새 로드맵의 `아카이브 Milestone 요약`은 아카이브된 항목이 없으면 `- 없음`으로 둔다. - 각 Milestone 문서는 `roadmap-milestone-template.md`의 섹션 순서와 형식을 따른다. - 각 Milestone 문서에 `구현 잠금` 섹션을 포함한다. - 사용자가 해당 Milestone의 구현 구체화와 잠금 해제를 명시적으로 승인하지 않았으면 `구현 잠금` 상태는 `잠금`으로 작성한다. @@ -152,11 +157,13 @@ agent-ops/ - [ ] `ROADMAP.md`가 `roadmap-template.md`의 섹션 순서와 형식을 따르는가 - [ ] `current.md`가 `roadmap-current-template.md`의 섹션 순서와 형식을 따르는가 - [ ] `agent-ops/roadmap/milestones/` 하위에 순번 없는 Milestone 문서가 생성되었는가 +- [ ] `ROADMAP.md`에 `아카이브 Milestone 요약` 섹션이 있고, 아카이브된 항목이 없으면 `- 없음`으로 표시했는가 - [ ] 각 Milestone 문서가 `roadmap-milestone-template.md`의 섹션 순서와 형식을 따르는가 - [ ] 각 Milestone 문서에 `구현 잠금` 섹션이 있고, 구현 구체화가 없으면 상태가 `잠금`인가 - [ ] 각 Milestone 문서의 `필수 기능`과 `완료 기준`이 체크리스트 형식인가 - [ ] 각 Milestone 문서의 `필수 기능` 체크리스트 항목이 `- [ ] [item-id] 설명` 형식이고 item-id가 해당 Milestone 안에서 유일한가 - [ ] `ROADMAP.md`에 전체 로드맵을 일반 작업마다 읽지 말라는 로딩 정책이 포함되었는가 +- [ ] 로딩 정책에 `agent-ops/roadmap/archive/**`를 명시 요청 없이 읽지 않는다는 규칙이 포함되었는가 - [ ] 로딩 정책에 `구현 잠금`이 없거나 잠긴 Milestone의 구현/계획 시작 금지 규칙이 포함되었는가 - [ ] `agent-ops/rules/common/rules.md`가 로드맵 디렉터리 존재 시 `rules-roadmap.md`를 읽도록 라우팅하는가 - [ ] `agent-ops/rules/common/rules-roadmap.md`가 로드맵 컨텍스트 로딩과 구현 잠금 규칙을 포함하는가 @@ -187,6 +194,7 @@ agent-ops/ - 기존 `agent-ops/roadmap/` 파일을 덮어쓰지 않는다. - 일반 작업마다 전체 `ROADMAP.md`를 읽도록 규칙을 만들지 않는다. +- `current.md`에 `agent-ops/roadmap/archive/**` 경로를 넣지 않는다. - Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다. - `ROADMAP.md`에 Milestone 상세 작업 체크리스트를 넣지 않는다. - `current.md`에 개인별 현재 작업 위치나 완료 상태를 적지 않는다. diff --git a/agent-ops/skills/common/init-agent-ops/SKILL.md b/agent-ops/skills/common/init-agent-ops/SKILL.md index 6b104c3..8ad4007 100644 --- a/agent-ops/skills/common/init-agent-ops/SKILL.md +++ b/agent-ops/skills/common/init-agent-ops/SKILL.md @@ -1,6 +1,6 @@ --- name: init-agent-ops -version: 1.1.1 +version: 1.1.2 description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드를 생성하기 위한 초기 규칙 --- @@ -71,8 +71,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 | `agent-ops/rules/project/domain//rules.md` | 도메인 분석 후 생성 | | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 | -| `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | `agent-task/archive/**` 한 줄 추가 | -| `.claude/settings.json`, `opencode.json` | 파일이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정 생성, 있으면 덮어쓰지 않고 수동 병합 안내 | +| `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 한 줄씩 추가 | +| `.claude/settings.json`, `opencode.json` | 파일이 없으면 `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 읽기/검색 제외 설정 생성, 있으면 덮어쓰지 않고 수동 병합 안내 | 에이전트별 파일명: @@ -177,9 +177,9 @@ common/rules.md와 내용이 중복되지 않도록 한다. - `rules/common/rules.md`를 `agent-ops/bin/entry-files.sh`의 파일 목록으로 프로젝트 루트에 복사한다 3. **AI ignore / permission 기본 설정** - - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`를 추가한다 + - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 추가한다 - `.claude/settings.json`, `opencode.json`이 없으면 archive 읽기/검색 제외 설정을 생성한다 - - `agent-task/archive/**` 제외는 `.gitignore`에 추가하지 않는다 + - `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다 4. **agent-ops 폴더 구조 복사** - 공통 관리 레포의 `agent-ops/` 공통 폴더(bin, rules/common, skills/common)를 복사한다 @@ -233,15 +233,15 @@ common/rules.md와 내용이 중복되지 않도록 한다. - [ ] 생성된 domain rules.md가 `domain-rule-template.md` 형식을 따르는가 - [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 생성된 도메인이 모두 등록되어 있는가 - [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가 -- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`가 포함되어 있는가 -- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` 제외 설정이 있거나, 기존 파일 수동 병합 안내를 출력했는가 -- [ ] `.gitignore`에 `agent-task/archive/**`를 추가하지 않았는가 +- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 +- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외 설정이 있거나, 기존 파일 수동 병합 안내를 출력했는가 +- [ ] `.gitignore`에 `agent-task/archive/**` 또는 `agent-ops/roadmap/archive/**`를 추가하지 않았는가 - 검증 실패 시: 누락된 파일/항목을 사용자에게 알리고 해당 부분만 보완한다 ## 금지 사항 - 진입 파일에 rules/common/rules.md 외 내용을 추가하지 않는다. -- `agent-task/archive/**` 제외를 `.gitignore`에 추가하지 않는다. +- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외를 `.gitignore`에 추가하지 않는다. - 실제 구조보다 앞선 추상 구조를 강요하지 않는다. - 처음부터 많은 domain / skill을 만들지 않는다. - rules/common/rules.md를 프로젝트에서 직접 수정하지 않는다. diff --git a/agent-ops/skills/common/plan/SKILL.md b/agent-ops/skills/common/plan/SKILL.md index 7f59813..f40fc51 100644 --- a/agent-ops/skills/common/plan/SKILL.md +++ b/agent-ops/skills/common/plan/SKILL.md @@ -117,6 +117,7 @@ The routed plan file is the loop entry point. A missing active plan normally mea 로드맵 게이트: - `agent-ops/roadmap/current.md`가 있으면 구현 계획 파일을 만들기 전에 읽고, 사용자 요청, 브랜치, 변경 경로를 기준으로 관련 Milestone을 선택한다. +- `current.md`가 `agent-ops/roadmap/archive/**`를 가리키면 해당 문서는 읽지 말고 활성 Milestone이 아니라고 보고한다. - 선택한 Milestone을 한 번 읽는다. `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 `PLAN-*-G??.md`, `CODE_REVIEW-*-G??.md`를 만들지 않고 file/API/package 수준의 구현 단계도 작성하지 않는다. - "진행", "그냥 구현", "계획 작성" 같은 사용자 지시는 Milestone 잠금을 해제하지 않는다. `구현 잠금`이 없거나 잠긴 Milestone을 보고하고, 먼저 roadmap update 흐름으로 Milestone 구체화 업데이트 또는 잠금 해제를 요청하게 한다. - roadmap/current 파일이 없으면 기존 task routing 규칙대로 진행한다. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index c73a6bf..8ad21f7 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -7,7 +7,7 @@ | skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` | | README 작성해줘, README 만들어줘, 프로젝트 설명 문서 만들어줘 | `agent-ops/skills/common/create-readme/SKILL.md` | | 로드맵 만들어줘, roadmap 생성, 마일스톤 설계, goal/phase 구조 잡아줘 | `agent-ops/skills/common/create-roadmap/SKILL.md` | -| 로드맵 업데이트, roadmap 갱신, 마일스톤 갱신, phase 변경, 현재 마일스톤 변경, 로드맵 한국어 전환, 로드맵 번역 | `agent-ops/skills/common/update-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, plan 작성해, plan 만들어줘 | `agent-ops/skills/common/plan/SKILL.md` | | 코드 리뷰해줘, 리뷰 진행해, 리뷰해줘, code review, CODE_REVIEW.md, 리뷰 루프 | `agent-ops/skills/common/code-review/SKILL.md` | diff --git a/agent-ops/skills/common/update-roadmap/SKILL.md b/agent-ops/skills/common/update-roadmap/SKILL.md index cdd89f5..47b8575 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.8.0 -description: 기존 전체 목표, Phase, 구현 구체화 잠금이 있는 순번 없는 Milestone 기반 한국어 로드맵을 갱신하고 신규 작업의 삽입 위치와 단위를 사용자 지정 또는 자동 판단으로 배치하며 current.md의 활성 Milestone 창을 동기화하는 공통 스킬 +version: 1.9.0 +description: 기존 전체 목표, Phase, 구현 구체화 잠금이 있는 순번 없는 Milestone 기반 한국어 로드맵을 갱신하고 신규 작업 배치, current.md 동기화, 완료/폐기 Milestone 아카이빙을 처리하는 공통 스킬 --- # 로드맵 업데이트 @@ -12,12 +12,15 @@ description: 기존 전체 목표, Phase, 구현 구체화 잠금이 있는 순 로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 활성 Milestone 창이 실제 작업 후보 목록으로 동작하게 한다. Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트를 잡는 게이트 문서로 유지한다. 구현 구체화가 필요한 Milestone은 `구현 잠금` 상태를 `잠금`으로 두고, `구현 잠금` 섹션이 없는 Milestone도 구체화 상태 불명으로 보아 사용자가 단순히 "진행"을 요청해도 코드 구현이나 `agent-task` 구현 계획으로 내려가지 않게 한다. +완료 또는 폐기되어 현재 작업 후보에서 제외할 과거 Milestone은 `agent-ops/roadmap/archive/YYYY/MM/`로 이동하고, `ROADMAP.md`에는 아카이빙 당시 요약만 남긴다. +아카이브된 Milestone은 최신 스킬 규약이나 템플릿에 맞춰 재포맷하지 않고, 사용자가 명시적으로 과거 기록 확인이나 복원을 요청한 경우에만 읽는다. ## 언제 호출할지 - 사용자가 "로드맵 업데이트", "마일스톤 갱신", "phase 변경", "현재 활성 마일스톤 바꿔줘"라고 요청할 때 - 사용자가 "로드맵 한국어 전환", "로드맵 번역", "영문 로드맵을 한국어로 바꿔줘"라고 요청할 때 - Milestone 완료, 보류, 폐기, 신규 추가가 필요할 때 +- 완료 또는 폐기된 Milestone을 요약하고 archive로 이동해야 할 때 - 특정 기능이나 작업을 새 Milestone, 기존 Milestone의 태스크, 기존 태스크 하위 항목 중 적절한 위치에 추가해야 할 때 - 활성 Milestone 창에 포함할 Milestone 목록이 달라졌을 때 - 기본 목표, Phase, Milestone의 목표, 범위, 필수 기능, 완료 기준이 달라졌을 때 @@ -28,7 +31,7 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 ## 입력 -- `mode`: `status` / `milestone` / `phase` / `replan` / `sync` / `concretize` 중 하나 (선택, 요청에서 추론 가능) +- `mode`: `status` / `milestone` / `phase` / `replan` / `sync` / `concretize` / `archive` 중 하나 (선택, 요청에서 추론 가능) - `target-milestone`: 갱신할 Milestone 이름, slug, 파일 경로 (선택) - `active-milestones`: 활성 Milestone 창에 둘 Milestone 이름, slug, 파일 경로 목록 (선택) - `new-feature`: 추가할 기능, 작업, 또는 새 Milestone 설명 (선택) @@ -38,6 +41,8 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - `concretization-evidence`: 구현 잠금 해제 근거가 되는 사용자 승인, 설계 문서, API/프로토콜 결정, 검증 기준 (선택) - `change-summary`: 반영할 방향 변경 또는 진행 상황 요약 (선택) - `evidence`: 완료 판단에 사용할 파일, PR, 테스트, 커밋, 사용자 설명 (선택) +- `archive-date`: Milestone 아카이브 날짜. 없으면 현재 날짜를 사용한다 (선택) +- `archive-summary`: `ROADMAP.md`에 남길 과거 Milestone 요약. 없으면 대상 Milestone 문서와 evidence에서 1~2문장으로 추출한다 (선택) ## 모드 @@ -49,6 +54,7 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 | `replan` | 전체 Phase/Milestone 흐름 재구성 | | `sync` | 실제 프로젝트 상태와 로드맵 불일치 점검 후 보정 | | `concretize` | 잠긴 Milestone을 구현 가능한 수준으로 구체화하고 잠금 해제 여부를 결정 | +| `archive` | 완료 또는 폐기된 Milestone을 요약하고 `agent-ops/roadmap/archive/YYYY/MM/`로 이동 | ## 작성 언어 @@ -72,10 +78,13 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - `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 목록`, `로딩 정책`이다. -- `ROADMAP.md`에는 Phase/Milestone 흐름과 문서 링크만 두고, 상세 작업 체크리스트는 Milestone 문서에 둔다. +- `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`에 남아 있는 개인별 또는 세션별 작업 위치/완료 상태는 공유 로드맵 정보로 이관하지 말고 결과 보고의 확인 필요 항목에 남긴다. @@ -95,6 +104,20 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - 일반 불릿이나 설명 문장에 숨어 있는 capability/산출물은 성격을 판단해 `필수 기능` 체크리스트 또는 기존 항목의 하위 체크리스트로 옮긴다. - `범위`, `범위 제외`, `작업 컨텍스트`는 설명 목록으로 유지하고, 실행해야 할 작업을 이 섹션에 숨기지 않는다. +## Milestone 아카이브 정책 + +- 활성 또는 예정 Milestone 문서는 `agent-ops/roadmap/milestones/.md`에 둔다. +- 완료 또는 폐기되어 현재 작업 후보에서 제외할 Milestone은 `agent-ops/roadmap/archive/YYYY/MM/.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` 같은 순번을 붙이지 않는다. @@ -142,12 +165,14 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - [ ] `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 구체화 업데이트가 먼저 필요함을 보고하고 구현으로 진행하지 않는다. - [ ] 잠금 해제를 요청받은 경우 책임 경계, API/프로토콜, 검증 기준, 선행 조건이 Milestone 문서에 반영될 수 있는지 확인 @@ -156,16 +181,20 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 1. **갱신 범위 결정** - 요청에서 mode, target Milestone, new feature, placement, placement-unit을 추론한다. - 요청이 Milestone 구체화 또는 잠금 해제이면 `concretize`로 본다. - - 로드맵 언어 전환, ROADMAP/current 형식 표준화, 또는 Milestone 형식 표준화 요청이면 `sync`로 보고 `ROADMAP.md`, `current.md`, 전체 Milestone 문서를 갱신 범위에 포함할 수 있다. + - 요청이 완료 또는 폐기된 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 목록을 확인한다. + - `ROADMAP.md`의 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약을 확인한다. - `current.md`의 활성 Milestone 창과 선택 규칙을 확인한다. + - `current.md`에 아카이브 경로가 있으면 해당 항목을 읽지 말고 제거 대상으로 기록한다. - `ROADMAP.md`와 `current.md`가 표준 템플릿 섹션 순서와 형식을 따르는지 확인한다. - 대상 또는 후보 Milestone 문서의 목표, 범위, 필수 기능, 완료 기준, 범위 제외 항목을 확인한다. - 대상 또는 후보 Milestone 문서의 `구현 잠금` 상태와 해제 조건을 확인한다. @@ -192,10 +221,11 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - 변경 요청이 전체 목표 또는 Phase 목표와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다. 5. **로드맵 파일 갱신** - - `ROADMAP.md`는 전체 목표, Phase 흐름, Milestone 목록, 로딩 정책이 바뀔 때만 수정한다. + - `ROADMAP.md`는 전체 목표, Phase 흐름, Milestone 목록, 아카이브 Milestone 요약, 로딩 정책이 바뀔 때만 수정한다. - `current.md`는 활성 Milestone 창이 바뀔 때 `roadmap-current-template.md` 형식으로 수정한다. - - 갱신 대상 `ROADMAP.md`가 표준 템플릿과 다르면 기존 내용을 보존하면서 `전체 목표`, `Phase 흐름`, `Milestone 목록`, `로딩 정책` 순서로 정리한다. + - 갱신 대상 `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의 목표, 범위, 필수 기능, 완료 기준, 범위 제외, 작업 컨텍스트가 바뀔 때 수정한다. @@ -212,11 +242,18 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - 기존 `필수 기능` 체크리스트에 item-id가 있으면 사용자가 명시적으로 바꾸라고 하지 않는 한 유지한다. item-id가 없는 항목을 갱신 범위에서 보정할 때는 해당 Milestone 안에서 중복되지 않는 id를 붙인다. - 기존 `완료 기준`이 일반 불릿이면 검증 조건 단위의 체크리스트로 변환한다. - 상태 값은 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나만 사용한다. - - 완료된 Milestone의 기록은 삭제하지 않고 상태만 변경한다. + - 단순 상태 갱신이면 완료된 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/.md`로 이동하고, 아카이브 대상 경로가 이미 있으면 확장자 앞에 다음 숫자를 붙인다. + - 아카이브로 이동한 Milestone 문서는 이동 전 내용 그대로 보존하고, 최신 템플릿에 맞춘 재포맷이나 체크리스트 보정을 하지 않는다. 6. **로드맵 룰 라우팅 점검** - `agent-ops/rules/common/rules.md`가 `agent-ops/roadmap/` 디렉터리 존재 시 `agent-ops/rules/common/rules-roadmap.md`를 읽도록 라우팅하는지 확인한다. - - `agent-ops/rules/common/rules-roadmap.md`에 `current.md` 의미, Milestone 선택, `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`에는 중복 마일스톤 컨텍스트 로딩 섹션을 추가하지 않는다. - 기존 프로젝트 규칙에 마일스톤 컨텍스트 로딩 섹션이 남아 있으면 프로젝트 고유 내용이 아닌지 확인하고, 공통 룰과 중복되는 내용은 제거 대상으로 보고한다. @@ -226,13 +263,16 @@ 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`의 섹션 순서와 형식을 따르는가 @@ -246,8 +286,10 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - [ ] 자동 배치 위치가 Phase/Milestone 목표, 범위 제외 항목, 선후 의존성과 충돌하지 않는가 - [ ] 대상 Milestone 문서의 상태가 `계획`, `진행 중`, `완료`, `보류`, `폐기` 중 하나인가 - [ ] 완료 처리한 기능에 사용자 설명 또는 확인 가능한 evidence가 있는가 +- [ ] archive 모드이면 대상 Milestone이 `Milestone 목록`과 `current.md`에서 제거되고 `아카이브 Milestone 요약`에 당시 요약이 남았는가 +- [ ] archive 모드이면 이동한 문서를 최신 템플릿으로 재포맷하지 않았는가 - [ ] `rules/common/rules.md`가 로드맵 디렉터리 존재 시 `rules-roadmap.md`를 읽도록 라우팅하는가 -- [ ] `rules/common/rules-roadmap.md`에 로드맵 컨텍스트 로딩과 구현 잠금 규칙이 유지되는가 +- [ ] `rules/common/rules-roadmap.md`에 로드맵 컨텍스트 로딩, 구현 잠금, 아카이브 제외 규칙이 유지되는가 - 검증 실패 시: 불일치한 파일만 다시 읽고 해당 항목만 수정한다. ## 출력 형식 @@ -255,11 +297,12 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 ```markdown ## 업데이트 완료 -- 모드: -- 수정 파일: +- 모드: +- 수정 파일: <해당 항목만 나열> - agent-ops/roadmap/ROADMAP.md - agent-ops/roadmap/current.md - agent-ops/roadmap/milestones/.md + - agent-ops/roadmap/archive/YYYY/MM/.md (archive 모드) ## 변경 사항 @@ -269,6 +312,7 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - 템플릿 보정: - 구현 잠금: <잠금 유지 | 잠금 추가 | 해제 | 변경 없음> - 활성 Milestone: <변경 없음 | 추가/제거 요약> +- 아카이브: <변경 없음 | 이동 경로와 ROADMAP 요약> - 상태: <변경 없음 | 이전 -> 이후> - 태스크: <추가/수정/완료/제거 요약> @@ -284,7 +328,10 @@ Milestone은 구현 전 방향성, 범위, 선행 조건, 브레이킹 포인트 - 전체 `ROADMAP.md`를 모든 작업의 필수 로딩 파일로 만들지 않는다. - `ROADMAP.md`에 상세 작업 체크리스트를 남기지 않는다. - `current.md`에 개인별 현재 작업 위치나 완료 상태를 남기지 않는다. +- `current.md`에 `agent-ops/roadmap/archive/**` 경로를 남기지 않는다. - 완료된 Milestone 기록을 삭제하지 않는다. +- 아카이브된 Milestone 문서를 명시 요청 없이 읽거나 최신 템플릿으로 재포맷하지 않는다. +- 아카이브된 Milestone을 `ROADMAP.md`의 활성 `Milestone 목록`에 링크로 계속 남기지 않는다. - Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다. - 기존 순번 파일명을 대규모 rename하지 않는다. - 신규 작업을 근거 없이 항상 새 Milestone으로 만들거나 맨 앞/맨 뒤에 추가하지 않는다.