diff --git a/.clinerules b/.clinerules index 2befc287..c34b0438 100644 --- a/.clinerules +++ b/.clinerules @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/.cursorrules b/.cursorrules index 2befc287..c34b0438 100644 --- a/.cursorrules +++ b/.cursorrules @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/AGENTS.md b/AGENTS.md index 2befc287..c34b0438 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/CLAUDE.md b/CLAUDE.md index 2befc287..c34b0438 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/GEMINI.md b/GEMINI.md index 2befc287..c34b0438 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/agent-ops/.version b/agent-ops/.version index a0090b5d..546dc6a2 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.156 +1.1.157 diff --git a/agent-ops/bin/sync.sh b/agent-ops/bin/sync.sh index 21b7eca7..373738d5 100755 --- a/agent-ops/bin/sync.sh +++ b/agent-ops/bin/sync.sh @@ -88,6 +88,20 @@ common_differs() { return 1 } +entry_files_differ() { + local rules_md="$1" target_root="$2" + local f + + [[ -f "$rules_md" ]] || return 0 + for f in "${AGENT_OPS_ENTRY_FILES[@]}"; do + if [[ ! -f "$target_root/$f" ]] || ! cmp -s "$rules_md" "$target_root/$f"; then + return 0 + fi + done + + return 1 +} + create_project_agent_ops_dirs() { local agent_ops_dir="$1" mkdir -p "$agent_ops_dir/rules/project/domain" @@ -262,6 +276,11 @@ fi if [[ "$IS_FRAMEWORK" == "1" ]]; then SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")" echo " .agent-ops-source 감지: push 동기화에서는 버전 bump 없이 v$SRC_VER 그대로 전파" + if entry_files_differ "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"; then + echo " 공통 원본 repo 진입 파일 재적용" + apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT" + commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: reapply agent-ops entry files" "0" + fi if [[ -n "$TARGET_INPUT" ]]; then TARGET="$(resolve_target "$TARGET_INPUT")" if [[ -z "$TARGET" ]]; then @@ -315,22 +334,40 @@ if ! common_differs "$SRC_AO" "$DST_AO"; then COMMON_CHANGED="0" fi +ENTRY_FILES_CHANGED="0" +if entry_files_differ "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT" \ + || entry_files_differ "$DST_AO/rules/common/rules.md" "$TARGET"; then + ENTRY_FILES_CHANGED="1" +fi + if [[ "$COMMON_CHANGED" == "1" ]] && version_gt "$DST_VER" "$SRC_VER"; then echo -e "${RED}⚠ 버전 충돌: 원본 repo($DST_VER) > current($SRC_VER)${RESET}" echo -e "${YELLOW} 먼저 sync-pull로 내려받은 뒤 재시도하세요.${RESET}" exit 1 fi -if [[ "$COMMON_CHANGED" == "0" ]]; then - echo " 공통 파일 변경 없음: .version 차이는 무시하고 버전 갱신/커밋을 건너뜀" +if [[ "$COMMON_CHANGED" == "0" && "$ENTRY_FILES_CHANGED" == "0" ]]; then + echo " 공통 파일/진입 파일 변경 없음: .version 차이는 무시하고 버전 갱신/커밋을 건너뜀" echo -e "${GREEN}✓ 완료 (공통 변경 없음)${RESET}" exit 0 fi +if [[ "$COMMON_CHANGED" == "0" ]]; then + echo " 공통 파일 변경 없음: 진입 파일만 재적용" + apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT" + apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$TARGET" + commit_and_push_agent_ops_scope "$TARGET" "sync: reapply agent-ops entry files" "0" + commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: reapply agent-ops entry files" "0" + echo -e "${GREEN}✓ 완료 (진입 파일 재적용)${RESET}" + exit 0 +fi + NEW_VER="$(bump_version "$SRC_VER")" sync_common "$SRC_AO" "$DST_AO" echo "$NEW_VER" > "$SRC_AO/.version" echo "$NEW_VER" > "$DST_AO/.version" +apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT" +apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$TARGET" commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" "0" commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" "0" diff --git a/agent-ops/rules/common/rules-agent-ui.md b/agent-ops/rules/common/rules-agent-ui.md index a8754012..ac6e8f07 100644 --- a/agent-ops/rules/common/rules-agent-ui.md +++ b/agent-ops/rules/common/rules-agent-ui.md @@ -4,7 +4,7 @@ ## 목적 -`agent-ui/`는 AI agent와 사람이 UI 의도, 화면 구조, 와이어프레임, 반복 구성요소를 동기화하기 위한 작업 문맥 저장소다. +`agent-ui/`는 AI agent와 사람이 UI 의도, 화면 구조, 와이어프레임, 반복 구성요소, 코드 반영 상태를 동기화하기 위한 작업 문맥 저장소다. 초기 기준은 ops/dev UI이며, product UI는 같은 구조 위에 brand, content, assets, tokens, motion 같은 레이어를 추가할 수 있다. ## 기본 구조 @@ -12,6 +12,7 @@ ```text agent-ui/ README.md + .sync-state.json # 선택: agent-ui -> code 동기화 기준점 USER_REVIEW.md # 선택: 사용자 판단이 필요한 활성 리뷰 archive/ user-review/ @@ -53,8 +54,6 @@ agent-ui/ - 화면 의도, 상태, 액션, 정보 우선순위는 definition에 둔다. - 배치, 밀도, 시각적 영역 관계는 frame에 둔다. - 생성된 view/component는 코드, 문서, 사용자 입력 중 어떤 근거에서 왔는지 `Source Evidence`에 남긴다. -- 구현 코드에서 확인된 항목은 `implemented`, 문서 계획에서 온 항목은 `planned`, 사용자 명시 입력만 있고 근거가 부족한 항목은 `assumed`, 판단 불가 항목은 `unknown`으로 표시한다. -- `planned`, `assumed`, `unknown` 항목을 구현 완료처럼 설명하지 않는다. ## Frontmatter Schema @@ -65,17 +64,46 @@ agent-ui/ - component 문서는 `component_id`, `status`, `source_evidence`를 둔다. - view 문서의 `frame`은 frame-view 문서가 있으면 경로, 없으면 `null`로 둔다. - frame-view 문서는 visual source가 있을 때만 만들며 `view_id`, `definition`, `visual_source`, `regions`를 둔다. -- `status`는 `implemented`, `planned`, `assumed`, `unknown` 중 하나다. - `source_evidence`는 list이며 각 항목은 `type`, `path`, `notes`를 둔다. - `source_evidence.type`은 `code`, `docs`, `user` 중 하나다. - 실제 파일 근거가 없으면 `path: null`을 사용한다. placeholder 문자열을 현재 근거처럼 남기지 않는다. - view에 visual source가 없으면 view 문서의 `frame`을 `null`로 두고 frame-view 문서를 만들지 않는다. - frame-view를 만들 때 `visual_source`는 실제 존재하는 visual source 경로여야 한다. 없는 `wire.excalidraw`를 기본 근거처럼 쓰지 않는다. -- `implemented`는 존재하는 `code` evidence path가 있을 때만 사용한다. -- `planned`는 문서 근거만 있을 때, `assumed`는 사용자 명시 입력만 있을 때, `unknown`은 근거나 판단이 부족할 때 사용한다. +- `status` 값은 `구현됨`, `계획`, `가정`, `불명확` 중 하나다. +- `구현됨`은 코드 반영 완료 상태다. 코드 근거가 있으면 존재하는 `code` evidence path를 함께 둔다. +- `계획`은 정합화된 UI 정의지만 아직 코드 반영 전이거나 사용자 확인 후 재작업 대상인 상태다. +- `가정`은 사용자 입력 또는 추정만 있고 확정 근거가 부족한 상태다. +- `불명확`은 근거가 부족하거나 판단할 수 없는 상태다. +- `가정`과 `불명확`은 코드 동기화 대상이 아니며, sync 전에 `agent-ui/USER_REVIEW.md`로 분리한다. - frontmatter의 `status`, `source_evidence`, `regions`와 본문 `Status`, `Source Evidence`, `Regions`는 같은 기준을 말해야 한다. - frontmatter는 기계적 검증을 위한 최소 schema이고, 본문 Markdown은 사람과 agent가 읽는 설명을 유지한다. +## 운영 동기화 흐름 + +- 초기 생성 이후 기본 방향은 `agent-ui -> code` 단방향이다. 코드에서 agent-ui를 만드는 흐름은 `create-agent-ui` 최초 생성에만 사용한다. +- 화면정의서, view, component, frame, wireframe을 agent로 수정하는 요청은 `update-agent-ui`로 처리한다. +- 사용자 리뷰 결정 반영, `UIR-NNN` 해결, "화면정의서와 코드가 안 맞아" 같은 회귀 요청도 `update-agent-ui` 또는 `validate-agent-ui`로 들어와 같은 루프를 재개한다. +- `update-agent-ui` 후에는 변경 범위에 따라 `validate-agent-ui` 필요 여부를 판단한다. 실행한다면 `validate-agent-ui`가 항상 `sync-agent-ui`보다 먼저 실행된다. +- `validate-agent-ui`는 agent-ui 내부 문서 그래프를 정합화한다. definition, frame, visual source, component, archive, USER_REVIEW 사이의 누락과 충돌을 같은 수준으로 맞춘다. +- 운영 단계의 `validate-agent-ui`는 코드 후보만 보고 새 view/component를 자동 생성하지 않는다. 코드와 agent-ui가 어긋나면 agent-ui 기준 sync 대상, status 회귀, 또는 USER_REVIEW로 분리한다. +- `sync-agent-ui`는 정합화된 agent-ui 변경분을 코드에 반영한다. +- `sync-agent-ui`의 기본 모드는 `.sync-state.json` 기준 이후 변경분만 동기화한다. +- 사용자가 "agent-ui와 코드 전체 동기화"처럼 전체 동기화를 명시한 경우에만 현재 agent-ui 전체를 코드와 대조한다. +- `update-agent-ui` 또는 수동 `validate-agent-ui`가 코드 반영 필요성을 판단했으면 그 판단을 다음 단계로 전달한다. 전달된 판단이 있으면 뒤 단계는 같은 내용을 재판단하지 않는다. +- 코드 동기화가 완료되면 반영된 view/component의 `status`를 `구현됨`으로 바꾼다. 사용자 확인 또는 후속 검증에서 불일치가 발견되면 해당 항목은 `계획`으로 되돌릴 수 있다. +- `sync-agent-ui`가 검증 실패, 환경 차단, 구현 방향 충돌, 반복 실패를 스스로 해결하지 못하면 commit/push하지 않고 `agent-ui/USER_REVIEW.md`에 게이트를 남긴다. +- 실패한 `sync-agent-ui`가 남긴 작업트리 변경은 사용자 결정과 충돌하지 않으면 보존하고, USER_REVIEW 해결 후 같은 변경을 이어서 재검증할 수 있다. + +## Sync State + +- `agent-ui/.sync-state.json`은 agent-ui 변경분을 코드에 반영한 기준점이다. +- `create-agent-ui`는 생성 결과를 최초 baseline으로 보고 `.sync-state.json`을 만든다. +- 기존 방식으로 생성되어 `.sync-state.json`이 없는 agent-ui는 legacy 상태다. 이 경우 기본 변경분 sync를 시작하지 말고 validate 후 baseline migration으로 기준점을 먼저 만든다. +- baseline은 `code-first`, `concept-first`, `blank` 모두에서 생성된 agent-ui 기준선을 뜻한다. `concept-first` baseline은 코드 구현 완료가 아니라 agent-ui 기준선 확정이다. +- `last_synced_head`는 agent-ui 변경분과 코드 반영이 들어간 sync 결과 commit hash다. `.sync-state.json` 자체를 기록한 commit hash가 아니다. +- baseline 또는 sync 완료 시 commit은 두 단계로 남길 수 있다. 먼저 agent-ui/code 변경 commit을 만들고, 그 commit hash를 `.sync-state.json`에 기록한 별도 commit을 만든 뒤 push한다. +- 변경분 판정에서는 `.sync-state.json` 자체 변경을 제외한다. + ## 명명 규칙 - view id, component id, 파일명, 디렉터리명은 kebab-case를 사용한다. @@ -103,7 +131,11 @@ agent-ui/ ## USER_REVIEW - agent가 확정할 수 없는 UI 의도, 화면 구조, region 추가/삭제, component 신규 생성 여부, page/drawer/split 같은 UX 결정은 `agent-ui/USER_REVIEW.md`에 남긴다. +- `agent-ui/USER_REVIEW.md`는 `update-agent-ui`, `validate-agent-ui`, `sync-agent-ui`의 통합 gate다. +- 항목에는 어느 단계에서 막혔는지 알 수 있게 `Source Skill`, `Stage`, `Blocking Step`, `Context`, `Options`, `Needed For`를 남긴다. +- 현재 동기화 범위에 미해결 USER_REVIEW 항목이 있으면 `sync-agent-ui`는 실행하지 않는다. - 해결된 user review는 `agent-ui/archive/user-review/user_review_N.log`로 이동할 수 있다. +- USER_REVIEW 해결 요청은 관련 결정을 agent-ui 활성 문서에 반영한 뒤, 해당 항목을 archive log로 이동하고, 필요하면 `validate-agent-ui`와 `sync-agent-ui`를 순서대로 재개한다. - `USER_REVIEW.md`가 있으면 관련 agent-ui 갱신이나 검증 결과에 남은 review id를 보고한다. ## Excalidraw @@ -120,5 +152,6 @@ agent-ui/ ## 스킬 - agent-ui 초기 scaffold 생성은 `create-agent-ui`를 사용한다. -- view, component, frame 갱신은 `update-agent-ui`를 사용한다. -- 구조와 정합성 검사, 자동 보정, USER_REVIEW 생성은 `validate-agent-ui`를 사용한다. +- 화면정의서, view, component, frame, wireframe 갱신은 `update-agent-ui`를 사용한다. +- 구조와 정합성 검사, 문서 간 자동 보정, USER_REVIEW 생성은 `validate-agent-ui`를 사용한다. +- 정합화된 agent-ui 변경분을 코드에 반영할 때는 `sync-agent-ui`를 사용한다. diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index 2befc287..c34b0438 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -30,7 +30,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- agent-ui 생성/갱신/검증, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW +- agent-ui 생성/갱신/검증/코드 동기화, UI 스캐폴드, 화면 정의서, view/component/frame/wireframe 정의, agent-ui USER_REVIEW - 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - agent-contract 생성/갱신, 계약 문서 작성/정리, 제공/소비 계약 포인터 관리 - README 생성 diff --git a/agent-ops/skills/common/_templates/agent-ui/component-index-template.md b/agent-ops/skills/common/_templates/agent-ui/component-index-template.md index d8b30b08..fce6a53f 100644 --- a/agent-ops/skills/common/_templates/agent-ui/component-index-template.md +++ b/agent-ops/skills/common/_templates/agent-ui/component-index-template.md @@ -1,7 +1,7 @@ --- ui_doc_type: component component_id: -status: +status: <구현됨|계획|가정|불명확> source_evidence: - type: code path: null @@ -18,7 +18,7 @@ source_evidence: Component ID: `` -Status: `` +Status: `<구현됨|계획|가정|불명확>` ## Source Evidence diff --git a/agent-ops/skills/common/_templates/agent-ui/definition-index-template.md b/agent-ops/skills/common/_templates/agent-ui/definition-index-template.md index bf02571c..1bb8d3b5 100644 --- a/agent-ops/skills/common/_templates/agent-ui/definition-index-template.md +++ b/agent-ops/skills/common/_templates/agent-ui/definition-index-template.md @@ -48,7 +48,9 @@ source_evidence: - frame-view가 있으면 view region id와 frame region id는 동일해야 한다. - view에서 참조한 component id는 `components/` 아래에 정의되어야 한다. - frame은 definition을 대체하지 않는다. -- `implemented`, `planned`, `assumed`, `unknown` 상태를 섞어 쓰지 않는다. +- `구현됨`, `계획`, `가정`, `불명확` 상태를 섞어 쓰지 않는다. +- 기본 코드 동기화는 `.sync-state.json` 기준 이후 변경분만 대상으로 한다. +- 전체 동기화는 사용자가 명시한 경우에만 수행한다. ## Decision History diff --git a/agent-ops/skills/common/_templates/agent-ui/readme-template.md b/agent-ops/skills/common/_templates/agent-ui/readme-template.md index 95bd50da..1b1a0e76 100644 --- a/agent-ops/skills/common/_templates/agent-ui/readme-template.md +++ b/agent-ops/skills/common/_templates/agent-ui/readme-template.md @@ -16,6 +16,7 @@ surface_type: ops-dev - `definition/`: 현재 UI 정의 source of truth - `frame/`: visual source가 있는 view의 wireframe 연결 +- `.sync-state.json`: agent-ui -> code 동기화 기준점 - `USER_REVIEW.md`: 사용자 판단이 필요한 활성 질문 - `archive/user-review/`: 해결된 사용자 리뷰 로그 @@ -24,4 +25,5 @@ surface_type: ops-dev - 현재 기준은 `definition/**`에 둔다. - visual wireframe은 visual source가 있을 때만 `frame/**`에 둔다. - `.excalidraw` 파일만으로 UI 기준을 확정하지 않는다. +- 초기 생성 이후 기본 흐름은 `agent-ui -> code` 방향이다. - `definition/archive/**`와 `archive/user-review/**`는 과거 기록이며 일반 작업에서 읽지 않는다. diff --git a/agent-ops/skills/common/_templates/agent-ui/sync-state-template.json b/agent-ops/skills/common/_templates/agent-ui/sync-state-template.json new file mode 100644 index 00000000..6b1ba1c2 --- /dev/null +++ b/agent-ops/skills/common/_templates/agent-ui/sync-state-template.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "surface_type": "ops-dev", + "baseline_mode": "", + "last_sync_mode": "baseline", + "last_synced_head": "", + "last_synced_at": "", + "agent_ui_paths": [], + "code_paths": [], + "notes": [] +} diff --git a/agent-ops/skills/common/_templates/agent-ui/user-review-template.md b/agent-ops/skills/common/_templates/agent-ui/user-review-template.md index bc3ae4eb..7b7359dd 100644 --- a/agent-ops/skills/common/_templates/agent-ui/user-review-template.md +++ b/agent-ops/skills/common/_templates/agent-ui/user-review-template.md @@ -11,9 +11,14 @@ status: open ## Review Items - [ ] [UIR-001] <결정이 필요한 질문> + - Source Skill: + - Stage: + - Blocking Step: - Context: <관련 view/component/frame 경로> - Options: <후보가 있으면 적는다> - Needed For: <차단되는 작업> + - Resume From: <해결 후 재개할 스킬/명령> + - Pending Changes: <남은 작업트리 변경 파일 또는 없음> ## Notes diff --git a/agent-ops/skills/common/_templates/agent-ui/view-index-template.md b/agent-ops/skills/common/_templates/agent-ui/view-index-template.md index 3a80499c..2d4640c6 100644 --- a/agent-ops/skills/common/_templates/agent-ui/view-index-template.md +++ b/agent-ops/skills/common/_templates/agent-ui/view-index-template.md @@ -1,7 +1,7 @@ --- ui_doc_type: view view_id: -status: +status: <구현됨|계획|가정|불명확> frame: null source_evidence: - type: code @@ -24,7 +24,7 @@ View ID: `` Frame: - 없음 -Status: `` +Status: `<구현됨|계획|가정|불명확>` ## Source Evidence diff --git a/agent-ops/skills/common/create-agent-ui/SKILL.md b/agent-ops/skills/common/create-agent-ui/SKILL.md index 392defb1..6151ba00 100644 --- a/agent-ops/skills/common/create-agent-ui/SKILL.md +++ b/agent-ops/skills/common/create-agent-ui/SKILL.md @@ -1,7 +1,7 @@ --- name: create-agent-ui version: 1.1.0 -description: 프로젝트 코드 또는 문서 근거를 분석해 agent-ui 기본 스캐폴드와 동기화된 UI 정의 초안을 생성하는 스킬 +description: 프로젝트 코드 또는 문서 근거를 분석해 agent-ui 기본 스캐폴드와 최초 코드 동기화 기준선을 생성하는 스킬 --- # create-agent-ui @@ -9,7 +9,7 @@ description: 프로젝트 코드 또는 문서 근거를 분석해 agent-ui 기 ## 목적 프로젝트의 기존 UI 코드나 컨셉 문서를 근거로 `agent-ui/` 기본 구조와 UI 정의 초안을 생성한다. -ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분해 AI와 사람이 UI 의도를 동기화할 수 있게 만든다. +ops/dev UI를 1차 대상으로 하며, 생성 결과를 최초 agent-ui 기준선으로 보고 `.sync-state.json`을 만든다. ## 언제 호출할지 @@ -32,6 +32,8 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - [ ] 기존 `agent-ui/`가 있으면 덮어쓰지 않고 `update-agent-ui` 또는 `validate-agent-ui` 대상인지 보고한다. - [ ] 템플릿 경로 `agent-ops/skills/common/_templates/agent-ui/` 하위 파일을 확인한다. - [ ] `source-mode=auto`이면 UI 코드 후보와 컨셉 문서 후보를 모두 가볍게 확인한다. +- [ ] baseline commit/push를 위해 현재 git status와 HEAD를 확인한다. +- [ ] unrelated dirty worktree가 있으면 baseline commit 전에 범위를 보고하고, agent-ui 생성 파일만 stage한다. ## 실행 절차 @@ -79,10 +81,10 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - 각 view 후보마다 다음 문서를 만든다. - `agent-ui/definition/views//index.md` - view 문서에는 `Source Evidence`와 `Status`를 반드시 남긴다. - - 코드 근거가 있으면 `status: implemented` - - 문서 근거만 있으면 `status: planned` - - 명시 입력만 있고 근거가 부족하면 `status: assumed` - - 판단 불가하면 `status: unknown`과 USER_REVIEW 항목을 남긴다. + - 코드 근거가 있으면 `status: 구현됨` + - 문서 근거만 있으면 `status: 계획` + - 명시 입력만 있고 근거가 부족하면 `status: 가정` + - 판단 불가하면 `status: 불명확`과 USER_REVIEW 항목을 남긴다. - 실제 근거 파일이 없으면 frontmatter `source_evidence[].path`는 `null`로 둔다. - visual source가 없는 초기 view 문서의 frontmatter `frame`은 `null`로 둔다. - frontmatter의 `status`, `source_evidence`, `regions`와 본문 `Status`, `Source Evidence`, `Regions`가 같은 기준을 말하게 작성한다. @@ -106,13 +108,27 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - view 경계, component 신규 생성 여부, page/drawer/split 같은 UX 판단은 USER_REVIEW로 남긴다. - 문서 근거만 있는 계획 항목을 구현 완료처럼 쓰지 않는다. -8. **결과 보고** +8. **정합성 검증과 baseline 기록** + - 생성 직후 `validate-agent-ui`를 실행해 scaffold와 문서 간 정합성을 확인하고 자동 보정한다. + - `agent-ui/.sync-state.json`에 기록할 baseline 내용을 준비한다. + - `baseline_mode`는 선택된 `source-mode`로 둔다. + - `code-first`, `concept-first`, `blank` 모두 생성된 agent-ui를 최초 기준선으로 본다. + - baseline commit은 두 단계로 남긴다. + - 먼저 `.sync-state.json`을 제외한 agent-ui 생성/보정 파일을 commit한다. + - 그 commit hash를 새 `agent-ui/.sync-state.json`의 `last_synced_head`에 기록한 뒤 별도 commit한다. + - commit message는 예를 들어 `docs(agent-ui): create baseline`과 `sync: record agent-ui baseline`처럼 목적이 분리되게 쓴다. + - 두 commit을 push한다. + - USER_REVIEW가 생성되어도 생성 baseline은 남길 수 있다. 단, 이후 `sync-agent-ui`는 관련 USER_REVIEW가 해결될 때까지 실행하지 않는다. + +9. **결과 보고** - 선택된 `source-mode` - 읽은 근거 파일과 생성에 사용한 evidence - 생성한 파일 - 적용한 frontmatter schema - 생성한 view/component의 status - USER_REVIEW 생성 여부 + - `.sync-state.json` 생성 여부와 baseline commit hash + - baseline commit/push 결과 - product UI 확장 후보 - 후속 권장 작업 @@ -123,11 +139,15 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - [ ] 활성 Markdown 문서가 `ui_doc_type` frontmatter를 포함하는가 - [ ] view/component는 folder-first + `index.md` 구조를 사용하는가 - [ ] 생성한 view/component에 `Source Evidence`와 `Status`가 있는가 -- [ ] 구현 근거 없는 항목을 `implemented`로 표시하지 않았는가 +- [ ] 구현 근거 없는 항목을 `구현됨`으로 표시하지 않았는가 - [ ] visual source가 없는 view에 빈 `frame/views//index.md`를 만들지 않았는가 - [ ] 코드/문서 충돌이나 UI 의도 판단이 필요한 항목이 USER_REVIEW에 남았는가 - [ ] 같은 레벨에 `.md`와 `/`가 함께 생기지 않았는가 - [ ] archive 본문 파일을 불필요하게 생성하지 않았는가 +- [ ] `validate-agent-ui` 결과가 PASS 또는 자동 보정 완료 WARN으로 보고되었는가 +- [ ] `.sync-state.json`이 생성되었고 `last_synced_head`가 baseline commit을 가리키는가 +- [ ] baseline commit/push가 완료되었는가 +- [ ] unrelated dirty file이 baseline commit에 포함되지 않았는가 - 검증 실패 시: 누락된 scaffold만 보완하고 기존 문서를 덮어쓰지 않는다. ## 출력 형식 @@ -143,8 +163,10 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - views: - components: - USER_REVIEW: <생성/없음> +- sync state: <생성/없음, last_synced_head> +- baseline commit/push: <완료/실패/생략 사유> - 확인 필요: <항목 또는 없음> -- 후속 권장: validate-agent-ui 실행 +- 후속 권장: <필요 시 sync-agent-ui 또는 없음> ``` ## 금지 사항 @@ -155,3 +177,4 @@ ops/dev UI를 1차 대상으로 하며, 구현 근거와 문서 근거를 구분 - 문서 근거만 있는 항목을 구현 완료 상태로 쓰지 않는다. - product UI 전용 레이어를 요청 없이 추가하지 않는다. - `definition/archive/**`나 `archive/user-review/**`에 현재 기준 문서를 만들지 않는다. +- baseline commit 없이 `.sync-state.json`의 `last_synced_head`를 추정하지 않는다. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index b6441217..3f617d1f 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -13,8 +13,9 @@ | domain rule 만들어줘, rules.md 생성, 새 도메인 규칙 | `agent-ops/skills/common/create-domain-rule/SKILL.md` | | skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` | | agent-ui 생성, UI 스캐폴드 생성, UI 정의 구조 생성, 화면 정의 구조 생성, agent-ui scaffold | `agent-ops/skills/common/create-agent-ui/SKILL.md` | -| agent-ui 갱신, agent-ui 업데이트, view 추가, component 추가, frame 추가, wireframe 추가, 화면 정의 갱신, 화면 정의서 갱신 | `agent-ops/skills/common/update-agent-ui/SKILL.md` | -| agent-ui 검증, agent-ui validate, UI 정의 정합성 확인, wireframe 정합성 확인, UI 스캐폴드 검사 | `agent-ops/skills/common/validate-agent-ui/SKILL.md` | +| agent-ui 갱신, agent-ui 업데이트, view 추가, component 추가, frame 추가, wireframe 추가, 화면 정의 갱신, 화면 정의서 갱신, 화면정의서 수정, 화면 정의서에 추가, 화면 정의서에서 제거, 와이어프레임 수정, 와이어프레임에 추가, wireframe 수정, wireframe에 추가, agent-ui USER_REVIEW 해결, UIR 결정 반영 | `agent-ops/skills/common/update-agent-ui/SKILL.md` | +| agent-ui 검증, agent-ui validate, UI 정의 정합성 확인, wireframe 정합성 확인, 화면정의서와 wireframe 맞춰, 화면 정의서와 와이어프레임 정합성 확인, 화면정의서와 코드가 안 맞아, UI 스캐폴드 검사 | `agent-ops/skills/common/validate-agent-ui/SKILL.md` | +| agent-ui와 코드 동기화, agent-ui와 코드 전체 동기화, 화면정의서대로 코드 반영, 화면 정의서 변경사항 구현, wireframe 변경사항 구현 | `agent-ops/skills/common/sync-agent-ui/SKILL.md` | | create-test, 테스트 룰 작성, 테스트 룰 생성, 테스트 규칙 작성, 테스트 규칙 생성, 테스트 환경 생성, 상황별 테스트 문서 생성, 도메인별 테스트 문서 생성, 검증 시나리오별 테스트 문서 생성, test rule 생성, agent-test 생성 | `agent-ops/skills/common/create-test/SKILL.md` | | update-test, 테스트 룰 수정, 테스트 룰 갱신, 테스트 규칙 수정, 테스트 규칙 갱신, 테스트 환경 수정, 상황별 테스트 문서 수정, 도메인별 테스트 문서 수정, 검증 시나리오별 테스트 문서 수정, test rule 수정, agent-test 수정 | `agent-ops/skills/common/update-test/SKILL.md` | | agent-contract 생성, agent-contract 갱신, 계약 문서 작성, 계약 문서 정리, 제공 계약 추가, 소비 계약 추가, 외부 계약 포인터 관리 | `agent-ops/skills/common/agent-contract/SKILL.md` | diff --git a/agent-ops/skills/common/sync-agent-ui/SKILL.md b/agent-ops/skills/common/sync-agent-ui/SKILL.md new file mode 100644 index 00000000..268ee658 --- /dev/null +++ b/agent-ops/skills/common/sync-agent-ui/SKILL.md @@ -0,0 +1,123 @@ +--- +name: sync-agent-ui +version: 1.0.0 +description: 정합화된 agent-ui 변경분을 코드에 반영하고 .sync-state.json 기준점을 갱신한다. "agent-ui와 코드 동기화", "화면정의서대로 코드 반영" 요청 시 사용한다. +--- + +# sync-agent-ui + +## 목적 + +정합화된 `agent-ui/` 변경분을 실제 UI 코드에 반영한다. +기본 동작은 `.sync-state.json`의 `last_synced_head` 이후 agent-ui 변경분만 반영하며, 사용자가 전체 동기화를 명시한 경우에만 현재 agent-ui 전체를 코드와 대조한다. + +## 언제 호출할지 + +- 사용자가 "agent-ui와 코드 동기화", "화면정의서대로 코드 반영", "wireframe 변경사항 구현"을 요청할 때 +- `update-agent-ui` 또는 `validate-agent-ui`가 code sync 필요성을 판단했고 현재 범위에 미해결 USER_REVIEW가 없을 때 +- 사용자가 "agent-ui와 코드 전체 동기화"처럼 full sync를 명시할 때 + +## 입력 + +- `mode`: `incremental` 또는 `full`. 기본값은 `incremental` (선택) +- `scope`: `all`, `view:`, `component:` 중 하나. 기본값은 `all` (선택) +- `validated`: `true` 또는 `false`. 기본값은 `false` (선택) +- `sync-intent-source`: `manual`, `update-agent-ui`, `validate-agent-ui` 중 하나 (선택) +- `push`: `true` 또는 `false`. 기본값은 `true` (선택) + +## 먼저 확인할 것 + +- [ ] `agent-ops/rules/common/rules-agent-ui.md`를 읽는다. +- [ ] `agent-ui/`와 `agent-ui/definition/index.md` 존재 여부를 확인한다. +- [ ] `validated=true`가 아니면 먼저 `validate-agent-ui`를 실행한다. +- [ ] `agent-ui/USER_REVIEW.md`가 있으면 현재 sync 범위와 관련된 미해결 항목이 없는지 확인한다. +- [ ] `agent-ui/.sync-state.json`을 읽는다. 없고 `mode=incremental`이면 legacy baseline migration 필요로 보고 code sync를 시작하지 않는다. +- [ ] 수정할 UI 코드 경로에 해당하는 project/domain rule을 먼저 읽는다. +- [ ] 코드 변경 검증이 필요하면 작업 환경의 `agent-test//rules.md`를 읽는다. 환경 미지정은 `local`로 본다. +- [ ] `git status --short`와 현재 `HEAD`를 확인한다. +- [ ] unrelated dirty worktree가 있으면 sync commit 전에 범위를 보고하고, agent-ui와 관련 코드 파일만 stage한다. +- [ ] 이전 sync 실패로 남은 관련 작업트리 변경이 있으면 보존할지, 사용자 결정과 충돌하는지 확인한다. + +## 실행 절차 + +1. **동기화 범위 확정** + - `.sync-state.json`이 없고 `mode=incremental`이면 현재 agent-ui를 legacy baseline 후보로 본다. + - legacy baseline 후보는 `validate-agent-ui` 통과 후 agent-ui baseline commit과 `.sync-state.json` commit을 남기는 migration으로 처리하고, 같은 실행에서 코드 반영은 하지 않는다. + - `mode=incremental`이면 `.sync-state.json.last_synced_head` 이후 현재 `HEAD`/worktree까지의 agent-ui 변경분을 확인한다. + - 변경분 판정에서 `agent-ui/.sync-state.json` 자체는 제외한다. + - `mode=full`이면 현재 활성 `agent-ui/definition/**`과 `agent-ui/frame/**` 전체를 코드와 대조한다. + - `mode=full`에서 `.sync-state.json`이 없으면 code sync 성공 후 새 sync state를 만든다. + - `가정` 또는 `불명확` 상태 항목은 코드 반영 대상에서 제외하고 USER_REVIEW로 남긴다. + - 현재 범위에 미해결 USER_REVIEW가 있으면 중단한다. + +2. **코드 반영** + - `계획` 상태의 view/component/frame 요구사항을 UI 코드에 반영한다. + - existing component, route, shell, widget 구조를 우선하고 새 구조를 임의로 만들지 않는다. + - definition이 요구하는 정보 우선순위, region, action, state, component 참조를 코드 반영 기준으로 삼는다. + - wireframe/frame은 layout, density, visual relationship 보조 근거로만 사용하고 definition을 대체하지 않는다. + - 코드 반영이 끝난 항목은 agent-ui 문서의 `status`를 `구현됨`으로 갱신하고 Source Evidence에 코드 경로를 남긴다. + +3. **검증** + - 관련 domain rule과 agent-test rule에 맞는 최소 검증을 실행한다. + - 검증 실패가 명확하고 에이전트가 해결 가능하면 수정과 검증을 반복한다. + - 구현 방향 충돌, 환경/권한 차단, 반복 실패, 사용자 판단이 필요한 시각 결과는 `agent-ui/USER_REVIEW.md`에 남기고 중단한다. + - USER_REVIEW로 중단하면 commit/push하지 않고 `.sync-state.json`도 갱신하지 않는다. + - USER_REVIEW로 중단할 때 관련 작업트리 변경은 사용자 결정과 충돌하지 않으면 보존하고, 재개 진입점과 변경 파일을 USER_REVIEW에 남긴다. + +4. **sync state와 commit/push** + - 검증이 통과하면 agent-ui/code 변경을 먼저 commit한다. + - 방금 만든 sync 결과 commit hash를 `agent-ui/.sync-state.json`의 `last_synced_head`에 기록한다. + - `.sync-state.json`이 없으면 `agent-ops/skills/common/_templates/agent-ui/sync-state-template.json` 기준으로 새로 만든다. + - `.sync-state.json`에는 `last_sync_mode`, `last_synced_at`, `agent_ui_paths`, `code_paths`, `notes`를 갱신한다. + - `.sync-state.json` 변경을 별도 commit한다. + - commit message는 예를 들어 `sync: apply agent-ui to code`와 `sync: record agent-ui sync state`처럼 목적이 분리되게 쓴다. + - `push=true`이면 두 commit을 push한다. + +5. **결과 보고** + - sync mode와 scope + - 반영한 agent-ui 파일과 코드 파일 + - 변경한 status + - 실행한 검증 + - sync 결과 commit hash와 sync-state commit/push 결과 + - USER_REVIEW 생성/갱신 여부 + +## 실행 결과 검증 + +- [ ] `validate-agent-ui`가 먼저 실행되었거나 `validated=true` 근거가 있는가 +- [ ] 현재 sync 범위에 미해결 USER_REVIEW가 없는가 +- [ ] `가정` 또는 `불명확` 항목을 코드로 반영하지 않았는가 +- [ ] 코드 반영된 항목의 status가 `구현됨`이고 code evidence가 있는가 +- [ ] 관련 검증이 통과했는가 +- [ ] 실패 또는 차단 시 commit/push와 `.sync-state.json` 갱신을 하지 않았는가 +- [ ] 실패 또는 차단 시 재개 진입점과 남은 변경 파일이 USER_REVIEW에 기록되었는가 +- [ ] 성공 시 sync 결과 commit과 `.sync-state.json` commit이 분리되었는가 +- [ ] `.sync-state.json.last_synced_head`가 sync 결과 commit hash를 가리키는가 +- [ ] unrelated dirty file이 sync commit에 포함되지 않았는가 +- 검증 실패 시: 에이전트가 해결할 수 없으면 `agent-ui/USER_REVIEW.md`에 남기고 중단한다. + +## 출력 형식 + +```md +## agent-ui 코드 동기화 결과: + +- Mode: +- Scope: +- Agent UI Changes: <파일 목록 또는 없음> +- Code Changes: <파일 목록 또는 없음> +- Status Updates: <구현됨 전환 목록 또는 없음> +- Verification: <명령과 결과> +- Sync Commit: +- Sync State Commit/Push: <완료/생략/실패> +- USER_REVIEW: <생성/갱신/없음> +- Remaining Issues: <목록 또는 없음> +``` + +## 금지 사항 + +- `validate-agent-ui`를 거치지 않고 코드 동기화를 시작하지 않는다. +- 미해결 USER_REVIEW가 있는 범위를 코드에 반영하지 않는다. +- `가정` 또는 `불명확` 상태 항목을 코드로 구현하지 않는다. +- 검증 실패나 사용자 판단 차단 상태에서 commit/push하지 않는다. +- `.sync-state.json`을 agent-ui 변경분 판정 대상으로 삼지 않는다. +- 정의서와 충돌하는 wireframe만을 근거로 코드 구현을 확정하지 않는다. +- 실패한 sync의 작업트리 변경을 사용자 결정 없이 되돌리지 않는다. diff --git a/agent-ops/skills/common/sync-push/SKILL.md b/agent-ops/skills/common/sync-push/SKILL.md index c10a01a2..166306f9 100644 --- a/agent-ops/skills/common/sync-push/SKILL.md +++ b/agent-ops/skills/common/sync-push/SKILL.md @@ -33,21 +33,25 @@ description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거 2. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh agentic-framework` 실행 3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행 4. 공통 관리 파일 변경 없이 `agent-ops/.version`만 다른 경우 `sync.sh`는 버전 갱신과 commit/push를 건너뛴다 -5. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다 -6. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다 +5. 공통 관리 파일 변경이 없어도 현재 프로젝트 또는 공통 원본 repo의 진입 파일이 `agent-ops/rules/common/rules.md`와 다르면 진입 파일만 재적용하고 commit/push 한다 +6. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다 +7. 이때 현재 프로젝트와 공통 원본 repo의 진입 파일은 각각 자기 `agent-ops/rules/common/rules.md` 내용으로 재적용한다 +8. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다 ### 현 프로젝트가 공통 원본 repo인 경우 (`.agent-ops-source` 있음) 1. 사용자 요청에서 target 프로젝트명 또는 경로를 추출한다 -2. **명시된 경우**: `agent-ops/bin/sync.sh ` 실행 -3. **명시되지 않은 경우**: `agent-ops/bin/sync.sh` 실행 -4. target이 없으면 `sync.sh`가 현재 프로젝트 기준 상위 폴더(`../`)의 하위 디렉터리 중 `agent-ops/` 폴더가 있는 프로젝트를 모두 대상으로 삼는다 -5. `sync.sh`는 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 -6. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함), 진입 파일, `.gitignore`, AI ignore / permission 파일을 stage 하여 commit/push 한다 -7. `.gitignore`와 AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다 -8. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다 +2. 공통 원본 repo 자신의 진입 파일이 `agent-ops/rules/common/rules.md`와 다르면 먼저 재적용하고 commit/push 한다 +3. **명시된 경우**: `agent-ops/bin/sync.sh ` 실행 +4. **명시되지 않은 경우**: `agent-ops/bin/sync.sh` 실행 +5. target이 없으면 `sync.sh`가 현재 프로젝트 기준 상위 폴더(`../`)의 하위 디렉터리 중 `agent-ops/` 폴더가 있는 프로젝트를 모두 대상으로 삼는다 +6. `sync.sh`는 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 +7. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함), 진입 파일, `.gitignore`, AI ignore / permission 파일을 stage 하여 commit/push 한다 +8. `.gitignore`와 AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다 +9. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다 덮어쓰기 대상은 `init-agent-ops` 초기 세팅과 동일하며, 실제 목록은 `agent-ops/bin/entry-files.sh`의 `AGENT_OPS_ENTRY_FILES`를 단일 기준으로 사용한다. +모든 repo에서 진입 파일 내용은 해당 repo의 `agent-ops/rules/common/rules.md`와 같아야 한다. | 에이전트 | 파일명 | |---------|--------| @@ -101,6 +105,7 @@ agent-ops/bin/sync.sh [target] - [ ] sync.sh 가 오류 없이 완료됐는가 - [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다 - [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] 현재 repo와 대상 repo의 `AGENT_OPS_ENTRY_FILES` 진입 파일이 각각 자기 repo의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.gitignore`에 Agent-Ops 관리 gitignore block이 있고 `!agent-task/`, `!agent-task/**/`, `!agent-task/**/*.md`, `!agent-task/**/*.log`, `agent-roadmap/current.md`가 포함되어 있는가 - [ ] 대상 프로젝트에서 `agent-roadmap/current.md`가 있으면 파일은 보존되고 git 추적 대상에서는 제거됐는가 diff --git a/agent-ops/skills/common/update-agent-ui/SKILL.md b/agent-ops/skills/common/update-agent-ui/SKILL.md index f9cfd03a..406b7c4f 100644 --- a/agent-ops/skills/common/update-agent-ui/SKILL.md +++ b/agent-ops/skills/common/update-agent-ui/SKILL.md @@ -1,16 +1,16 @@ --- name: update-agent-ui version: 1.1.0 -description: 기존 agent-ui의 view, component, frame, wireframe 연결, source evidence, status, decision history를 갱신하는 스킬 +description: 화면정의서, view, component, frame, wireframe 내용을 agent로 수정하고 후속 validate/sync 필요성을 판단하는 스킬 --- # update-agent-ui ## 목적 -기존 `agent-ui/`의 UI 정의를 갱신한다. -view, component, frame index, Excalidraw visual source 연결, source evidence, status를 현재 기준에 맞게 수정하고, 오래된 기준은 필요한 경우 archive log로 분리한다. -frame-view는 visual source가 있을 때만 활성 문서로 둔다. +기존 `agent-ui/`의 화면정의서와 wireframe 관련 문서를 갱신한다. +사용자가 "화면정의서에 X 추가", "wireframe에 사이드바 추가"처럼 agent-ui 명사를 쓰지 않아도 UI 정의 문서 수정 요청이면 이 스킬을 사용한다. +오래된 결정이 현재 기준을 흐리면 archive log로 분리하고, 변경 후 `validate-agent-ui`와 `sync-agent-ui` 필요성을 판단한다. ## 언제 호출할지 @@ -19,6 +19,8 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - 기존 구현 코드 또는 컨셉 문서 변화에 맞춰 Source Evidence와 Status를 갱신할 때 - agent-ui 문서의 decision history, open question, user review를 갱신할 때 - ops/dev UI 정의를 제품 진행 상황에 맞춰 동기화할 때 +- 사용자가 "화면정의서에 ... 추가/수정/삭제", "와이어프레임에 ... 추가/수정/삭제", "wireframe에 ... 반영"처럼 요청할 때 +- 사용자가 `UIR-NNN` 결정, agent-ui USER_REVIEW 해결, 화면정의서와 코드 불일치 보정을 요청할 때 ## 입력 @@ -27,8 +29,11 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - `component-id`: 대상 component id 또는 path id (선택) - `frame-source`: 예: `wire.excalidraw`, `overview.png` (선택) - `evidence`: 코드, 문서, 사용자 입력 근거 경로 또는 요약 (선택) -- `status`: `implemented`, `planned`, `assumed`, `unknown` 중 하나 (선택) +- `status`: `구현됨`, `계획`, `가정`, `불명확` 중 하나 (선택) - `mode`: `definition`, `frame`, `component`, `mixed` 중 하나. 기본값은 `mixed` (선택) +- `post-validate`: `auto`, `true`, `false` 중 하나. 기본값은 `auto` (선택) +- `post-sync`: `auto`, `true`, `false` 중 하나. 기본값은 `auto` (선택) +- `review-resolution`: 해결할 `UIR-NNN`과 결정 내용 (선택) ## 먼저 확인할 것 @@ -53,12 +58,12 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - 활성 Markdown 문서의 frontmatter를 유지하고, 새 문서는 `rules-agent-ui.md`의 Frontmatter Schema를 적용한다. - view 문서에는 status, source evidence, purpose, tasks, information priority, regions, actions, states, open questions, decision history를 유지한다. - component 문서에는 status, source evidence, purpose, used by, anatomy, variants, states, rules, decision history를 유지한다. - - 구현 코드 근거가 확인된 항목은 `implemented`, 문서 근거만 있는 항목은 `planned`, 사용자 명시 입력만 있고 근거가 부족한 항목은 `assumed`, 판단 불가 항목은 `unknown`으로 둔다. + - 구현 코드 반영 완료 항목은 `구현됨`, 문서 기준으로 정합화됐지만 코드 반영 전이거나 재작업 대상인 항목은 `계획`, 사용자 입력/추정만 있는 항목은 `가정`, 판단 불가 항목은 `불명확`으로 둔다. - 실제 근거 파일이 없으면 frontmatter `source_evidence[].path`는 `null`로 둔다. - frontmatter의 `status`, `source_evidence`, `regions`와 본문 `Status`, `Source Evidence`, `Regions`가 충돌하지 않게 함께 갱신한다. - `status`가 입력되었더라도 evidence와 맞지 않으면 임의로 확정하지 않고 USER_REVIEW로 남긴다. - 새 view/component를 만들 때는 `Source Evidence`와 `Status`를 반드시 채운다. - - 오래된 결정이 현재 기준을 흐리면 대응되는 `definition/archive/**.log`로 이동하거나 추가한다. + - 오래된 결정이 현재 기준을 흐리면 대응되는 `definition/archive/**.log`로 이동하거나 추가한다. 단순 변경 이벤트를 모두 archive로 남기지 않는다. 3. **frame 갱신** - `frame-source`가 있고 대응되는 `frame/views//index.md`가 없으면 템플릿으로 만든다. @@ -72,15 +77,30 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. 4. **USER_REVIEW 처리** - agent가 확정할 수 없는 화면 의도, region 추가/삭제, component 신규 생성 여부, page/drawer/split 선택은 `agent-ui/USER_REVIEW.md`에 남긴다. + - USER_REVIEW 항목에는 `Source Skill: update-agent-ui`, `Stage: definition-edit`, `Blocking Step`을 남긴다. - 기존 USER_REVIEW 항목을 해결하는 변경이면 항목 상태를 갱신하고, 필요하면 `agent-ui/archive/user-review/user_review_N.log`로 이동한다. - 해결 로그를 만들 때는 현재 변경과 직접 관련된 항목만 이동한다. + - `review-resolution`이 있으면 결정 내용을 관련 활성 definition/frame/component 문서에 먼저 반영한다. + - 해결된 항목은 `agent-ui/archive/user-review/user_review_N.log`로 이동하고, 활성 `USER_REVIEW.md`에는 미해결 항목만 남긴다. 남은 항목이 없으면 활성 `USER_REVIEW.md`를 제거할 수 있다. + - sync 실패 후 남은 작업트리 변경이 있고 사용자 결정과 충돌하지 않으면 보존한 채 후속 validate/sync에서 이어간다. -5. **결과 보고** +5. **후속 validate/sync 판단** + - `post-validate=false`가 아니고 view/component/frame/wireframe/source evidence/status 중 하나라도 바뀌었으면 `validate-agent-ui`를 실행한다. + - `post-validate=true`이면 변경 크기와 무관하게 `validate-agent-ui`를 실행한다. + - `post-sync=true` 또는 코드 반영이 필요한 `계획` 상태 변경이 있으면 sync intent를 `validate-agent-ui`에 전달한다. + - `post-sync=false`이면 sync intent를 전달하지 않는다. + - 후속 단계가 실행되면 순서는 항상 `validate-agent-ui` 다음 `sync-agent-ui`다. + - 현재 변경 범위에 미해결 USER_REVIEW가 있으면 `sync-agent-ui`를 실행하지 않고 차단 항목을 보고한다. + - 사용자가 "화면정의서와 코드가 안 맞아"처럼 불일치를 보고하면 관련 항목을 `계획`으로 되돌릴지 확인하고 validate/sync intent를 만든다. + +6. **결과 보고** - 수정한 활성 정의 문서 - 수정한 frame 문서와 visual source - frontmatter schema 변경 여부 - archive log 변경 여부 - USER_REVIEW 생성/갱신 여부 + - validate-agent-ui 실행 여부와 결과 + - sync-agent-ui 필요 여부와 실행/보류 사유 - 남은 정합성 확인 항목 ## 실행 결과 검증 @@ -88,13 +108,16 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - [ ] view/component는 folder-first + `index.md` 구조를 유지하는가 - [ ] 새로 만들거나 수정한 활성 Markdown 문서가 `ui_doc_type` frontmatter를 포함하는가 - [ ] 새로 만들거나 수정한 view/component에 `Source Evidence`와 `Status`가 있는가 -- [ ] 구현 근거 없는 항목을 `implemented`로 표시하지 않았는가 +- [ ] 구현 근거 또는 sync 완료 없이 항목을 `구현됨`으로 표시하지 않았는가 - [ ] frame-view가 있으면 view region id와 frame region id가 충돌하지 않는가 - [ ] view에서 참조한 component id가 존재하거나 USER_REVIEW에 남았는가 - [ ] visual source가 있으면 대응 frame index에 기록되었는가 - [ ] visual source가 없는데 빈 frame-view 문서만 남아 있지 않은가 - [ ] 현재 기준이 archive에만 남지 않았는가 - [ ] 확정할 수 없는 UI 결정이 임의로 확정되지 않았는가 +- [ ] 후속 단계가 필요할 때 `validate-agent-ui`가 `sync-agent-ui`보다 먼저 실행되었는가 +- [ ] USER_REVIEW 해결 요청이면 결정이 활성 문서에 반영되고 해결 로그가 archive 되었는가 +- [ ] sync 실패 후 남은 작업트리를 임의로 버리지 않았는가 - 검증 실패 시: 자동 보정 가능한 것은 보완하고, 판단이 필요한 것은 `agent-ui/USER_REVIEW.md`에 남긴다. ## 출력 형식 @@ -110,6 +133,9 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - frontmatter schema: <변경/유지/없음> - archive 변경: <내용 또는 없음> - USER_REVIEW: <생성/갱신/없음> +- USER_REVIEW resolution: <해결/부분 해결/없음> +- validate-agent-ui: <실행/PASS/WARN/FAIL/생략 사유> +- sync-agent-ui: <실행/보류/생략 사유> - 확인 필요: <항목 또는 없음> ``` @@ -123,3 +149,5 @@ frame-view는 visual source가 있을 때만 활성 문서로 둔다. - `.excalidraw` 파일만 만들고 frame index를 생략하지 않는다. - visual source 없이 빈 frame-view 문서를 만들지 않는다. - agent-ui 갱신과 무관한 앱 구현 파일을 수정하지 않는다. +- `validate-agent-ui`를 거치지 않고 `sync-agent-ui`를 실행하지 않는다. +- sync 실패 후 남은 코드 변경을 사용자 결정 없이 되돌리지 않는다. diff --git a/agent-ops/skills/common/validate-agent-ui/SKILL.md b/agent-ops/skills/common/validate-agent-ui/SKILL.md index a7f10e92..6ef9904f 100644 --- a/agent-ops/skills/common/validate-agent-ui/SKILL.md +++ b/agent-ops/skills/common/validate-agent-ui/SKILL.md @@ -1,29 +1,32 @@ --- name: validate-agent-ui version: 1.1.0 -description: agent-ui scaffold, definition/frame/component/source evidence/status와 구현 코드 정합성을 검사하고 자동 보정하며 필요한 USER_REVIEW를 생성하는 스킬 +description: agent-ui scaffold, definition/frame/component/wireframe/source evidence/status 정합성을 맞추고 필요한 USER_REVIEW와 code sync intent를 분리하는 스킬 --- # validate-agent-ui ## 목적 -`agent-ui/` 구조, 문서 간 정합성, 구현 코드와 agent-ui 정의 간 정합성을 검사한다. -파일 규약처럼 결정적으로 고칠 수 있는 문제는 자동 보정하고, UI 의도 판단이 필요한 문제는 `agent-ui/USER_REVIEW.md`에 남긴다. +`agent-ui/` 구조와 문서 그래프 정합성을 검사하고 자동 보정한다. +definition, component, frame, visual source, USER_REVIEW, archive가 서로 뒤처진 상태를 같은 수준으로 맞추며, UI 의도 판단이 필요한 문제는 `agent-ui/USER_REVIEW.md`에 남긴다. ## 언제 호출할지 - agent-ui 구조 검증, UI 정의 정합성 확인, wireframe 정합성 확인을 요청할 때 - view/component/frame 문서가 서로 어긋났는지 확인할 때 - view/component의 Source Evidence와 Status가 근거와 맞는지 확인할 때 -- 실제 UI 코드와 agent-ui view/component 정의가 동기화되어 있는지 확인할 때 - Excalidraw visual source와 frame index 연결을 검사할 때 - agent-ui 갱신 후 자동 보정과 사용자 리뷰 분리가 필요할 때 +- 수동 호출에서 정합성 통과 후 code sync가 필요한지 판단할 때 +- 사용자가 "화면정의서와 코드가 안 맞아"처럼 UI 정의와 코드 결과물의 불일치를 보고할 때 ## 입력 - `scope`: `all`, `internal`, `implementation`, `view:`, `component:`, `frame:` 중 하나. 기본값은 `all` (선택) - `repair`: `true` 또는 `false`. 기본값은 `true` (선택) +- `sync-intent`: `auto`, `required`, `skip`, `inherited` 중 하나. 기본값은 수동 호출에서 `auto`, `update-agent-ui` 후속 호출에서 `inherited` (선택) +- `sync-mode`: `incremental` 또는 `full`. 기본값은 `incremental` (선택) ## 먼저 확인할 것 @@ -32,7 +35,8 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - [ ] `agent-ui/definition/index.md`, `definition/views/index.md`, `definition/components/index.md`, `frame/index.md` 존재 여부를 확인한다. - [ ] scope에 해당하는 활성 definition/frame 문서만 읽는다. - [ ] `scope=view:` 또는 `scope=component:`이면 해당 문서의 Source Evidence code path를 확인한다. -- [ ] `scope=all` 또는 `scope=implementation`이면 Source Evidence의 code path와 UI 구현 후보 파일을 확인한다. +- [ ] `scope=all`, `scope=implementation` 또는 sync intent가 있으면 Source Evidence의 code path와 UI 구현 후보 파일을 확인한다. +- [ ] `agent-ui/.sync-state.json`이 있으면 읽고, 없으면 sync 기준 없음으로 보고한다. - [ ] archive는 경로와 tree 대응만 확인하고, 사용자가 과거 내용 확인을 요청하지 않았으면 본문을 읽지 않는다. - [ ] 필요한 템플릿만 `agent-ops/skills/common/_templates/agent-ui/`에서 읽는다. @@ -62,11 +66,10 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - `source_evidence.type`은 `code`, `docs`, `user` 중 하나여야 한다. - 근거 파일이 없으면 `path: null`이어야 하며, placeholder 문자열을 근거로 보지 않는다. - frontmatter의 `status`, `source_evidence`, `regions`와 본문 `Status`, `Source Evidence`, `Regions`가 충돌하는지 확인한다. - - `Status`는 `implemented`, `planned`, `assumed`, `unknown` 중 하나여야 한다. - - `implemented` 항목은 실제 존재하는 코드 근거가 있어야 한다. - - `implemented`의 code evidence 경로가 명시되어 있고 실제 존재하지 않으면 `repair=true`일 때 `unknown`으로 낮추고 USER_REVIEW를 남길 수 있다. - - `implemented`인데 code evidence 자체가 없으면 자동 변경하지 않고 USER_REVIEW로 남긴다. - - `planned`, `assumed`, `unknown` 항목이 구현 완료처럼 설명되면 자동 의미 변경하지 않고 USER_REVIEW로 남긴다. + - `Status`는 `구현됨`, `계획`, `가정`, `불명확` 중 하나여야 한다. + - `구현됨` 항목은 코드 반영 완료 상태여야 한다. 코드 근거가 있으면 실제 존재하는 code evidence path를 가져야 한다. + - `구현됨`의 code evidence 경로가 명시되어 있고 실제 존재하지 않으면 `repair=true`일 때 `계획`으로 낮추고 USER_REVIEW를 남길 수 있다. + - `가정`, `불명확` 항목이 코드 동기화 가능한 정의처럼 설명되면 자동 의미 변경하지 않고 USER_REVIEW로 남긴다. - region id가 `.` 또는 `..` 형식인지 확인한다. - view 문서에서 참조한 component id가 component 목록에 있는지 확인한다. - 없는 component가 단순 누락이고 생성 의도가 명확하면 `repair=true`일 때 component skeleton을 만들고 `Status`와 `Source Evidence`를 채운다. @@ -97,19 +100,28 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - 예: `apps/**/lib/**`, `packages/**/lib/**`, `src/**`, `app/**`, `pages/**`, `screens/**`, `views/**`, `components/**`, `widgets/**`, route/navigation/shell 파일 - 프로젝트 규칙에 dedicated UI domain rule이 있으면 먼저 따른다. - 코드가 많으면 route, shell, page/view, widget/component 이름 중심으로 후보를 좁힌다. - - 코드 후보가 명확한 route/page/view/shell이면 대응 view가 있는지 확인한다. - - 코드 후보가 명확한 반복 widget/component/table/filter/log/status/action이면 대응 component가 있는지 확인한다. - - 명확한 누락이고 `repair=true`이면 skeleton view/component를 만들 수 있다. 이때 status는 `implemented`, source evidence는 해당 code path로 둔다. + - 운영 단계에서는 코드 후보만 보고 agent-ui view/component를 새로 만들지 않는다. + - 코드 후보가 명확한 route/page/view/shell인데 agent-ui에 대응 view가 없으면 USER_REVIEW로 남기거나, 사용자가 코드 기준 반영을 명시한 경우 `update-agent-ui`로 돌린다. + - 코드 후보가 명확한 반복 widget/component/table/filter/log/status/action인데 agent-ui에 대응 component가 없으면 USER_REVIEW로 남기거나, 사용자가 코드 기준 반영을 명시한 경우 `update-agent-ui`로 돌린다. + - 코드 결과물이 `구현됨` 상태의 agent-ui 정의와 어긋난다는 사용자 보고가 있으면 해당 항목을 `계획`으로 낮추고 sync intent를 만든다. - 후보가 임시/dev/debug 용도인지, view인지 component인지, region인지 판단이 필요하면 USER_REVIEW로 남긴다. - - 코드에서 사라진 evidence는 자동 삭제하지 않고, 명시된 code evidence 경로가 깨진 경우에만 `implemented`를 `unknown`으로 낮출 수 있다. + - 코드에서 사라진 evidence는 자동 삭제하지 않고, 명시된 code evidence 경로가 깨진 경우에만 `구현됨`을 `계획`으로 낮출 수 있다. 6. **USER_REVIEW 생성 또는 갱신** - active review 파일은 `agent-ui/USER_REVIEW.md`를 사용한다. - 새 항목 id는 기존 최대 `UIR-NNN` 다음 번호를 사용한다. - 같은 경로와 같은 질문의 중복 항목은 만들지 않는다. - - 항목에는 Context, Options, Needed For를 포함한다. + - 항목에는 `Source Skill: validate-agent-ui`, `Stage: document-consistency`, `Blocking Step`, Context, Options, Needed For를 포함한다. -7. **결과 판정** +7. **code sync intent 판정** + - `sync-intent=inherited`이면 `update-agent-ui`가 전달한 판단을 그대로 사용하고 재판단하지 않는다. + - 수동 호출이거나 `sync-intent=auto`이면 agent-ui 변경분과 `계획` 상태 항목을 보고 `sync-agent-ui` 필요 여부를 판단한다. + - `sync-intent=required`이면 validate 결과가 PASS 또는 자동 보정 완료 WARN이고 현재 범위에 미해결 USER_REVIEW가 없을 때 `sync-agent-ui`를 실행한다. + - `sync-intent=skip`이면 code sync 필요 여부를 보고만 하고 실행하지 않는다. + - 현재 범위에 `가정` 또는 `불명확` 항목이 있거나 미해결 USER_REVIEW가 있으면 `sync-agent-ui`를 실행하지 않는다. + - `sync-agent-ui`를 실행할 때는 이 스킬의 보정 결과를 입력으로 넘기고, 순서를 바꾸지 않는다. + +8. **결과 판정** - `PASS`: 자동 수정도 USER_REVIEW도 필요 없는 상태 - `WARN`: 자동 수정이 있었거나 USER_REVIEW가 생성/갱신된 상태 - `FAIL`: 구조가 너무 모호해서 자동 보정과 리뷰 작성 모두 불완전한 상태 @@ -122,17 +134,17 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - visual source가 있는 frame index의 region 누락 보완 - 빈 archive/user-review 디렉터리 생성 - 템플릿 필수 섹션과 frontmatter 누락 보완. `ui_doc_type`, `Source Evidence`, `Status` 누락 포함 -- 의도가 명확한 component skeleton 생성. 단, status/evidence를 함께 기록한다. -- 명확한 구현 코드 후보에 대응되는 skeleton view/component 생성. 단, status/evidence를 함께 기록한다. -- 명시된 code evidence 경로가 실제 존재하지 않는 `implemented`를 `unknown`으로 낮추고 USER_REVIEW를 남기는 보정 +- 명시된 code evidence 경로가 실제 존재하지 않는 `구현됨`을 `계획`으로 낮추고 USER_REVIEW를 남기는 보정 ## USER_REVIEW 대상 - 정의에는 없는 region이 기존 frame-view에 있고 추가/삭제 의도 판단이 필요한 경우 - frame-view가 있는데 frame에는 없는 region이 정의에 있고 layout 반영 여부 판단이 필요한 경우 - component 참조가 없으며 새 component 생성 또는 기존 component 재사용 판단이 필요한 경우 -- 코드 후보가 view, component, region, 임시/dev/debug UI 중 무엇인지 판단이 필요한 경우 +- 운영 단계에서 코드 후보가 view, component, region, 임시/dev/debug UI 중 무엇인지 판단이 필요한 경우 +- 운영 단계에서 코드에만 있는 view/component를 agent-ui에 반영할지 판단이 필요한 경우 - 코드와 agent-ui 정의가 충돌하지만 어느 쪽을 기준으로 삼을지 제품 판단이 필요한 경우 +- `계획` 항목을 코드로 반영하려 했지만 구현 방향, 환경, 권한, 검증 실패를 에이전트가 해결하지 못한 경우 - `.md`와 `/`가 모두 있고 둘 다 의미 있는 내용이 있는 경우 - drawer/page/split, 테이블/리스트, modal/page 같은 UX 방향 결정이 필요한 경우 @@ -142,8 +154,8 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - [ ] 활성 Markdown 문서가 유효한 `ui_doc_type` frontmatter를 갖는가 - [ ] folder-first + `index.md` 구조가 유지되는가 - [ ] view/component에 `Source Evidence`와 유효한 `Status`가 있는가 -- [ ] 명시된 code evidence 경로가 깨진 `implemented`가 남아 있지 않은가 -- [ ] `scope=implementation` 또는 `all`이면 명확한 UI 코드 후보가 agent-ui에 반영되었거나 USER_REVIEW에 남았는가 +- [ ] 명시된 code evidence 경로가 깨진 `구현됨`이 남아 있지 않은가 +- [ ] `scope=implementation` 또는 `all`이면 명확한 UI 코드 후보와 agent-ui 불일치가 sync intent 또는 USER_REVIEW로 분리되었는가 - [ ] view/component/frame 참조가 끊기지 않는가 - [ ] visual source가 없는 view는 frame 참조가 `null`이거나 비어 있는 frame-view가 없는가 - [ ] 자동 수정한 파일 목록이 보고되는가 @@ -161,7 +173,8 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - User Review: - Remaining Issues: <목록 또는 없음> - Checked Files: <활성 파일 목록> -- Implementation Sync: <확인/스킵/USER_REVIEW> +- Sync Intent: +- sync-agent-ui: <실행/보류/생략 사유> ``` ## 금지 사항 @@ -171,3 +184,6 @@ description: agent-ui scaffold, definition/frame/component/source evidence/statu - `.excalidraw` 내용을 현재 UI 기준으로 단독 확정하지 않는다. - 사용자 확인 없이 의미 있는 문서를 병합하거나 삭제하지 않는다. - agent-ui 검증과 무관한 앱 구현 파일을 수정하지 않는다. +- 전달받은 sync intent가 있으면 같은 내용을 재판단하지 않는다. +- `sync-agent-ui`보다 뒤에 실행되어서는 안 된다. +- 운영 단계에서 코드 후보만 근거로 agent-ui view/component skeleton을 자동 생성하지 않는다.