refactor: migrate roadmap structure from agent-ops/roadmap/ to agent-roadmap/
This commit is contained in:
parent
0e7b7d4918
commit
836f90ca9d
41 changed files with 198 additions and 198 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# BEGIN Agent-Ops managed ignore
|
||||
agent-task/archive/**
|
||||
agent-ops/roadmap/archive/**
|
||||
agent-roadmap/archive/**
|
||||
# END Agent-Ops managed ignore
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# BEGIN Agent-Ops managed ignore
|
||||
agent-task/archive/**
|
||||
agent-ops/roadmap/archive/**
|
||||
agent-roadmap/archive/**
|
||||
# END Agent-Ops managed ignore
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# BEGIN Agent-Ops managed ignore
|
||||
agent-task/archive/**
|
||||
agent-ops/roadmap/archive/**
|
||||
agent-roadmap/archive/**
|
||||
# END Agent-Ops managed ignore
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# BEGIN Agent-Ops managed ignore
|
||||
agent-task/archive/**
|
||||
agent-ops/roadmap/archive/**
|
||||
agent-roadmap/archive/**
|
||||
# END Agent-Ops managed ignore
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Shared AI ignore / permission defaults for init and sync flows.
|
||||
AGENT_OPS_TASK_ARCHIVE_IGNORE_PATTERN="agent-task/archive/**"
|
||||
AGENT_OPS_ROADMAP_ARCHIVE_IGNORE_PATTERN="agent-ops/roadmap/archive/**"
|
||||
AGENT_OPS_ROADMAP_ARCHIVE_IGNORE_PATTERN="agent-roadmap/archive/**"
|
||||
AGENT_OPS_AI_IGNORE_BLOCK_BEGIN="# BEGIN Agent-Ops managed ignore"
|
||||
AGENT_OPS_AI_IGNORE_BLOCK_END="# END Agent-Ops managed ignore"
|
||||
AGENT_OPS_AI_IGNORE_FILES=(".geminiignore" ".aiexclude" ".cursorignore" ".clineignore")
|
||||
|
|
@ -81,7 +81,7 @@ def as_object:
|
|||
.permissions = ((.permissions // {}) | as_object)
|
||||
| .permissions.deny = (
|
||||
(.permissions.deny | as_array)
|
||||
| map(select(. != "Read(./agent-ops/roadmap/archive/**)"))
|
||||
| map(select(. != "Read(./agent-roadmap/archive/**)"))
|
||||
| append_unique("Read(./agent-task/archive/**)")
|
||||
)
|
||||
'
|
||||
|
|
@ -89,7 +89,7 @@ def as_object:
|
|||
agent_ops_merge_json_with_jq \
|
||||
"$file" \
|
||||
"$filter" \
|
||||
"Note: .claude/settings.json exists; add Read(./agent-task/archive/**) and remove Read(./agent-ops/roadmap/archive/**) manually."
|
||||
"Note: .claude/settings.json exists; add Read(./agent-task/archive/**) and remove Read(./agent-roadmap/archive/**) manually."
|
||||
}
|
||||
|
||||
agent_ops_claude_settings_complete() {
|
||||
|
|
@ -101,7 +101,7 @@ def as_array:
|
|||
(.permissions.deny | as_array)
|
||||
as $deny
|
||||
| (($deny | index("Read(./agent-task/archive/**)")) != null)
|
||||
and (($deny | index("Read(./agent-ops/roadmap/archive/**)")) == null)
|
||||
and (($deny | index("Read(./agent-roadmap/archive/**)")) == null)
|
||||
'
|
||||
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
|
|
@ -124,22 +124,22 @@ def as_object:
|
|||
.permission = ((.permission // {}) | as_object)
|
||||
| .permission.read = ((.permission.read // {}) | as_object)
|
||||
| .permission.read["agent-task/archive/**"] = "deny"
|
||||
| del(.permission.read["agent-ops/roadmap/archive/**"])
|
||||
| del(.permission.read["agent-roadmap/archive/**"])
|
||||
| .permission.glob = ((.permission.glob // {}) | as_object)
|
||||
| .permission.glob["agent-task/archive/**"] = "deny"
|
||||
| del(.permission.glob["agent-ops/roadmap/archive/**"])
|
||||
| del(.permission.glob["agent-roadmap/archive/**"])
|
||||
| .watcher = ((.watcher // {}) | as_object)
|
||||
| .watcher.ignore = (
|
||||
(.watcher.ignore | as_array)
|
||||
| append_unique("agent-task/archive/**")
|
||||
| append_unique("agent-ops/roadmap/archive/**")
|
||||
| append_unique("agent-roadmap/archive/**")
|
||||
)
|
||||
'
|
||||
|
||||
agent_ops_merge_json_with_jq \
|
||||
"$file" \
|
||||
"$filter" \
|
||||
"Note: opencode.json exists; add agent-task/archive/** read/glob deny, remove agent-ops/roadmap/archive/** read/glob hard deny, and add agent-task/archive/** plus agent-ops/roadmap/archive/** watcher ignore manually."
|
||||
"Note: opencode.json exists; add agent-task/archive/** read/glob deny, remove agent-roadmap/archive/** read/glob hard deny, and add agent-task/archive/** plus agent-roadmap/archive/** watcher ignore manually."
|
||||
}
|
||||
|
||||
agent_ops_opencode_config_complete() {
|
||||
|
|
@ -150,15 +150,15 @@ def as_array:
|
|||
|
||||
(.permission.read["agent-task/archive/**"] == "deny")
|
||||
and (.permission.glob["agent-task/archive/**"] == "deny")
|
||||
and (.permission.read["agent-ops/roadmap/archive/**"] != "deny")
|
||||
and (.permission.glob["agent-ops/roadmap/archive/**"] != "deny")
|
||||
and ((.watcher.ignore | as_array) as $ignore | (($ignore | index("agent-task/archive/**")) != null) and (($ignore | index("agent-ops/roadmap/archive/**")) != null))
|
||||
and (.permission.read["agent-roadmap/archive/**"] != "deny")
|
||||
and (.permission.glob["agent-roadmap/archive/**"] != "deny")
|
||||
and ((.watcher.ignore | as_array) as $ignore | (($ignore | index("agent-task/archive/**")) != null) and (($ignore | index("agent-roadmap/archive/**")) != null))
|
||||
'
|
||||
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
jq -e "$filter" "$file" >/dev/null 2>&1
|
||||
else
|
||||
grep -q "agent-task/archive" "$file" && grep -q "agent-ops/roadmap/archive" "$file"
|
||||
grep -q "agent-task/archive" "$file" && grep -q "agent-roadmap/archive" "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -206,7 +206,7 @@ EOF
|
|||
"watcher": {
|
||||
"ignore": [
|
||||
"agent-task/archive/**",
|
||||
"agent-ops/roadmap/archive/**"
|
||||
"agent-roadmap/archive/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +1,22 @@
|
|||
# 로드맵 규칙
|
||||
|
||||
`agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서만 적용한다.
|
||||
`agent-roadmap/` 디렉터리가 있는 프로젝트에서만 적용한다.
|
||||
|
||||
## 구조
|
||||
|
||||
- 최상위 로드맵은 `agent-ops/roadmap/ROADMAP.md`다.
|
||||
- 활성 Phase는 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`에 둔다.
|
||||
- 활성 Milestone은 해당 Phase 아래 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`에 둔다.
|
||||
- 최상위 로드맵은 `agent-roadmap/ROADMAP.md`다.
|
||||
- 활성 Phase는 `agent-roadmap/phase/<phase-slug>/PHASE.md`에 둔다.
|
||||
- 활성 Milestone은 해당 Phase 아래 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`에 둔다.
|
||||
- `<phase-slug>`와 `<milestone-slug>`는 소문자 영문, 숫자, 하이픈만 사용한다.
|
||||
- 완료된 Phase는 scaffold 그대로 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 `archive/phase/<phase-slug>/milestones/` 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 `PHASE.md`에 짧은 archive 링크를 남기고, 상세 문서는 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- 완료된 Phase는 scaffold 그대로 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 `archive/phase/<phase-slug>/milestones/` 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 `PHASE.md`에 짧은 archive 링크를 남기고, 상세 문서는 `agent-roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- archive `PHASE.md`는 Phase 자체가 완료/폐기될 때만 만들며, 진행중 Phase의 완료 Milestone만 archive된 경우 archive Phase 디렉터리에 `milestones/`만 있을 수 있다.
|
||||
|
||||
## 로딩
|
||||
|
||||
- 세션 최초 1회 `agent-ops/roadmap/current.md`를 읽고 활성 Phase, 활성 Milestone의 이름, 경로, 선택 규칙만 짧게 기억한다.
|
||||
- 세션 최초 1회 `agent-roadmap/current.md`를 읽고 활성 Phase, 활성 Milestone의 이름, 경로, 선택 규칙만 짧게 기억한다.
|
||||
- 일반 작업에서는 `ROADMAP.md`를 읽지 않는다.
|
||||
- 일반 작업에서는 `agent-ops/roadmap/archive/**`를 읽지 않는다.
|
||||
- 일반 작업에서는 `agent-roadmap/archive/**`를 읽지 않는다.
|
||||
- 기능 추가, 구조 변경, 구현 계획 전에는 요청과 변경 파일에 맞는 활성 Phase와 활성 Milestone 문서를 읽는다.
|
||||
- 로드맵 현지점 확인은 `current.md`, `ROADMAP.md`의 Phase 흐름, 활성 `PHASE.md`의 Milestone 흐름, 활성 Milestone의 제목/목표/상태만 기본으로 읽는다.
|
||||
- `ROADMAP.md`는 로드맵 생성/갱신, Phase 추가/삭제/전환, 전체 구조 변경, 활성 범위 밖 작업 확인 때만 읽는다.
|
||||
|
|
@ -25,8 +25,8 @@
|
|||
## Phase와 Milestone 선택
|
||||
|
||||
- `current.md`는 현재 작업 위치가 아니라 활성 Phase와 활성 Milestone 후보 목록이다.
|
||||
- 활성 Phase는 `agent-ops/roadmap/phase/**/PHASE.md`만 대상으로 한다.
|
||||
- 활성 Milestone은 `agent-ops/roadmap/phase/**/milestones/*.md`만 대상으로 한다.
|
||||
- 활성 Phase는 `agent-roadmap/phase/**/PHASE.md`만 대상으로 한다.
|
||||
- 활성 Milestone은 `agent-roadmap/phase/**/milestones/*.md`만 대상으로 한다.
|
||||
- `current.md`에는 `[완료]` 또는 `[폐기]` Phase/Milestone을 남기지 않는다. 완료 후보는 승인 전까지 `[검토중]`으로 둔다.
|
||||
- "로드맵에 추가", "마일스톤에 추가"처럼 target 없는 신규 작업 추가 요청은 `update-roadmap` 스킬로 처리하고, Phase/Milestone/Epic/Task 배치를 자동 판단한다.
|
||||
- target 없는 신규 추가 요청은 먼저 요청 규모를 `phase`, `milestone`, `epic`, `task`, `subtask`, `context` 중 가장 작은 충분한 단위로 판정한다.
|
||||
|
|
@ -71,13 +71,13 @@
|
|||
- entry는 `id`, `locked`, `rely-on[].target`, `rely-on[].status`, `rely-on[].note`만 사용한다.
|
||||
- `locks.yaml`은 root sequence block style을 기본으로 작성한다. 예: `- id: ...` 아래에 `locked`, `rely-on`을 둔다.
|
||||
- `id`는 기본적으로 `<잠긴-project>:<잠긴-milestone-slug>`로 만든다.
|
||||
- `locked`와 `rely-on[].target`은 `<project>:agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식으로 기록한다.
|
||||
- Milestone 경로가 `agent-ops/roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다. workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-ops/roadmap/...` 경로를 붙인다.
|
||||
- `locked`와 `rely-on[].target`은 `<project>:agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식으로 기록한다.
|
||||
- Milestone 경로가 `agent-roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다. workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-roadmap/...` 경로를 붙인다.
|
||||
- `locked`는 잠긴 Milestone, `rely-on.target`은 선행 조건 Milestone이다. 둘 다 같은 workspace의 어느 활성 Phase 하위 Milestone이어도 된다. 의존 대상이 `current.md`에 있어야 한다고 가정하지 않는다.
|
||||
- "현재 마일스톤은 X 프로젝트 작업 뒤에 진행", "X 프로젝트 때문에 현재 작업 잠금", "의존성 설정해"처럼 잠긴 Milestone을 생략한 외부 의존 잠금 요청은 현재 프로젝트 `current.md`의 활성 Milestone 단일 후보를 잠긴 대상으로 삼는다.
|
||||
- 의존 대상은 명시 경로, 명시 slug, 명시 제목, 잠긴 Milestone 문서의 선행 Milestone 힌트, 대상 프로젝트 `current.md` 단일 후보 순서로 확정한다.
|
||||
- 정규화 비교는 소문자 변환, backtick/따옴표 제거, 영문/숫자가 아닌 연속 문자를 `-` 하나로 치환, 앞뒤 `-` 제거 후 Milestone 파일 slug와 정규화한 제목에 대조한다.
|
||||
- 의존 대상 탐색은 대상 프로젝트의 `agent-ops/roadmap/phase/*/milestones/*.md` 활성 문서만 대상으로 한다. archive 문서는 사용자가 archive 경로를 명시한 경우 외에는 읽거나 후보로 삼지 않는다.
|
||||
- 의존 대상 탐색은 대상 프로젝트의 `agent-roadmap/phase/*/milestones/*.md` 활성 문서만 대상으로 한다. archive 문서는 사용자가 archive 경로를 명시한 경우 외에는 읽거나 후보로 삼지 않는다.
|
||||
- 후보가 없거나 둘 이상이면 locks.yaml을 만들거나 고치지 말고 사용자에게 대상 Milestone 선택을 요청한다.
|
||||
- 외부 의존 잠금을 만들 때 대상 Milestone의 `구현 잠금`은 `잠금`으로 둔다.
|
||||
- 새 `rely-on.status`는 선행 Milestone 상태에서 파생한다. `[검토중]` 또는 `[완료]`이면 `enable`, 그 외 상태거나 상태를 확인할 수 없으면 `disable`이다.
|
||||
|
|
@ -135,8 +135,8 @@
|
|||
|
||||
- 완료 또는 폐기되어 현재 작업 후보에서 제외할 Phase/Milestone은 `update-roadmap` 스킬로 아카이빙한다.
|
||||
- `[검토중]` Phase/Milestone은 archive 대상이 아니며, 사용자 승인 전까지 활성 경로에 남긴다.
|
||||
- Phase 아카이브 대상은 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`와 같은 scaffold로 이동한다.
|
||||
- Milestone 아카이브 대상은 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`로 이동한다.
|
||||
- Phase 아카이브 대상은 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`와 같은 scaffold로 이동한다.
|
||||
- Milestone 아카이브 대상은 `agent-roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`로 이동한다.
|
||||
- 아카이빙할 때는 활성 `ROADMAP.md` 또는 활성 `PHASE.md`에 archive 문서 링크와 짧은 요약만 남긴다.
|
||||
- 아카이브된 Phase/Milestone은 `current.md`에 남기지 않고, 일반 Phase/Milestone 선택이나 위치 분석의 후보로 삼지 않는다.
|
||||
- 아카이브 문서는 과거 기록 스냅샷으로 보고, 최신 템플릿이나 스킬 규약에 맞춰 재포맷하지 않는다.
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
- 요청 범위를 넘는 변경을 하지 않는다.
|
||||
- 불확실하면 단정하지 말고 후보를 제시한다.
|
||||
- `agent-task/archive/**`는 사용자가 명시적으로 요청한 경우에만 읽는다.
|
||||
- `agent-ops/roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- `agent-roadmap/` 디렉터리가 있는 프로젝트에서도 `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 로드맵 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `agent-ops/rules/common/rules-roadmap.md`의 archive 접근 규칙을 따른다.
|
||||
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
|
||||
|
||||
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.
|
||||
|
||||
1. `agent-ops/rules/project/rules.md`
|
||||
2. `agent-ops/rules/private/rules.md`
|
||||
3. `agent-ops/roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
3. `agent-roadmap/` 디렉터리가 있으면 `agent-ops/rules/common/rules-roadmap.md`
|
||||
|
||||
# 프로젝트 간 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -3,26 +3,26 @@
|
|||
## 활성 Phase
|
||||
|
||||
- [<스케치 | 계획 | 진행중 | 검토중 | 보류>] <phase-name>
|
||||
- 경로: `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/<phase-slug>/PHASE.md`
|
||||
|
||||
## 활성 Milestone
|
||||
|
||||
- [<스케치 | 계획 | 진행중 | 검토중 | 보류>] <milestone-name>
|
||||
- Phase: `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`
|
||||
- Phase: `agent-roadmap/phase/<phase-slug>/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`
|
||||
|
||||
## 선택 규칙
|
||||
|
||||
- 이 문서는 활성 Phase와 활성 Milestone 후보 목록이며, 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다.
|
||||
- 활성 Phase는 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- 활성 Milestone은 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- 활성 Phase는 `agent-roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- 활성 Milestone은 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- 활성 항목은 아카이브 경로를 포함하지 않는다.
|
||||
- `[검토중]` 항목은 사용자 완료 확인 전까지 활성 항목으로 남길 수 있다.
|
||||
- `[스케치]` 항목은 활성 후보로 남길 수 있지만 구현 계획 생성 대상은 아니며, `[계획]` 승격 조건을 정리하는 대상으로만 다룬다.
|
||||
- `[완료]` 또는 `[폐기]` 항목은 archive 링크를 남긴 뒤 활성 항목에서 제거한다.
|
||||
- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 Phase와 Milestone을 선택하고 같은 세션에서 1회 읽는다.
|
||||
- 활성 Phase 또는 Milestone 둘 이상에 걸치면 필요한 문서를 모두 읽고 작업 범위를 좁힌다.
|
||||
- 활성 범위 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 활성 범위 밖의 작업이면 `agent-roadmap/ROADMAP.md`의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 완료된 과거 내용이 필요할 때만 `ROADMAP.md` 또는 `PHASE.md`에 있는 archive 링크를 따라가서 읽는다.
|
||||
- 선택된 Milestone의 `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 구현이나 구현 계획을 시작하기 전에 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인한다. 관련 결정이 없고 표준선으로 처리 가능하면 잠금을 유지한 채 진행할 수 있으며, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없을 때만 `구현 잠금` 상태를 `해제`로 둔다.
|
||||
- 선택된 Milestone 상태가 `[스케치]`이면 `구현 잠금` 상태와 관계없이 구현이나 구현 계획을 시작하지 않고 `[계획]` 승격 필요를 보고한다.
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/<phase-slug>/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다.
|
||||
|
||||
- [<스케치 | 계획 | 진행중 | 검토중 | 완료 | 보류 | 폐기>] <Milestone 이름>
|
||||
- 경로: `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 또는 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`
|
||||
- 경로: `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 또는 `agent-roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`
|
||||
- 요약: <목표 또는 결과 1문장>
|
||||
|
||||
## Phase 경계
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# 로드맵 현지점
|
||||
|
||||
- [current.md](agent-ops/roadmap/current.md)
|
||||
- [current.md](agent-roadmap/current.md)
|
||||
|
||||
- [로드맵: <roadmap-name>](agent-ops/roadmap/ROADMAP.md)
|
||||
- [Phase: <phase-name>](agent-ops/roadmap/phase/<phase-slug>/PHASE.md)
|
||||
- [Milestone: <milestone-name>](agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md)
|
||||
- [로드맵: <roadmap-name>](agent-roadmap/ROADMAP.md)
|
||||
- [Phase: <phase-name>](agent-roadmap/phase/<phase-slug>/PHASE.md)
|
||||
- [Milestone: <milestone-name>](agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md)
|
||||
- [<상태>] <목표 또는 역할 한 줄>
|
||||
- [Milestone: <milestone-name>](agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md)
|
||||
- [Milestone: <milestone-name>](agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md)
|
||||
- [<상태>] <목표 또는 역할 한 줄>
|
||||
|
||||
## 전체 Phase 흐름
|
||||
|
|
|
|||
|
|
@ -12,18 +12,18 @@
|
|||
스케치 Phase는 아직 구현 가능한 계획이 아니므로 계획 Phase보다 아래에 둔다.
|
||||
|
||||
- [<스케치 | 계획 | 진행중 | 검토중 | 완료 | 보류 | 폐기>] <Phase 이름>
|
||||
- 경로: `agent-ops/roadmap/phase/<phase-slug>/PHASE.md` 또는 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/<phase-slug>/PHASE.md` 또는 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`
|
||||
- 요약: <이 Phase의 목표와 역할 1문장>
|
||||
|
||||
## 로딩 정책
|
||||
|
||||
- 일반 작업에서는 `agent-ops/roadmap/ROADMAP.md`를 매번 읽지 않는다.
|
||||
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다.
|
||||
- 일반 작업에서는 `agent-roadmap/ROADMAP.md`를 매번 읽지 않는다.
|
||||
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-roadmap/current.md`를 먼저 읽는다.
|
||||
- `current.md`는 현재 작업 위치가 아니라 활성 Phase와 활성 Milestone 후보 목록이다.
|
||||
- `current.md`에는 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다.
|
||||
- `current.md`의 활성 Phase는 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- `current.md`의 활성 Milestone은 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- `current.md`는 `agent-ops/roadmap/archive/**` 경로를 활성 항목으로 포함하지 않는다.
|
||||
- `current.md`의 활성 Phase는 `agent-roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- `current.md`의 활성 Milestone은 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- `current.md`는 `agent-roadmap/archive/**` 경로를 활성 항목으로 포함하지 않는다.
|
||||
- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 활성 Phase와 Milestone 문서를 같은 세션에서 1회 읽는다.
|
||||
- 활성 Phase 또는 Milestone 밖의 작업이면 이 문서의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 이 문서는 로드맵 생성/갱신, Phase 전환, Phase 추가/수정, 전체 구조 변경 요청이 있을 때만 읽는다.
|
||||
|
|
@ -31,10 +31,10 @@
|
|||
- `[스케치]` Phase/Milestone은 방향성, 문제의식, 후보 범위, 미정 질문을 기록하는 컨셉 상태이며 구현 계획 생성 대상이 아니다.
|
||||
- `[스케치]` 항목은 `승격 조건`을 정리해 `[계획]`으로 전환한 뒤 구현 계획을 만든다.
|
||||
- 모든 기능 Task와 Task 안에 명시된 검증이 충족된 Milestone은 먼저 `[검토중]`으로 두고, 사용자 완료 확인과 archive 승인을 받은 뒤 `[완료]`로 전환한다.
|
||||
- 완료된 Phase는 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 같은 archive Phase scaffold 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 Phase 문서에 짧은 링크를 남기고, 상세 문서는 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- 완료된 Phase는 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 같은 archive Phase scaffold 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 Phase 문서에 짧은 링크를 남기고, 상세 문서는 `agent-roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- archive `PHASE.md`는 Phase 자체가 완료 또는 폐기될 때만 만들며, 진행중 Phase의 완료 Milestone만 archive된 경우 archive Phase 디렉터리에 `milestones/`만 있을 수 있다.
|
||||
- `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `ROADMAP.md` 또는 `PHASE.md`의 archive 링크를 따라가서 읽는다.
|
||||
- `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `ROADMAP.md` 또는 `PHASE.md`의 archive 링크를 따라가서 읽는다.
|
||||
- 아카이브된 Phase/Milestone 문서는 최신 템플릿이나 스킬 규약에 맞춰 재포맷하지 않는다.
|
||||
- 선택된 Milestone의 `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 코드 구현, `agent-task` 구현 계획 생성, 세부 API/파일 구조 확정을 시작하기 전에 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인한다.
|
||||
- 현재 요청과 직접 관련 없는 미정 항목은 잠금 상태로 남겨도 되며, 기존 구조/도메인 rule/플랫폼 관례로 정할 수 있는 작업은 표준선으로 기록하고 진행할 수 있다.
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ description: "여러 레포를 전환할 때 코드/git 분석 없이 전체 ROA
|
|||
## 먼저 확인할 것
|
||||
|
||||
- [ ] `agent-ops/skills/common/_templates/roadmap-position-report-template.md`를 읽어 최신 답변 템플릿 확인
|
||||
- [ ] `agent-ops/roadmap/` 디렉터리 존재 여부 확인
|
||||
- [ ] `agent-ops/roadmap/current.md` 존재 여부 확인
|
||||
- [ ] `agent-roadmap/` 디렉터리 존재 여부 확인
|
||||
- [ ] `agent-roadmap/current.md` 존재 여부 확인
|
||||
- [ ] 로드맵이 있으면 `ROADMAP.md`의 `Phase 흐름`을 확인
|
||||
- [ ] `current.md`의 활성 Phase와 활성 Milestone 이름, 상태, 경로 확인
|
||||
- [ ] 활성 Phase 문서의 `Milestone 흐름` 확인
|
||||
|
|
@ -31,10 +31,10 @@ description: "여러 레포를 전환할 때 코드/git 분석 없이 전체 ROA
|
|||
|
||||
## 실행 절차
|
||||
|
||||
1. `agent-ops/roadmap/` 존재 여부를 확인한다.
|
||||
1. `agent-roadmap/` 존재 여부를 확인한다.
|
||||
- 없으면 로드맵 없음으로 짧게 보고하고 멈춘다.
|
||||
2. `agent-ops/skills/common/_templates/roadmap-position-report-template.md`를 읽는다.
|
||||
3. `agent-ops/roadmap/current.md`를 확인한다.
|
||||
3. `agent-roadmap/current.md`를 확인한다.
|
||||
- 없으면 current 없음으로 보고하고, `ROADMAP.md`가 있으면 `Phase 흐름`만 보여준다.
|
||||
4. `ROADMAP.md`의 `Phase 흐름`을 읽어 전체 Phase 목록을 만든다.
|
||||
- 각 Phase는 상태, 이름, 링크만 남긴다.
|
||||
|
|
@ -71,4 +71,4 @@ description: "여러 레포를 전환할 때 코드/git 분석 없이 전체 ROA
|
|||
- 기본 동작에서 Milestone의 `기능` 체크리스트를 감사하지 않는다.
|
||||
- 완료 여부, 남은 작업, 코드와 문서의 동기화 상태를 evidence 기반으로 판정하지 않는다.
|
||||
- 사용자가 명시하지 않은 상태에서 `ROADMAP.md`, `current.md`, Phase, Milestone 문서를 수정하지 않는다.
|
||||
- 사용자가 과거 기록 확인을 명시하지 않으면 `agent-ops/roadmap/archive/**`를 읽지 않는다.
|
||||
- 사용자가 과거 기록 확인을 명시하지 않으면 `agent-roadmap/archive/**`를 읽지 않는다.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ Milestone identity 역검색과 개별 lock 판별은 `agent-ops/bin/roadmap-dep
|
|||
## 입력
|
||||
|
||||
- `lock-id`: 확인할 lock entry id. 예: `oto:oto-agent-registration`. 명시되면 이 id만 판별한다 (선택)
|
||||
- `target-milestone`: 확인할 Milestone path 또는 `<project>:agent-ops/roadmap/phase/.../milestones/<slug>.md`. 없으면 현재 프로젝트 `current.md`의 활성 Milestone 단일 후보를 사용한다 (선택)
|
||||
- `target-milestone`: 확인할 Milestone path 또는 `<project>:agent-roadmap/phase/.../milestones/<slug>.md`. 없으면 현재 프로젝트 `current.md`의 활성 Milestone 단일 후보를 사용한다 (선택)
|
||||
- `direction`: `locked` / `rely-on` / `both`. 기본값은 `both`다. `locked`는 대상 Milestone이 잠긴 entry만, `rely-on`은 대상 Milestone을 선행 조건으로 삼는 entry만 확인한다 (선택)
|
||||
- `locks-file`: 기본값은 프로젝트 상위 `.agent-roadmap-sync/locks.yaml`이며, 다른 파일을 검사할 때만 지정한다 (선택)
|
||||
|
||||
|
|
@ -39,10 +39,10 @@ Milestone identity 역검색과 개별 lock 판별은 `agent-ops/bin/roadmap-dep
|
|||
- `locks-file`이 명시되지 않았으면 프로젝트 상위 `.agent-roadmap-sync/locks.yaml`을 사용한다.
|
||||
- `locks-file`이 없거나 읽을 수 없으면 결과를 `error`로 보고한다. 이를 미충족 의존성으로 해석하지 않는다.
|
||||
- `lock-id`가 있으면 그 id만 판별한다.
|
||||
- `lock-id`가 없으면 `target-milestone` 또는 현재 프로젝트 `agent-ops/roadmap/current.md`의 활성 Milestone 단일 후보로 Milestone identity를 만든다.
|
||||
- Milestone identity는 `<project>:agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식이다.
|
||||
- `target-milestone`이 `agent-ops/roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다.
|
||||
- `target-milestone`이 workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-ops/roadmap/...` 경로를 붙인다.
|
||||
- `lock-id`가 없으면 `target-milestone` 또는 현재 프로젝트 `agent-roadmap/current.md`의 활성 Milestone 단일 후보로 Milestone identity를 만든다.
|
||||
- Milestone identity는 `<project>:agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식이다.
|
||||
- `target-milestone`이 `agent-roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다.
|
||||
- `target-milestone`이 workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-roadmap/...` 경로를 붙인다.
|
||||
- `target-milestone`이 archive 경로이면 일반 의존 판별 후보로 쓰지 말고 사용자에게 활성 Milestone 선택을 요청한다.
|
||||
- 활성 Milestone 후보가 없거나 둘 이상이면 추정하지 말고 사용자에게 lock id 또는 Milestone 선택을 요청한다.
|
||||
- `lock-id`가 없으면 `agent-ops/bin/roadmap-dependency-checker.sh --find-milestone "<identity>" "<direction>" "<locks-file>"`로 Milestone identity와 일치하는 entry를 찾는다.
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ Milestone task group contract:
|
|||
- `agent-task/m-<milestone-slug>/` is reserved for Milestone-linked work created by the plan skill.
|
||||
- Do not treat normal task groups that do not start with `m-` as runtime milestone completion targets.
|
||||
- For a selected task path, parse only the first path segment as `{task_group}`. If it matches `^m-[a-z0-9][a-z0-9-]*$`, strip `m-` to get `<milestone-slug>`.
|
||||
- Do not read or modify `agent-ops/roadmap/**` for milestone routing during code-review finalization.
|
||||
- Do not read or modify `agent-roadmap/**` for milestone routing during code-review finalization.
|
||||
- Do not call `update-roadmap` from this skill. The runtime consumes the PASS completion event, checks current state, resolves the active Milestone, and calls `update-roadmap` if needed.
|
||||
- For `m-<milestone-slug>` PASS tasks, report the original active task path, final archive path, complete log path, task group, and milestone slug so the runtime has deterministic event inputs.
|
||||
|
||||
|
|
@ -358,7 +358,7 @@ After Step 6:
|
|||
- Do not overwrite an existing archive directory. If `agent-task/archive/YYYY/MM/{task_name}/` already exists, append the next numeric suffix to the final path segment: single-plan `agent-task/archive/YYYY/MM/{task_group}_1/`, split-plan `agent-task/archive/YYYY/MM/{task_group}/{subtask_dir}_1/`, and so on.
|
||||
- After moving a split subtask, remove the active parent `agent-task/{task_group}/` only if it is empty. If sibling subtask directories or other files remain, leave the parent task group in place.
|
||||
- If verdict is `PASS` and `{task_group}` matches `m-<milestone-slug>`, do not resolve the roadmap target and do not call `update-roadmap`. Report completion event metadata after the task archive move: `origin-task=agent-task/{task_name}` from the original active task path, `task-group={task_group}`, `milestone-slug=<milestone-slug>`, final archive path, `complete.log` path, and archived plan/review log paths.
|
||||
- The runtime consumes that completion event, checks current state, resolves `agent-ops/roadmap/phase/*/milestones/<milestone-slug>.md`, and calls `update-roadmap` if needed.
|
||||
- The runtime consumes that completion event, checks current state, resolves `agent-roadmap/phase/*/milestones/<milestone-slug>.md`, and calls `update-roadmap` if needed.
|
||||
- `WARN` and `FAIL` do not update the roadmap Milestone; the follow-up plan remains under the same `m-<milestone-slug>` task group when the original task was Milestone-linked.
|
||||
- `USER_REVIEW` does not update the roadmap Milestone and does not produce PASS completion metadata. Keep the active task directory in place with `USER_REVIEW.md` and archived plan/review logs until the user decides how to resume, replan, defer, or abandon the task.
|
||||
- If `USER_REVIEW.md` is later resolved as complete/PASS by user decision and evidence, write `complete.log`, move the task directory to archive, and report `m-*` PASS completion metadata just like a normal `PASS`.
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ README는 프로젝트 특성에 맞게 필요한 섹션만 사용하되, 기본
|
|||
- README 상단에는 프로젝트가 무엇을 해결하는지와 현재 사용할 수 있는 범위를 먼저 쓴다.
|
||||
- AI가 작업을 이어받을 때 필요한 경로, 명령, 검증 방법, 주요 문서를 명확한 제목과 표로 정리한다.
|
||||
- `agent-ops/`가 있으면 규칙, 로드맵, 스킬 문서를 참고 문서나 작업 맥락에 연결한다.
|
||||
- `agent-ops/roadmap/current.md`가 있으면 README에 현재 작업 위치를 복사하지 말고, 로드맵을 확인할 문서 경로만 적는다.
|
||||
- `agent-roadmap/current.md`가 있으면 README에 현재 작업 위치를 복사하지 말고, 로드맵을 확인할 문서 경로만 적는다.
|
||||
- README는 제품 소개 문서이면서 작업 진입점이다. 마케팅 문구보다 실행 가능한 정보와 프로젝트 경계를 우선한다.
|
||||
- 불확실한 내용은 단정하지 않고 `TODO` 또는 "확인 필요"로 남긴다.
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ README는 프로젝트 특성에 맞게 필요한 섹션만 사용하되, 기본
|
|||
- [ ] 루트 `README.md` 존재 여부와 기존 내용 확인
|
||||
- [ ] `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `Makefile`, `docker-compose.yml` 등 실행/검증 명령 근거 확인
|
||||
- [ ] `agent-ops/rules/project/rules.md`가 있으면 프로젝트 개요, 기술 스택, 도메인 매핑 확인
|
||||
- [ ] `agent-ops/roadmap/ROADMAP.md` 또는 `agent-ops/roadmap/current.md`가 있으면 제품 방향과 활성 Milestone 문서 경로만 확인
|
||||
- [ ] `agent-roadmap/ROADMAP.md` 또는 `agent-roadmap/current.md`가 있으면 제품 방향과 활성 Milestone 문서 경로만 확인
|
||||
- [ ] 주요 소스 디렉터리와 테스트 디렉터리를 `rg --files`로 가볍게 확인
|
||||
|
||||
## 실행 절차
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ description: AI-first 개인/소규모 프로젝트의 전체 목표, Phase scaf
|
|||
|
||||
## 목적
|
||||
|
||||
`agent-ops/roadmap/` 하위에 `Roadmap -> Phase -> Milestone` 기반 한국어 로드맵 구조를 처음 생성한다.
|
||||
`agent-roadmap/` 하위에 `Roadmap -> Phase -> Milestone` 기반 한국어 로드맵 구조를 처음 생성한다.
|
||||
전체 로드맵은 전체 방향과 Phase index만 담당하고, 일반 작업에서는 `current.md`의 활성 Phase/Milestone 링크와 관련 문서만 읽도록 만든다.
|
||||
Milestone은 구현 계획이 아니라 방향성, 범위, 위험, 확인 필요 사항을 기록하는 협업 문서다.
|
||||
Epic과 Task는 별도 파일로 분리하지 않고 Milestone 문서의 `기능` 안에서 관리한다. 별도 `완료 기준` 섹션은 만들지 않고, 검증이 필요한 기능에만 같은 Task 안의 `검증:` 문구로 통합한다.
|
||||
|
|
@ -17,7 +17,7 @@ Epic과 Task는 별도 파일로 분리하지 않고 Milestone 문서의 `기능
|
|||
|
||||
- 프로젝트에 파일 기반 로드맵을 처음 만들 때
|
||||
- 사용자가 "로드맵 만들어줘", "마일스톤 설계해줘", "goal/phase 구조 잡아줘"라고 요청할 때
|
||||
- 기존 README나 메모에 흩어진 계획을 `agent-ops/roadmap/` 구조로 분리할 때
|
||||
- 기존 README나 메모에 흩어진 계획을 `agent-roadmap/` 구조로 분리할 때
|
||||
|
||||
## 입력
|
||||
|
||||
|
|
@ -30,8 +30,7 @@ Epic과 Task는 별도 파일로 분리하지 않고 Milestone 문서의 `기능
|
|||
## 생성 구조
|
||||
|
||||
```text
|
||||
agent-ops/
|
||||
roadmap/
|
||||
agent-roadmap/
|
||||
ROADMAP.md
|
||||
current.md
|
||||
phase/
|
||||
|
|
@ -49,11 +48,11 @@ agent-ops/
|
|||
|
||||
| 파일 | 역할 |
|
||||
|------|------|
|
||||
| `agent-ops/roadmap/ROADMAP.md` | 전체 목표와 Phase 흐름만 담는 최상위 지도. 로드맵 생성/갱신/Phase 전환 때만 읽는다 |
|
||||
| `agent-ops/roadmap/current.md` | 활성 Phase와 활성 Milestone 후보, 선택 규칙을 담는 얇은 포인터 |
|
||||
| `agent-ops/roadmap/phase/<phase-slug>/PHASE.md` | Phase 목표, 상태, Milestone 흐름, Phase 경계를 담는 문서 |
|
||||
| `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` | 일반 작업 시 읽는 Milestone 단위 목표, 스케치 승격 조건, 구현 잠금, 범위, 기능 Epic/Task 체크리스트, 범위 제외 항목 |
|
||||
| `agent-ops/roadmap/archive/phase/<phase-slug>/...` | 완료 또는 폐기되어 현재 후보에서 제외한 과거 Phase/Milestone. 일반 작업에서는 읽지 않는다 |
|
||||
| `agent-roadmap/ROADMAP.md` | 전체 목표와 Phase 흐름만 담는 최상위 지도. 로드맵 생성/갱신/Phase 전환 때만 읽는다 |
|
||||
| `agent-roadmap/current.md` | 활성 Phase와 활성 Milestone 후보, 선택 규칙을 담는 얇은 포인터 |
|
||||
| `agent-roadmap/phase/<phase-slug>/PHASE.md` | Phase 목표, 상태, Milestone 흐름, Phase 경계를 담는 문서 |
|
||||
| `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` | 일반 작업 시 읽는 Milestone 단위 목표, 스케치 승격 조건, 구현 잠금, 범위, 기능 Epic/Task 체크리스트, 범위 제외 항목 |
|
||||
| `agent-roadmap/archive/phase/<phase-slug>/...` | 완료 또는 폐기되어 현재 후보에서 제외한 과거 Phase/Milestone. 일반 작업에서는 읽지 않는다 |
|
||||
|
||||
## 템플릿
|
||||
|
||||
|
|
@ -73,8 +72,8 @@ agent-ops/
|
|||
- `[계획]`은 목표, 범위, 기능 Task, 구현 잠금, 결정 필요 항목이 정리되어 구현 계획을 만들 수 있는 상태다.
|
||||
- Phase와 Milestone 이름, 파일명에는 `1`, `2`, `M01`, `P1` 같은 순번을 붙이지 않는다.
|
||||
- 진행 순서는 `ROADMAP.md`와 각 `PHASE.md`의 위에서 아래 순서로 표현한다.
|
||||
- Phase 파일명은 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`로 만든다.
|
||||
- Milestone 파일명은 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`로 만든다.
|
||||
- Phase 파일명은 `agent-roadmap/phase/<phase-slug>/PHASE.md`로 만든다.
|
||||
- Milestone 파일명은 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`로 만든다.
|
||||
- `<phase-slug>`와 `<milestone-slug>`는 소문자 영문, 숫자, 하이픈만 사용하고, 공백/언더스코어/순번 prefix를 넣지 않는다.
|
||||
- 중간에 Phase나 Milestone을 끼워 넣을 수 있도록 기존 항목의 이름과 파일명을 불필요하게 바꾸지 않는다.
|
||||
|
||||
|
|
@ -98,7 +97,7 @@ agent-ops/
|
|||
|
||||
## 먼저 확인할 것
|
||||
|
||||
- [ ] `agent-ops/roadmap/ROADMAP.md` 또는 `agent-ops/roadmap/current.md`가 이미 존재하는지 확인
|
||||
- [ ] `agent-roadmap/ROADMAP.md` 또는 `agent-roadmap/current.md`가 이미 존재하는지 확인
|
||||
- [ ] 이미 존재하면 덮어쓰지 말고 `update-roadmap` 스킬 사용을 안내
|
||||
- [ ] `README.md`, `agent-ops/GUIDE.md`, `agent-ops/rules/project/rules.md` 등 프로젝트 방향을 설명하는 문서를 확인
|
||||
- [ ] `rg --files`로 현재 프로젝트의 주요 구조를 가볍게 확인
|
||||
|
|
@ -108,7 +107,7 @@ agent-ops/
|
|||
## 실행 절차
|
||||
|
||||
1. **기존 로드맵 확인**
|
||||
- `agent-ops/roadmap/` 하위 기존 파일 존재 여부를 확인한다.
|
||||
- `agent-roadmap/` 하위 기존 파일 존재 여부를 확인한다.
|
||||
- 기존 로드맵이 있으면 새로 만들지 않고 `update-roadmap`을 사용하도록 안내한다.
|
||||
|
||||
2. **프로젝트 방향 분석**
|
||||
|
|
@ -133,7 +132,7 @@ agent-ops/
|
|||
|
||||
5. **검증**
|
||||
- 생성한 링크가 실제 파일을 가리키는지 확인한다.
|
||||
- `current.md` 활성 항목에 `agent-ops/roadmap/archive/**` 경로가 없는지 확인한다.
|
||||
- `current.md` 활성 항목에 `agent-roadmap/archive/**` 경로가 없는지 확인한다.
|
||||
- Epic heading과 Task 체크리스트 id가 형식을 따르는지 확인한다.
|
||||
- 상태 표기가 `[진행중]`처럼 공백 없는 표준값인지 확인한다.
|
||||
- `[스케치]` Milestone에 `승격 조건` 섹션이 있고 `구현 잠금`이 `잠금`인지 확인한다.
|
||||
|
|
@ -144,8 +143,8 @@ agent-ops/
|
|||
```markdown
|
||||
## 생성 완료
|
||||
|
||||
- 로드맵: agent-ops/roadmap/ROADMAP.md
|
||||
- 현재 컨텍스트: agent-ops/roadmap/current.md
|
||||
- 로드맵: agent-roadmap/ROADMAP.md
|
||||
- 현재 컨텍스트: agent-roadmap/current.md
|
||||
- Phase 문서: <N개>
|
||||
- Milestone 문서: <N개>
|
||||
- 활성 Phase: <N개>
|
||||
|
|
@ -156,8 +155,8 @@ agent-ops/
|
|||
|
||||
## 활성 항목
|
||||
|
||||
- Phase: <phase-name>: agent-ops/roadmap/phase/<phase-slug>/PHASE.md
|
||||
- Milestone: <milestone-name>: agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md
|
||||
- Phase: <phase-name>: agent-roadmap/phase/<phase-slug>/PHASE.md
|
||||
- Milestone: <milestone-name>: agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md
|
||||
|
||||
## TODO 항목
|
||||
|
||||
|
|
@ -166,9 +165,9 @@ agent-ops/
|
|||
|
||||
## 금지 사항
|
||||
|
||||
- 기존 `agent-ops/roadmap/` 파일을 덮어쓰지 않는다.
|
||||
- 기존 `agent-roadmap/` 파일을 덮어쓰지 않는다.
|
||||
- 일반 작업마다 전체 `ROADMAP.md`를 읽도록 규칙을 만들지 않는다.
|
||||
- `current.md`에 `agent-ops/roadmap/archive/**` 경로를 넣지 않는다.
|
||||
- `current.md`에 `agent-roadmap/archive/**` 경로를 넣지 않는다.
|
||||
- Phase와 Milestone 이름 또는 파일명에 순번을 강제하지 않는다.
|
||||
- `ROADMAP.md`에 Milestone 상세 작업 체크리스트를 넣지 않는다.
|
||||
- Epic과 Task를 별도 파일로 분리하지 않는다.
|
||||
|
|
|
|||
|
|
@ -71,8 +71,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드
|
|||
| `agent-ops/rules/project/domain/<domain>/rules.md` | 도메인 분석 후 생성 |
|
||||
| `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) |
|
||||
| `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 |
|
||||
| `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 추가 |
|
||||
| `.claude/settings.json`, `opencode.json` | `agent-task/archive/**` 읽기/검색 제외 설정을 생성 또는 병합한다. `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny에서 제거한다 |
|
||||
| `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-roadmap/archive/**` 추가 |
|
||||
| `.claude/settings.json`, `opencode.json` | `agent-task/archive/**` 읽기/검색 제외 설정을 생성 또는 병합한다. `agent-roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny에서 제거한다 |
|
||||
|
||||
에이전트별 파일명:
|
||||
|
||||
|
|
@ -178,12 +178,12 @@ common/rules.md와 내용이 중복되지 않도록 한다.
|
|||
|
||||
3. **AI ignore / permission 기본 설정**
|
||||
- `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에는 사용자 항목을 건드리지 않고 Agent-Ops 관리 block만 추가하거나 교체한다
|
||||
- Agent-Ops 관리 block에는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 넣는다
|
||||
- Agent-Ops 관리 block에는 `agent-task/archive/**`와 `agent-roadmap/archive/**`를 넣는다
|
||||
- `.claude/settings.json`, `opencode.json`이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정을 생성하고, 있으면 가능한 경우 기존 설정을 보존하며 필요한 제외 설정만 병합한다
|
||||
- `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny에는 두지 않는다
|
||||
- 기존 `.claude/settings.json`이나 `opencode.json`에 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다
|
||||
- `agent-roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny에는 두지 않는다
|
||||
- 기존 `.claude/settings.json`이나 `opencode.json`에 `agent-roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다
|
||||
- 대상 루트에 `.agent-ops-source`가 있으면 AI ignore / permission 파일은 보강하지 않는다
|
||||
- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다
|
||||
- `agent-task/archive/**`와 `agent-roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다
|
||||
|
||||
4. **agent-ops 폴더 구조 복사**
|
||||
- 공통 관리 레포의 `agent-ops/` 공통 폴더(bin, rules/common, skills/common)를 복사한다
|
||||
|
|
@ -237,17 +237,17 @@ common/rules.md와 내용이 중복되지 않도록 한다.
|
|||
- [ ] 생성된 domain rules.md가 `domain-rule-template.md` 형식을 따르는가
|
||||
- [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 생성된 도메인이 모두 등록되어 있는가
|
||||
- [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가
|
||||
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가
|
||||
- [ ] `.claude/settings.json`, `opencode.json`에 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] `.gitignore`에 `agent-task/archive/**` 또는 `agent-ops/roadmap/archive/**`를 추가하지 않았는가
|
||||
- [ ] `.claude/settings.json`, `opencode.json`에 `agent-roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 기존 `agent-roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] `.gitignore`에 `agent-task/archive/**` 또는 `agent-roadmap/archive/**`를 추가하지 않았는가
|
||||
- 검증 실패 시: 누락된 파일/항목을 사용자에게 알리고 해당 부분만 보완한다
|
||||
|
||||
## 금지 사항
|
||||
|
||||
- 진입 파일에 rules/common/rules.md 외 내용을 추가하지 않는다.
|
||||
- `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외를 `.gitignore`에 추가하지 않는다.
|
||||
- `agent-task/archive/**`와 `agent-roadmap/archive/**` 제외를 `.gitignore`에 추가하지 않는다.
|
||||
- 실제 구조보다 앞선 추상 구조를 강요하지 않는다.
|
||||
- 처음부터 많은 domain / skill을 만들지 않는다.
|
||||
- rules/common/rules.md를 프로젝트에서 직접 수정하지 않는다.
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ Task directory naming rules:
|
|||
- A normal single-plan task uses `agent-task/{task_group}/` with a short snake_case category name, e.g. `agent-task/refactoring/`.
|
||||
- If the plan is based on a selected active Milestone, use `agent-task/m-<milestone-slug>/` as the task group. Do not include the Phase slug, Epic id, Task id, or a separate task slug in the task group.
|
||||
- `m-<milestone-slug>` is a reserved top-level task group namespace for Milestone-linked work. Non-roadmap tasks must not use `m-`.
|
||||
- Runtime completion-event routing for `m-*` reads only the top-level `{task_group}` name. It resolves `<milestone-slug>` by matching exactly one active file at `agent-ops/roadmap/phase/*/milestones/<milestone-slug>.md`; archive paths are not target candidates.
|
||||
- Runtime completion-event routing for `m-*` reads only the top-level `{task_group}` name. It resolves `<milestone-slug>` by matching exactly one active file at `agent-roadmap/phase/*/milestones/<milestone-slug>.md`; archive paths are not target candidates.
|
||||
- When split gates require decomposition, create one shared category folder and multiple subtask directories under it. Each subtask directory owns exactly one normal active plan file and one normal active review stub.
|
||||
- Multi-plan output is a set of independent `PLAN-{build_lane}-GNN.md` + `CODE_REVIEW-{review_lane}-GNN.md` pairs across `agent-task/{task_group}/{subtask_dir}/` folders, not multiple plan files inside one folder.
|
||||
- Multi-plan subtask directory names must start with a stable two-digit task index. The index must increase across sibling subtask directories for sorting, but it is not a serial execution dependency.
|
||||
|
|
@ -133,8 +133,8 @@ If a selected task directory contains both `USER_REVIEW.md` and active `PLAN-*-G
|
|||
|
||||
로드맵 확인:
|
||||
|
||||
- `agent-ops/roadmap/current.md`가 있으면 구현 계획 파일을 만들기 전에 읽고, 사용자 요청, 브랜치, 변경 경로를 기준으로 관련 Phase와 Milestone을 선택한다.
|
||||
- `current.md`가 `agent-ops/roadmap/archive/**`를 가리키면 해당 문서는 읽지 말고 활성 Phase/Milestone이 아니라고 보고한다.
|
||||
- `agent-roadmap/current.md`가 있으면 구현 계획 파일을 만들기 전에 읽고, 사용자 요청, 브랜치, 변경 경로를 기준으로 관련 Phase와 Milestone을 선택한다.
|
||||
- `current.md`가 `agent-roadmap/archive/**`를 가리키면 해당 문서는 읽지 말고 활성 Phase/Milestone이 아니라고 보고한다.
|
||||
- 선택한 Phase를 한 번 읽어 Phase 목표, Milestone 흐름, Phase 경계를 확인한다.
|
||||
- 선택한 Milestone을 한 번 읽어 목표, 상태, 승격 조건, 범위, 기능 Task, 완료 리뷰, 범위 제외, 구현 잠금을 확인한다. `승격 조건`은 `[스케치]`에서만 필수이며, `[계획]` 이상에서 섹션이 없으면 `없음`으로 본다. `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인하고, 그 결정 없이는 `PLAN-*-G??.md`, `CODE_REVIEW-*-G??.md`, file/API/package 수준 구현 단계를 확정하지 않는다.
|
||||
- 선택한 Milestone에 legacy `필수 기능`/`완료 기준`이 분리되어 있으면 plan 작성 전에 roadmap preflight로 정규화한다. 흡수 가능한 기준은 관련 기능 Task 안의 선택적 `검증:` 또는 Task 설명으로 즉시 흡수하고, 어느 기능에도 붙지 않는 기준이 남으면 plan 파일을 만들지 말고 남은 기준과 필요한 사용자 판단을 구체적으로 보고한다.
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ agent-ops/bin/sync.sh --pull <target>
|
|||
- [ ] sync.sh 가 오류 없이 완료됐는가
|
||||
- [ ] 현재 프로젝트 버전이 framework 버전과 일치하는가
|
||||
- [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 framework의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 현재 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 현재 프로젝트에 기존 `agent-roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] agentic-framework의 AI ignore / permission 파일은 수정되거나 stage되지 않았는가
|
||||
|
||||
## 금지 사항
|
||||
|
|
|
|||
|
|
@ -68,15 +68,15 @@ description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거
|
|||
```text
|
||||
# BEGIN Agent-Ops managed ignore
|
||||
agent-task/archive/**
|
||||
agent-ops/roadmap/archive/**
|
||||
agent-roadmap/archive/**
|
||||
# END Agent-Ops managed ignore
|
||||
```
|
||||
|
||||
- 관리 block 밖의 기존 ignore 항목은 사용자 소유로 보고 삭제, 정렬, 중복 제거하지 않는다.
|
||||
- `.claude/settings.json`과 `opencode.json`은 기존 사용자 설정을 보존하고 `agent-task/archive/**` hard read/glob deny만 보강한다.
|
||||
- `agent-ops/roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny로 두지 않는다.
|
||||
- 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다.
|
||||
- `opencode.json`의 watcher ignore에는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 둘 수 있다.
|
||||
- `agent-roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny로 두지 않는다.
|
||||
- 대상 프로젝트에 기존 `agent-roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다.
|
||||
- `opencode.json`의 watcher ignore에는 `agent-task/archive/**`와 `agent-roadmap/archive/**`를 둘 수 있다.
|
||||
|
||||
```bash
|
||||
agent-ops/bin/sync.sh [target]
|
||||
|
|
@ -90,9 +90,9 @@ agent-ops/bin/sync.sh [target]
|
|||
- [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다
|
||||
- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-roadmap/archive/**`가 포함되어 있는가
|
||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
|
||||
- [ ] 대상 프로젝트에 기존 `agent-roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
|
||||
- [ ] 일반 프로젝트에서 공통 원본 repo로 push한 경우, AI ignore / permission 파일이 공통 원본 repo에 유입되지 않았는가
|
||||
- [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ description: 로드맵 업데이트, 로드맵에 추가, 마일스톤 추가/
|
|||
|
||||
## 목적
|
||||
|
||||
기존 `agent-ops/roadmap/` 구조를 현재 프로젝트 방향과 진행 상태에 맞게 갱신한다.
|
||||
기존 `agent-roadmap/` 구조를 현재 프로젝트 방향과 진행 상태에 맞게 갱신한다.
|
||||
표준 구조는 `ROADMAP.md -> phase/<phase-slug>/PHASE.md -> phase/<phase-slug>/milestones/<milestone-slug>.md`다.
|
||||
archive도 같은 Phase scaffold를 유지하며 `archive/phase/<phase-slug>/...` 아래에 둔다.
|
||||
로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 활성 Phase와 활성 Milestone 창이 실제 작업 후보 목록으로 동작하게 한다.
|
||||
|
|
@ -52,7 +52,7 @@ Epic과 Task는 별도 파일로 분리하지 않고 Milestone 문서의 `기능
|
|||
## 표준 구조
|
||||
|
||||
```text
|
||||
agent-ops/roadmap/
|
||||
agent-roadmap/
|
||||
ROADMAP.md
|
||||
current.md
|
||||
phase/
|
||||
|
|
@ -101,7 +101,7 @@ agent-ops/roadmap/
|
|||
|
||||
- 일반 갱신은 `current.md`, 관련 활성 Phase, 관련 활성 Milestone을 우선 읽는다.
|
||||
- `ROADMAP.md`는 Phase 흐름, 전체 구조, 활성 범위 밖 작업, 전체 재계획, archive 링크 갱신이 필요할 때 읽는다.
|
||||
- `agent-ops/roadmap/archive/**`는 일반 작업이나 sync에서 읽지 않는다.
|
||||
- `agent-roadmap/archive/**`는 일반 작업이나 sync에서 읽지 않는다.
|
||||
- archive 모드에서 이동 대상이 아직 활성 경로에 있으면 그 대상 문서는 읽을 수 있다.
|
||||
- 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 요청이면 `ROADMAP.md` 또는 `PHASE.md`의 archive 링크를 따라 필요한 archive 문서만 읽는다.
|
||||
|
||||
|
|
@ -127,17 +127,17 @@ agent-ops/roadmap/
|
|||
- entry는 `id`, `locked`, `rely-on[].target`, `rely-on[].status`, `rely-on[].note`만 사용한다.
|
||||
- `locks.yaml`은 root sequence block style을 기본으로 작성한다. 예: `- id: ...` 아래에 `locked`, `rely-on`을 둔다.
|
||||
- `id`는 기본적으로 `<잠긴-project>:<잠긴-milestone-slug>`로 만든다.
|
||||
- `locked`와 `rely-on[].target`은 `<project>:agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식으로 기록한다.
|
||||
- Milestone 경로가 `agent-ops/roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다. workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-ops/roadmap/...` 경로를 붙인다.
|
||||
- `locked`와 `rely-on[].target`은 `<project>:agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md` 형식으로 기록한다.
|
||||
- Milestone 경로가 `agent-roadmap/...` 상대 경로이면 현재 프로젝트명을 prefix로 붙인다. workspace 하위 절대/상대 경로이면 workspace 바로 아래 디렉터리명을 project로 삼고, 그 뒤 `agent-roadmap/...` 경로를 붙인다.
|
||||
- `locked`는 잠긴 Milestone, `rely-on.target`은 선행 조건 Milestone이다. 둘 다 같은 workspace의 어느 활성 Phase 하위 Milestone이어도 된다. 의존 대상이 `current.md`에 있어야 한다고 가정하지 않는다.
|
||||
- 의존 Milestone 확정 순서:
|
||||
1. 사용자가 명시한 `<project>:agent-ops/roadmap/phase/.../milestones/<slug>.md` 또는 파일 경로
|
||||
1. 사용자가 명시한 `<project>:agent-roadmap/phase/.../milestones/<slug>.md` 또는 파일 경로
|
||||
2. 사용자가 명시한 프로젝트와 Milestone slug
|
||||
3. 사용자가 명시한 프로젝트와 Milestone 제목의 정규화 일치
|
||||
4. 잠긴 Milestone 문서의 `선행 <project> Milestone: ...`, `관련 <project> Milestone: ...`, `외부 의존 잠금: ...`에 적힌 slug/제목 힌트
|
||||
5. 프로젝트명만 있고 Milestone 힌트가 없을 때만 해당 프로젝트 `current.md`의 활성 Milestone 단일 후보
|
||||
- 정규화 비교는 소문자 변환, backtick/따옴표 제거, 영문/숫자가 아닌 연속 문자를 `-` 하나로 치환, 앞뒤 `-` 제거 후 비교한다. 정규화한 힌트는 Milestone 파일 slug와 정규화한 제목 둘 다에 대조한다.
|
||||
- 2-4번 탐색은 대상 프로젝트의 `agent-ops/roadmap/phase/*/milestones/*.md` 활성 문서만 대상으로 한다. archive 문서는 사용자가 archive 경로를 명시한 경우 외에는 읽거나 후보로 삼지 않는다.
|
||||
- 2-4번 탐색은 대상 프로젝트의 `agent-roadmap/phase/*/milestones/*.md` 활성 문서만 대상으로 한다. archive 문서는 사용자가 archive 경로를 명시한 경우 외에는 읽거나 후보로 삼지 않는다.
|
||||
- 후보가 없거나 둘 이상이면 `locks.yaml`을 만들거나 고치지 말고 사용자에게 대상 Milestone 선택을 요청한다.
|
||||
- 외부 의존 잠금 요청이 있거나, 갱신 대상 Milestone이 `구현 잠금: 잠금`이며 문서에 외부 의존 잠금/선행 Milestone 컨텍스트가 있으면 `.agent-roadmap-sync/locks.yaml`을 upsert한다. resolvable한 외부 의존 문구를 Milestone에 남기고 lock entry를 누락하지 않는다.
|
||||
- 외부 의존 잠금을 만들 때 대상 Milestone의 `구현 잠금`은 `잠금`으로 둔다.
|
||||
|
|
@ -161,7 +161,7 @@ agent-ops/roadmap/
|
|||
## Milestone task group 연동
|
||||
|
||||
- 런타임 완료 이벤트의 `origin-task`에서 `agent-task/` 다음 첫 path segment가 `m-<milestone-slug>`이면 Milestone 기반 plan/review 완료에서 온 요청으로 본다. `origin-task`는 archive 이동 전 active task 경로 또는 런타임이 그 형태로 정규화한 경로를 사용한다.
|
||||
- `<milestone-slug>`는 활성 `agent-ops/roadmap/phase/*/milestones/<milestone-slug>.md`에서 정확히 하나만 찾아야 한다. archive Milestone은 target 후보가 아니다.
|
||||
- `<milestone-slug>`는 활성 `agent-roadmap/phase/*/milestones/<milestone-slug>.md`에서 정확히 하나만 찾아야 한다. archive Milestone은 target 후보가 아니다.
|
||||
- target이 없거나 둘 이상이면 Milestone 내용을 추정해 수정하지 말고 target 불명확으로 보고한다.
|
||||
- target이 확정되면 PASS evidence, `complete.log`, final archive path, archived plan/review log 경로, code-review 결과 요약을 근거로 해당 Milestone의 기능 Task를 갱신한다. target routing 자체는 완료 이벤트의 `m-<milestone-slug>` task group으로만 결정한다.
|
||||
- 갱신 후 모든 기능 Task와 Task 안에 명시된 검증이 충족되면 `[검토중]` 전환과 `완료 리뷰` 요청 규칙을 적용한다.
|
||||
|
|
@ -232,7 +232,7 @@ target 없는 신규 추가 요청은 append가 아니라 upsert로 처리한다
|
|||
|
||||
- 대상 Milestone이 `[완료]` 또는 `[폐기]`인지 확인한다.
|
||||
- `[검토중]` Milestone은 archive하지 않는다. 사용자 완료 승인 또는 폐기 지시가 있으면 먼저 `[완료]` 또는 `[폐기]`로 바꾼 뒤 archive한다.
|
||||
- 대상 파일을 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`에서 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`로 이동한다.
|
||||
- 대상 파일을 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`에서 `agent-roadmap/archive/phase/<phase-slug>/milestones/<milestone-slug>.md`로 이동한다.
|
||||
- 활성 `PHASE.md`의 Milestone 흐름에는 `[완료]` 또는 `[폐기]` 항목을 남기고, 경로는 archive 경로로 바꾼다.
|
||||
- `current.md`의 활성 Milestone에서는 제거한다.
|
||||
- `ROADMAP.md`는 Phase 상태나 경로가 바뀌지 않으면 수정하지 않는다.
|
||||
|
|
@ -242,7 +242,7 @@ target 없는 신규 추가 요청은 append가 아니라 upsert로 처리한다
|
|||
|
||||
- Phase 전체가 `[완료]` 또는 `[폐기]`인지 확인한다.
|
||||
- `[검토중]` Phase는 archive하지 않는다. 사용자 완료 승인 또는 폐기 지시가 있으면 먼저 `[완료]` 또는 `[폐기]`로 바꾼 뒤 archive한다.
|
||||
- `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`를 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동한다.
|
||||
- `agent-roadmap/phase/<phase-slug>/PHASE.md`를 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동한다.
|
||||
- 해당 Phase의 하위 Milestone도 `archive/phase/<phase-slug>/milestones/` 아래로 이동한다.
|
||||
- `ROADMAP.md`의 Phase 흐름에는 해당 Phase 항목을 남기고, 상태와 경로를 archive `PHASE.md`로 바꾼다.
|
||||
- `current.md`의 활성 Phase와 활성 Milestone에서는 해당 Phase와 하위 Milestone을 제거한다.
|
||||
|
|
@ -349,11 +349,11 @@ target 없는 신규 추가 요청은 append가 아니라 upsert로 처리한다
|
|||
|
||||
- 모드: <status | milestone | phase | replan | sync | concretize | archive>
|
||||
- 수정 파일:
|
||||
- agent-ops/roadmap/ROADMAP.md
|
||||
- agent-ops/roadmap/current.md
|
||||
- agent-ops/roadmap/phase/<phase-slug>/PHASE.md
|
||||
- agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md
|
||||
- agent-ops/roadmap/archive/phase/<phase-slug>/... (archive 모드)
|
||||
- agent-roadmap/ROADMAP.md
|
||||
- agent-roadmap/current.md
|
||||
- agent-roadmap/phase/<phase-slug>/PHASE.md
|
||||
- agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md
|
||||
- agent-roadmap/archive/phase/<phase-slug>/... (archive 모드)
|
||||
|
||||
## 변경 사항
|
||||
|
||||
|
|
@ -388,7 +388,7 @@ target 없는 신규 추가 요청은 append가 아니라 upsert로 처리한다
|
|||
- 전체 `ROADMAP.md`를 모든 작업의 필수 로딩 파일로 만들지 않는다.
|
||||
- `ROADMAP.md`에 Milestone 상세 작업 체크리스트를 남기지 않는다.
|
||||
- `current.md`에 개인별 현재 작업 위치나 완료 상태를 남기지 않는다.
|
||||
- `current.md`에 `agent-ops/roadmap/archive/**` 경로를 남기지 않는다.
|
||||
- `current.md`에 `agent-roadmap/archive/**` 경로를 남기지 않는다.
|
||||
- archive 문서를 명시 요청 없이 읽거나 최신 템플릿으로 재포맷하지 않는다.
|
||||
- 완료된 Phase/Milestone 기록을 삭제하지 않는다.
|
||||
- Epic과 Task를 별도 파일로 분리하지 않는다.
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@
|
|||
|
||||
`nexo`는 Mattermost server, webapp, push-proxy를 upstream-followable 메시징 런타임으로 계승하고,
|
||||
Flutter 플러그인을 nexo-owned embedded messaging/notification SDK로 제공한다.
|
||||
서버, 기본 웹 메시지 앱, push-proxy는 보안/버그/기능 업데이트를 계속 따라가기 쉬운 구조로 유지하고,
|
||||
nexo의 제품 표면은 SDK, compose, 운영 계약, 얇은 branding/compatibility layer에 둔다.
|
||||
서버, 기본 웹 메시지 앱, push-proxy는 보안/버그/기능 업데이트를 계속 따라가기 쉬운 구조로 유지한다.
|
||||
기본 웹 메시지 앱은 upstream webapp을 얇은 branding/compatibility layer로 활용하고,
|
||||
nexo-owned 제품 표면은 Flutter SDK, compose, 운영 계약, 앱별 integration contract에 둔다.
|
||||
최종 형태는 upstream update를 CI/CD와 runbook으로 흡수하면서 여러 앱이 표준화된 메시징 채널과 알림 파이프라인을 사용할 수 있는 서비스다.
|
||||
|
||||
## Phase 흐름
|
||||
|
|
@ -16,24 +17,24 @@ nexo의 제품 표면은 SDK, compose, 운영 계약, 얇은 branding/compatibil
|
|||
스케치 Phase는 아직 구현 가능한 계획이 아니므로 계획 Phase보다 아래에 둔다.
|
||||
|
||||
- [진행중] 제품 기반 정리
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
- 요약: nexo의 제품 경계, 모노레포 구조, upstream-followable 런타임 기준선을 고정한다.
|
||||
- [계획] 업스트림 런타임 운영화
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 요약: Mattermost server/webapp/push-proxy 업데이트를 계속 따라가기 위한 기준, CI/CD, 장애 대응 루프를 만든다.
|
||||
- [계획] 메시징 런타임 표준화
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- 요약: nexo-owned Flutter SDK와 upstream runtime이 공유할 메시징/알림 계약, 테스트, 앱별 사용 채널 모델을 정리한다.
|
||||
|
||||
## 로딩 정책
|
||||
|
||||
- 일반 작업에서는 `agent-ops/roadmap/ROADMAP.md`를 매번 읽지 않는다.
|
||||
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다.
|
||||
- 일반 작업에서는 `agent-roadmap/ROADMAP.md`를 매번 읽지 않는다.
|
||||
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-roadmap/current.md`를 먼저 읽는다.
|
||||
- `current.md`는 현재 작업 위치가 아니라 활성 Phase와 활성 Milestone 후보 목록이다.
|
||||
- `current.md`에는 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다.
|
||||
- `current.md`의 활성 Phase는 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- `current.md`의 활성 Milestone은 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- `current.md`는 `agent-ops/roadmap/archive/**` 경로를 활성 항목으로 포함하지 않는다.
|
||||
- `current.md`의 활성 Phase는 `agent-roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- `current.md`의 활성 Milestone은 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- `current.md`는 `agent-roadmap/archive/**` 경로를 활성 항목으로 포함하지 않는다.
|
||||
- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 활성 Phase와 Milestone 문서를 같은 세션에서 1회 읽는다.
|
||||
- 활성 Phase 또는 Milestone 밖의 작업이면 이 문서의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 이 문서는 로드맵 생성/갱신, Phase 전환, Phase 추가/수정, 전체 구조 변경 요청이 있을 때만 읽는다.
|
||||
|
|
@ -41,10 +42,10 @@ nexo의 제품 표면은 SDK, compose, 운영 계약, 얇은 branding/compatibil
|
|||
- `[스케치]` Phase/Milestone은 방향성, 문제의식, 후보 범위, 미정 질문을 기록하는 컨셉 상태이며 구현 계획 생성 대상이 아니다.
|
||||
- `[스케치]` 항목은 `승격 조건`을 정리해 `[계획]`으로 전환한 뒤 구현 계획을 만든다.
|
||||
- 모든 기능 Task와 Task 안에 명시된 검증이 충족된 Milestone은 먼저 `[검토중]`으로 두고, 사용자 완료 확인과 archive 승인을 받은 뒤 `[완료]`로 전환한다.
|
||||
- 완료된 Phase는 `agent-ops/roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 같은 archive Phase scaffold 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 Phase 문서에 짧은 링크를 남기고, 상세 문서는 `agent-ops/roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- 완료된 Phase는 `agent-roadmap/archive/phase/<phase-slug>/PHASE.md`로 이동하고, 하위 Milestone도 같은 archive Phase scaffold 아래에 둔다.
|
||||
- 진행중 Phase 안에서 완료된 Milestone은 활성 Phase 문서에 짧은 링크를 남기고, 상세 문서는 `agent-roadmap/archive/phase/<phase-slug>/milestones/`로 이동한다.
|
||||
- archive `PHASE.md`는 Phase 자체가 완료 또는 폐기될 때만 만들며, 진행중 Phase의 완료 Milestone만 archive된 경우 archive Phase 디렉터리에 `milestones/`만 있을 수 있다.
|
||||
- `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않는다. 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `ROADMAP.md` 또는 `PHASE.md`의 archive 링크를 따라가서 읽는다.
|
||||
- `agent-roadmap/archive/**`는 일반 작업에서 읽지 않는다. 과거 완료 내용, 완료 근거, 복원, 비교가 필요한 경우에만 `ROADMAP.md` 또는 `PHASE.md`의 archive 링크를 따라가서 읽는다.
|
||||
- 아카이브된 Phase/Milestone 문서는 최신 템플릿이나 스킬 규약에 맞춰 재포맷하지 않는다.
|
||||
- 선택된 Milestone의 `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 코드 구현, `agent-task` 구현 계획 생성, 세부 API/파일 구조 확정을 시작하기 전에 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인한다.
|
||||
- 현재 요청과 직접 관련 없는 미정 항목은 잠금 상태로 남겨도 되며, 기존 구조/도메인 rule/플랫폼 관례로 정할 수 있는 작업은 표준선으로 기록하고 진행할 수 있다.
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ AI 에이전트와 사람이 같은 규칙으로 프로젝트에 들어오도록
|
|||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `README.md`, `AGENTS.md`, `agent-ops/rules/project/rules.md`, `agent-ops/rules/project/domain/`, `agent-ops/roadmap/`, `packages/messaging_flutter/`, `apps/client/`, `services/core/`
|
||||
- 관련 경로: `README.md`, `AGENTS.md`, `agent-ops/rules/project/rules.md`, `agent-ops/rules/project/domain/`, `agent-roadmap/`, `packages/messaging_flutter/`, `apps/client/`, `services/core/`
|
||||
- 표준선(선택): 제품명은 `nexo`, 제품 표면은 메시지 전체를 포함하는 메시징/알림 서비스, public/project-owned naming은 nexo 계열로 전환
|
||||
- 선행 작업: 기존 monorepo migration과 README 보완
|
||||
- 후속 작업: 운영 기준선, 메시징 계약 표준화
|
||||
|
|
@ -3,42 +3,42 @@
|
|||
## 활성 Phase
|
||||
|
||||
- [진행중] 제품 기반 정리
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
- [계획] 업스트림 런타임 운영화
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- [계획] 메시징 런타임 표준화
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
|
||||
## 활성 Milestone
|
||||
|
||||
- [계획] 운영 기준선
|
||||
- Phase: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/runtime-baseline.md`
|
||||
- Phase: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/milestones/runtime-baseline.md`
|
||||
- [계획] 클라이언트 검증 기준선
|
||||
- Phase: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- Phase: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- [계획] 업스트림 팔로잉 기준선
|
||||
- Phase: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/milestones/upstream-following.md`
|
||||
- Phase: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/milestones/upstream-following.md`
|
||||
- [계획] CI/CD와 운영 업데이트 루프
|
||||
- Phase: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/milestones/cicd-operations.md`
|
||||
- Phase: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/milestones/cicd-operations.md`
|
||||
- [계획] 메시징 계약 표준화
|
||||
- Phase: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/milestones/messaging-contract.md`
|
||||
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/messaging-contract.md`
|
||||
|
||||
## 선택 규칙
|
||||
|
||||
- 이 문서는 활성 Phase와 활성 Milestone 후보 목록이며, 개인별 현재 작업 위치나 완료 상태를 기록하지 않는다.
|
||||
- 활성 Phase는 `agent-ops/roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- 활성 Milestone은 `agent-ops/roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- 활성 Phase는 `agent-roadmap/phase/<phase-slug>/PHASE.md`를 가리킨다.
|
||||
- 활성 Milestone은 `agent-roadmap/phase/<phase-slug>/milestones/<milestone-slug>.md`를 가리킨다.
|
||||
- 활성 항목은 아카이브 경로를 포함하지 않는다.
|
||||
- `[검토중]` 항목은 사용자 완료 확인 전까지 활성 항목으로 남길 수 있다.
|
||||
- `[스케치]` 항목은 활성 후보로 남길 수 있지만 구현 계획 생성 대상은 아니며, `[계획]` 승격 조건을 정리하는 대상으로만 다룬다.
|
||||
- `[완료]` 또는 `[폐기]` 항목은 archive 링크를 남긴 뒤 활성 항목에서 제거한다.
|
||||
- 요청 내용, 현재 브랜치, 변경 파일, 관련 코드 경로를 보고 가장 관련 있는 Phase와 Milestone을 선택하고 같은 세션에서 1회 읽는다.
|
||||
- 활성 Phase 또는 Milestone 둘 이상에 걸치면 필요한 문서를 모두 읽고 작업 범위를 좁힌다.
|
||||
- 활성 범위 밖의 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 활성 범위 밖의 작업이면 `agent-roadmap/ROADMAP.md`의 Phase 흐름을 확인하고 사용자에게 진행 또는 전환 여부를 확인한다.
|
||||
- 완료된 과거 내용이 필요할 때만 `ROADMAP.md` 또는 `PHASE.md`에 있는 archive 링크를 따라가서 읽는다.
|
||||
- 선택된 Milestone의 `구현 잠금` 섹션이 없거나 상태가 `잠금`이면 구현이나 구현 계획을 시작하기 전에 현재 요청에 직접 영향을 주는 `결정 필요` 항목만 확인한다. 관련 결정이 없고 표준선으로 처리 가능하면 잠금을 유지한 채 진행할 수 있으며, Milestone 전체에서 사용자만 결정할 항목이 더 이상 없을 때만 `구현 잠금` 상태를 `해제`로 둔다.
|
||||
- 선택된 Milestone 상태가 `[스케치]`이면 `구현 잠금` 상태와 관계없이 구현이나 구현 계획을 시작하지 않고 `[계획]` 승격 필요를 보고한다.
|
||||
|
|
@ -17,13 +17,13 @@ Mattermost server/webapp/push-proxy는 upstream-followable runtime으로 두고,
|
|||
스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다.
|
||||
|
||||
- [계획] 메시징 계약 표준화
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/milestones/messaging-contract.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/messaging-contract.md`
|
||||
- 요약: 서버와 Flutter 플러그인이 공유할 메시징/알림 API, 이벤트, 저장 계약을 정리한다.
|
||||
- [계획] 알림 파이프라인 고도화
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/milestones/notification-pipeline.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/notification-pipeline.md`
|
||||
- 요약: FCM, ACK, inline reply, dismiss, open routing을 안정된 플러그인 책임으로 만든다.
|
||||
- [스케치] 멀티앱 채널 모델
|
||||
- 경로: `agent-ops/roadmap/phase/messaging-runtime/milestones/multi-app-channel.md`
|
||||
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md`
|
||||
- 요약: 추가 앱이 생길 때 사용 채널만 늘려 분기할 수 있는 서비스 모델을 검토한다.
|
||||
|
||||
## Phase 경계
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -72,8 +72,8 @@ upstream-followable server/push runtime과 nexo-owned Flutter SDK가 주고받
|
|||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `packages/messaging_flutter/lib/`, `packages/messaging_flutter/android/`, `services/core/server/`, `apps/client/`
|
||||
- 관련 경로: `packages/messaging_flutter/lib/`, `packages/messaging_flutter/android/`, `services/core/server/`, `services/core/webapp/`, `services/core/compose/`, `apps/client/`
|
||||
- 표준선(선택): SDK public API는 nexo-owned wrapper로 유지하고, server/webapp/push-proxy compatibility는 얇은 layer로 흡수한다
|
||||
- 선행 작업: 정체성 기준선, 클라이언트 검증 기준선
|
||||
- 선행 작업: 정체성 기준선, 업스트림 팔로잉 기준선, 클라이언트 검증 기준선
|
||||
- 후속 작업: 알림 파이프라인 고도화, 멀티앱 채널 모델
|
||||
- 확인 필요: Flutter 앱 우선 노출 범위
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/messaging-runtime/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -16,13 +16,13 @@ nexo를 Mattermost 기반 서버/front/push-proxy 런타임과 nexo-owned Flutte
|
|||
스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다.
|
||||
|
||||
- [완료] 정체성 기준선
|
||||
- 경로: `agent-ops/roadmap/archive/phase/product-foundation/milestones/identity-baseline.md`
|
||||
- 경로: `agent-roadmap/archive/phase/product-foundation/milestones/identity-baseline.md`
|
||||
- 요약: 제품 이름, 메시징/알림 서비스 범위, project-owned naming의 nexo 전환 기준을 문서화했다.
|
||||
- [계획] 운영 기준선
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/runtime-baseline.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/milestones/runtime-baseline.md`
|
||||
- 요약: Mattermost server/webapp/push-proxy compose, 원격 Docker 세팅, 환경 변수, 최소 health check를 안정된 기준선으로 만든다.
|
||||
- [계획] 클라이언트 검증 기준선
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- 경로: `agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- 요약: `apps/client`가 플러그인 소비 앱이자 테스트 호스트로 반복 검증을 제공하도록 고정한다.
|
||||
|
||||
## Phase 경계
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/product-foundation/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/product-foundation/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -16,10 +16,10 @@ Mattermost server, webapp, push-proxy를 nexo의 upstream-followable 메시징
|
|||
스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다.
|
||||
|
||||
- [계획] 업스트림 팔로잉 기준선
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/milestones/upstream-following.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/milestones/upstream-following.md`
|
||||
- 요약: server/webapp/push-proxy의 upstream baseline, patch 경계, update 판단 기준을 정한다.
|
||||
- [계획] CI/CD와 운영 업데이트 루프
|
||||
- 경로: `agent-ops/roadmap/phase/upstream-runtime/milestones/cicd-operations.md`
|
||||
- 경로: `agent-roadmap/phase/upstream-runtime/milestones/cicd-operations.md`
|
||||
- 요약: upstream update, compose 배포, 검증 실패 이슈화를 반복 가능한 파이프라인으로 만든다.
|
||||
|
||||
## Phase 경계
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/upstream-runtime/PHASE.md`
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/upstream-runtime/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
"watcher": {
|
||||
"ignore": [
|
||||
"agent-task/archive/**",
|
||||
"agent-ops/roadmap/archive/**"
|
||||
"agent-roadmap/archive/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue