{"id":50412295,"url":"https://github.com/cskwork/olive-clone","last_synced_at":"2026-05-31T04:04:52.886Z","repository":{"id":361033131,"uuid":"1234665626","full_name":"cskwork/olive-clone","owner":"cskwork","description":"Spring Boot commerce backend portfolio with Thymeleaf catalog UI, PostgreSQL, Redis, OpenSearch, LocalStack S3, Flyway, and public-ready docs.","archived":false,"fork":false,"pushed_at":"2026-05-28T22:48:34.000Z","size":6331,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T00:16:47.241Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/cskwork/olive-clone#readme","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cskwork.png","metadata":{"files":{"readme":"README-symphony.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-10T13:38:27.000Z","updated_at":"2026-05-28T22:48:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cskwork/olive-clone","commit_stats":null,"previous_names":["cskwork/olive-clone"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cskwork/olive-clone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cskwork%2Folive-clone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cskwork%2Folive-clone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cskwork%2Folive-clone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cskwork%2Folive-clone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cskwork","download_url":"https://codeload.github.com/cskwork/olive-clone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cskwork%2Folive-clone/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33718494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-31T04:04:51.964Z","updated_at":"2026-05-31T04:04:52.869Z","avatar_url":"https://github.com/cskwork.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Olive-clone × Symphony 멀티 에이전트 실행 가이드\n\n이 디렉토리는 **올리브영형 헬스·뷰티 커머스 백엔드**를 [symphony-multi-agent]\n오케스트레이터로 빌드하기 위한 워크스페이스입니다. 35개의 kanban ticket이\n의존성 그래프로 묶여 있으며, Symphony가 차례로 깨워 Claude Code 에이전트가\n**Todo → Explore → In Progress → Review → QA → Learn → Done** 7단계 파이프라인을\n돌아 코드를 만들어 냅니다.\n\n[symphony-multi-agent]: https://github.com/cskwork/symphony-multi-agent\n\n## 디렉토리 구조\n\n```\nolive-clone/\n├── Oliveyoung Like Commerce Backend Design.pdf  ← 원본 PRD (단일 진리원)\n├── WORKFLOW.md                                  ← Symphony 오케스트레이터 설정\n├── README-symphony.md                           ← 이 파일\n├── kanban/                                      ← 35개 ticket (.md, YAML front matter)\n│   ├── OLV-001.md  Bootstrap Spring Boot 프로젝트\n│   ├── OLV-002.md  Postgres + Flyway\n│   └── …\n├── docs/                                        ← Symphony가 ticket별 산출물 저장\n└── llm-wiki/                                    ← Explore 단계 부트 자료 (시드됨)\n    ├── INDEX.md\n    └── 00-architecture-overview.md … 99-failure-handling.md\n```\n\n## 사전 준비\n\n```bash\n# 1. symphony 설치 (이미 /opt/anaconda3/bin/symphony 에 설치됨)\nwhich symphony\n\n# 2. claude code CLI (현재 사용 중)\nwhich claude\n\n# 3. (선택) docker — OLV-002 부터 컨테이너가 필요\ndocker --version\n```\n\n## 실행\n\n```bash\ncd /Users/danny/Documents/PARA/Resource/olive-clone\n\n# 0. 사전 점검 (포트 충돌, CLI 존재, WORKFLOW.md 파싱)\nsymphony doctor\n\n# 1. 오케스트레이터 + TUI 켜기\nsymphony --tui WORKFLOW.md\n#   - Jira 스타일 칸반 보드가 뜹니다.\n#   - OLV-001 이 Todo 컬럼에 보이고, blocked_by 가 비어 있어 즉시 Explore 로\n#     이동 → In Progress → ... 순서로 자동으로 깨어납니다.\n#   - 다른 ticket 들은 blocker 가 Done 될 때까지 Todo 에 머무릅니다.\n\n# 2. (선택) HTTP API 만 띄우고 백그라운드 실행\nsymphony --port 9991 WORKFLOW.md\n# 이후 보드 상태 조회: curl http://localhost:9991/api/v1/state\n```\n\n## 의존성 그래프 (한눈에)\n\n```\nOLV-001 (bootstrap)\n  └── OLV-002 (postgres + flyway)\n        ├── OLV-010 (member schema) ──── OLV-011 (auth) ── OLV-012 (mypage)\n        └── OLV-020 (product schema) ─── OLV-021 (brand/cat) ── OLV-022 (product CRUD) ── OLV-023 (public product)\n              └── OLV-030 (inventory schema) ── OLV-031 (inventory svc)\n              └── OLV-050 (promotion schema) ── OLV-051 (coupon) + OLV-052 (point)\n              └── OLV-060 (order schema)\n                    └── OLV-061 (order create) ── OLV-062 cancel + OLV-063 list/admin\n                          └── OLV-070 (payment schema) ── OLV-071 (mock PG) ── OLV-072 (confirm)\n                                └── OLV-073 (webhook), OLV-074 (refund)\n                                └── OLV-080 (delivery)\n                                └── OLV-090 (review)\n                                └── OLV-110 (outbox + subscribers)\n                                      └── OLV-120 (batch jobs)\n  └── OLV-003 (redis/s3/opensearch) ── (used by OLV-031/040/100/...)\n  └── OLV-004 (common) ── OLV-005 (security) ── (used by every API ticket)\n                                                      └── OLV-100 (search index) ── OLV-101 (search api)\n                                                      └── OLV-130 (observability) + OLV-131 (health)\n                                                            └── OLV-140 (e2e) ── OLV-141 (load)\n```\n\n## 한 ticket 의 라이프사이클\n\n`kanban/OLV-XXX.md` 의 `state` 필드가 곧 칸반 컬럼입니다. Symphony 가 ticket을\n깨우면 Claude Code 가 ticket의 `## Description` 을 읽고:\n\n1. **Triage (Todo)**: 정보가 충분한지 확인 → Explore 로 옮김.\n2. **Explore**: `llm-wiki/` 와 PRD 를 읽고 `## Domain Brief` / `## Plan\n   Candidates` / `## Recommendation` 작성 → In Progress.\n3. **In Progress**: TDD 로 구현, `## Implementation` 추가 → Review.\n4. **Review**: 자기 diff 검토 + curl 검증 → `## Review` 표 작성 → QA.\n5. **QA**: 실제 테스트 / 실제 HTTP 호출 → `## QA Evidence` (실패 시 In\n   Progress 로 되돌림).\n6. **Learn**: `llm-wiki/` 에 새 사실 반영 → Done.\n7. **Done**: `## As-Is → To-Be Report` 로 마무리.\n\n각 단계 산출물은 `docs/OLV-XXX/\u003cstage\u003e/` 아래에 저장됩니다 — 워크스페이스가\n호스트로 심볼릭 링크되어 있어 실시간으로 이 디렉토리에 쌓입니다.\n\n## 자주 쓰는 운영 명령\n\n```bash\n# 보드 상태 빠르게 보기\nls kanban/ | xargs -I{} grep -H '^state:' kanban/{} | column -t -s: | sort -k2\n\n# 특정 ticket 만 다시 큐잉 (state 를 Todo 로 되돌리기)\nsed -i '' 's/^state:.*/state: Todo/' kanban/OLV-061.md\n\n# Symphony 워크스페이스 정리\nrm -rf ~/symphony_workspaces/OLV-*\n\n# 보드 산출물 점검\nls -la docs/OLV-001/\n```\n\n## 작동 원리 요약\n\n- **워크스페이스는 호스트의 심볼릭 링크**: `WORKFLOW.md` 의 `after_create`\n  훅이 호스트 디렉토리(`olive-clone/`)의 모든 항목을\n  `~/symphony_workspaces/\u003cID\u003e/` 안에 심볼릭 링크합니다. 따라서 Claude 가\n  `src/main/java/...` 에 파일을 만들면 **즉시 호스트 프로젝트에도 반영**됩니다.\n- **순차 실행**: `max_concurrent_agents: 1` — 동일 코드베이스를 두 ticket 이\n  동시에 만지지 못하도록 직렬화. (`run in sequence` 요구를 만족)\n- **자동 의존성 처리**: ticket의 `blocked_by` 에 명시된 모든 ticket 이\n  `Done` 이 되어야 해당 ticket 이 활성화됩니다. 따라서 그래프만 잘 짜면\n  순서가 보장됩니다.\n- **장애 복구**: QA 실패 → In Progress 로 자동 리윈드. Symphony 가\n  다음 폴 틱에 다시 깨우며, retry attempt 카운터가 prompt 에 주입되어\n  Claude 가 root cause 부터 다시 파악하도록 강제합니다.\n\n## 다음 단계 (Phase 3, 옵션)\n\nPRD §19.3 의 고도화 항목들은 별도 ticket 으로 추가하면 됩니다. 예시:\n\n```bash\n# 새 ticket 추가\ncat \u003e kanban/OLV-200.md \u003c\u003c'EOF'\n---\nid: OLV-200\ntitle: 개인화 추천 — 사용자 행동 기반 협업 필터링\nstate: Todo\nlabels: [recommendation, ml]\nblocked_by:\n  - identifier: OLV-110\n    state: Done\n---\n\n## Why\nPRD §19.3 의 \"개인화 추천\" 항목 …\nEOF\n```\n\nSymphony 가 다음 폴에서 자동으로 새 ticket 을 픽업합니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcskwork%2Folive-clone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcskwork%2Folive-clone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcskwork%2Folive-clone/lists"}