diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/.claude-plugin/plugin.json b/plugins/webcraft/dist/claude/plugins/webcraft/.claude-plugin/plugin.json index 71cfdc8..1af9695 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/.claude-plugin/plugin.json +++ b/plugins/webcraft/dist/claude/plugins/webcraft/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "webcraft", - "version": "0.8.0", + "version": "0.9.0", "description": "웹 플랫폼 개발 지침(프론트·디자인 시스템·백엔드·API·DB·아키텍처)과 프로젝트 연결", "author": { "name": "dev-goraebap" diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/package.json b/plugins/webcraft/dist/claude/plugins/webcraft/package.json index e72b43b..8c3f68b 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/package.json +++ b/plugins/webcraft/dist/claude/plugins/webcraft/package.json @@ -1,6 +1,6 @@ { "name": "webcraft", - "version": "0.8.0", + "version": "0.9.0", "private": true, "type": "module" } diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/api/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/api/SKILL.md index 29ab099..f1c3d90 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/api/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/api/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: api description: 웹 플랫폼의 HTTP 계약, 오류 응답, 인증·권한, 첨부와 OpenAPI 생성 타입을 맞춥니다. 엔드포인트·DTO·권한·업로드 계약을 만들거나 고칠 때 사용합니다. +arc42: "8.1" --- # API 계약 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/SKILL.md index 96bd5e8..aaf3f86 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: architecture description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 배포·복구 설계를 검토합니다. 여러 영역의 구조·새 기술·운영 방식을 바꿀 때 사용합니다. +arc42: "4, 7" --- # 아키텍처 @@ -13,6 +14,7 @@ description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 - 비밀값은 실행 환경의 비밀 저장 수단으로 관리합니다. 계정·접속 정보·업무 데이터는 공통 지침이나 시드에 넣지 않습니다. - 되돌리기 어려운 기술 선택은 맥락·결정·대안을 프로젝트 기록에 남깁니다. 제품 요구사항과 구현 상태를 구분합니다. - 운영 변경은 배포 순서·설정·데이터 이관·백업·복구·수동 작업을 검토 가능한 형태로 만듭니다. 인프라·호스트·태그·배포 권한은 프로젝트 정책입니다. +- 프로젝트의 아키텍처 정의서(arc42)를 쓸 때 Webcraft를 따르는 절은 지침 본문을 복사하지 않고, 각 지침의 `arc42` 값에 맞춰 지침 이름·플러그인 판·링크와 AGENTS.md 프로젝트 규칙 표의 예외만 적습니다. Webcraft 지침에 원천이 없는 절(1, 3 등)은 프로젝트의 요구사항·코드·운영 문서에서 채우고, 채울 원천이 없으면 비어 있다고 먼저 알립니다. 제품이 사용자에게 에이전트 플러그인을 제공하면 [제품 플러그인 관리](references/product-plugins.md)를 읽습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/references/product-plugins.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/references/product-plugins.md index 7db8abb..388bea1 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/references/product-plugins.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/architecture/references/product-plugins.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 제품 플러그인 관리 제품이 사용자에게 MCP 연결과 사용법을 제공할 때 적용합니다. 저장소 개발용 스킬과 사용자에게 배포할 스킬은 읽는 사람과 목적이 다르므로 원본을 나눕니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/SKILL.md index 39bf943..87d7a2b 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: backend description: Java·Spring Boot·jOOQ 기반 모듈형 모놀리스의 도메인, 서비스, 저장소와 조회 경계를 구현합니다. 서버 기능·유스케이스·모듈 구조를 만들거나 고칠 때 사용합니다. +arc42: "8.2, 5, 2" --- # 백엔드 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/code-style.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/code-style.md index 8a4bd61..bc06d96 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/code-style.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/code-style.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 코드 규칙 - 역할을 Controller·Service·Query·Repository·Requests·Views·ErrorCode 이름으로 드러냅니다. 피처별 Service가 읽기·쓰기를 함께 제공합니다. 저장소·조회 구현은 Jooq처럼 기술 이름을 붙이고 QueryRepository처럼 역할을 섞지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/contracts.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/contracts.md index 764a47d..462fc10 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/contracts.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/contracts.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1, 5" +--- + # 모듈 간 계약 모듈 루트에는 다른 모듈이 참조할 공개 계약과 공개 값 타입을 둡니다. 다른 모듈은 내부 application·domain·infrastructure 타입을 참조하지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/cross-module-read.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/cross-module-read.md index e2d730f..8d49514 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/cross-module-read.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/cross-module-read.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 모듈 간 조회 명령은 공개 계약으로 처리합니다. 조회는 표시값 조립과 결과 집합 결정의 요구를 구분합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/errors.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/errors.md index 1737dd4..c01b364 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/errors.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/errors.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 도메인 오류와 서비스 오류 오류를 판정하는 주체에 따라 책임을 나눕니다. 도메인은 업무 불변식과 의미 있는 상태 전이를 알고, application 서비스는 요청 주체·자원 부재·접근 권한·동시 변경을 판정합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/layers.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/layers.md index cc359c9..0bf301d 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/layers.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/layers.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2, 5, 6" +--- + # 계층과 명령 모듈은 단수 이름으로 두고 내부를 application·domain·infrastructure로 나눕니다. 모듈 루트의 Facade·Spi·Event가 공개 계약입니다. 다른 모듈의 내부 패키지를 직접 참조하거나 순환 호출하지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/queries.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/queries.md index 57ca89b..c5f3ea4 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/queries.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/queries.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 조회 포트 화면 조회 포트 `XxxQuery`는 그 조회를 소유한 서비스와 같은 피처의 application에 둡니다. 서비스와 조회 포트는 1:1로 구성합니다. 구현은 infrastructure의 package-private `JooqXxxQuery`에 둡니다. 도메인 저장소 구현과 합치지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/sharing.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/sharing.md index c1239a9..c7ef075 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/sharing.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/backend/references/sharing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 공유와 참조 application은 유스케이스·피처별로, domain은 애그리거트별로 나눕니다. 두 축은 독립적이며 서비스 하나가 여러 애그리거트를 조율할 수 있습니다. 처음에는 계층 루트에 두고 실제로 여러 단위가 생길 때 나눕니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/database/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/database/SKILL.md index 437dba6..2a95bdb 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/database/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/database/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: database description: Flyway와 jOOQ를 사용하는 프로젝트의 스키마 변경, 기존 데이터 이관, 생성 코드 동기화를 수행합니다. 테이블·열·마이그레이션·DB 이관을 다룰 때 사용합니다. +arc42: "8.3, 2, 7" --- # DB와 마이그레이션 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/SKILL.md index 24a5427..b9a7690 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: design-system description: Astryx 기반 웹 앱에서 테마·아이콘·부품 조합·앱 셸·페이지 배치·반응형과 화면 상호작용을 일관되게 구현합니다. 부품·스타일·테마·레이아웃·화면 패턴을 만들거나 바꿀 때 사용합니다. +arc42: "8.5, 2" --- # 디자인 시스템 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/notes.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/notes.md index c22fbfc..47bbeb7 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/notes.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/notes.md @@ -1,3 +1,7 @@ +--- +arc42: "9" +--- + # 지침 개선 기록 ## 2026-11-05 · 제작 맥락의 화면 노출 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/app-layout.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/app-layout.md index db94ee0..9775105 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/app-layout.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/app-layout.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 5" +--- + # 앱 셸과 모바일 탐색 앱 셸([AppFrame](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/app/AppFrame.tsx))은 Astryx AppShell과 SideNav 위에 메뉴·페이지·휴대폰 탐색을 조립합니다. 메뉴·테마·밀도는 페이지마다 새로 만들지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/astryx-workflow.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/astryx-workflow.md index 325c315..11feae2 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/astryx-workflow.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/astryx-workflow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Astryx 작업 절차 ## 구현 전 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/basic-components.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/basic-components.md index f62cd51..ad7a92d 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/basic-components.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/basic-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Primitives (기본 부품) 버튼·라벨·아바타·입력처럼 독립된 UI 역할을 가진 부품은 Astryx를 직접 import합니다. 이름만 바꾼 래퍼를 만들어 API를 복제하지 않습니다. 고래밥의 기준은 테마 변형·크기와 쓰임 구분이며, 부품의 모든 API는 공식 문서(`astryx component <이름>`)를 따릅니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/composed-components.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/composed-components.md index 249a89c..cd85c1c 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/composed-components.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/composed-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Composites (조합 부품) 여러 기본 부품을 묶어 반복해 쓰는 단위입니다. 조합은 값과 동작을 props로 받고 제품의 API·라우트·업무 정책을 직접 소유하지 않습니다. Playground 템플릿과 견본은 같은 조합을 import하며 그 안에 같은 UI를 다시 만들지 않습니다. FSD의 widgets와 같은 분류가 아닙니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/content-and-review.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/content-and-review.md index 35f8580..7f9910d 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/content-and-review.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/content-and-review.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 문구·본문과 검증 ## 화면 문구를 넣는 기준 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/creation-form.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/creation-form.md index 4c0bec5..9cad35b 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/creation-form.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/creation-form.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 생성 양식 제목과 본문이 있는 것을 만들고 고칠 때는 한 양식([ComposeForm·ComposeSurface](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/compose))을 대화상자·페이지·휴대폰에서 같이 씁니다. 몇 칸으로 끝나는 변경은 [짧은 양식](dialog.md)을 씁니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/data-states.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/data-states.md index f4f6b7b..f82adcc 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/data-states.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/data-states.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7, 6" +--- + # 데이터 상태 조회 결과가 없거나 늦거나 실패했을 때의 화면입니다. 상태마다 사용자가 할 수 있는 다음 행동이 다르므로 구분해서 보입니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/dialog.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/dialog.md index 9c65581..9fe2e7c 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/dialog.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/dialog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 공통 다이얼로그 모든 대화상자는 한 틀([AppDialog](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/composites/dialog/AppDialog.tsx))을 씁니다. 머리·스크롤 본문·선택적 바닥이며 긴 본문에서도 본문만 스크롤하고 제목·닫기·마지막 동작은 보입니다. 제품 화면은 Astryx Dialog를 직접 쓰지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/icons.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/icons.md index 35fbd12..b19865f 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/icons.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/icons.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 아이콘 아이콘은 명령·상태·대상을 구분하는 시각 언어입니다. 화면은 의미 이름(`search`, `back`, `layout-list`)으로 아이콘을 부르고, 의미 이름에서 Solar 아이콘으로 가는 매핑은 [생성 스크립트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/scripts/generate-icons.mjs) 한 곳에 둡니다. 사용하는 이름만 생성하며, 이름을 더하면 스크립트를 다시 실행합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/interaction-patterns.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/interaction-patterns.md index 9dd0162..6fd7b0c 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/interaction-patterns.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/interaction-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 입력과 상호작용 어떤 상호작용을 어느 표면에서 할지 정합니다. 개별 도구의 동작은 [검색·필터·표시](search-filter.md), 대화상자의 배치는 [공통 다이얼로그](dialog.md), 제목·본문 작성은 [생성 양식](creation-form.md)이 소유합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/layout-patterns.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/layout-patterns.md index 1e1c8cf..badbf60 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/layout-patterns.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/layout-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 페이지 배치 페이지([Page](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/page/Page.tsx))는 머리 줄·배너 자리·툴바·적용 줄·본문의 순서를 고정합니다. 머리와 툴바는 고정하고 본문만 스크롤합니다. 구현 전에 기존 Page와 같은 역할의 화면을 읽고 각 조작을 보기·조건·표시·주 동작으로 나눕니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/motion.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/motion.md index e7fb644..70244b8 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/motion.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/motion.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 모션 움직임은 위치가 바뀌었거나 새 내용이 도착했음을 알릴 때, 또는 절차 완료를 한 번 축하할 때만 씁니다. 장식으로 반복하는 움직임을 두지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/pattern-catalog.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/pattern-catalog.md index e812fdf..189b186 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/pattern-catalog.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/pattern-catalog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 패턴의 글·코드·실행 견본 화면을 만들기 전에 해당 패턴의 사용 기준, 구현 파일, 실행 견본을 함께 읽습니다. 글은 선택 기준과 지킬 조건, 코드는 배치와 동작, 견본은 상태와 화면 크기를 바꾸어 확인하는 데 씁니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/peek.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/peek.md index 08859f0..aac683e 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/peek.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/peek.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 미리보기 패널 목록을 그대로 둔 채 항목을 차례로 훑을 때 목록 옆에 여는 비모달 패널입니다. Linear는 Space 키로, Plane은 행 클릭으로 엽니다. 우리는 Plane과 달리 미리보기 대상을 주소에 남겨 뒤로가기·새로고침·공유가 같은 화면을 엽니다. 구현은 키트의 [peek](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/routing)와 [PeekLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxPane](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)이 맡습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/reference-kit.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/reference-kit.md index e43161d..4097798 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/reference-kit.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/reference-kit.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 기본 레퍼런스의 사용과 갱신 프로젝트 디자인·기존 부품·사용자가 준 참고 화면이 있으면 그것을 우선합니다. 지정이 없을 때 [workspace 키트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/README.md)를 출발점으로 씁니다. 키트는 선택해서 채택하는 설계와 코드의 스냅샷이며 제품 전체를 자동 생성하는 템플릿이 아닙니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/route-masking.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/route-masking.md index 9a45f07..4352737 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/route-masking.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/route-masking.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 6" +--- + # 라우트 마스킹 자기 주소가 있는 작성·수정 양식을 데스크톱 목록 위 대화상자로 엽니다. 목록은 그대로 두고 주소창에는 양식의 실제 주소를 보입니다. 상태·복귀와 직접 링크의 계약은 frontend의 [화면 전환](../../frontend/references/navigation.md)이 소유하고, 키트의 [routed-panel](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/patterns/routing/routed-panel.ts)이 구현합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/search-filter.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/search-filter.md index 9914d40..255d9f0 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/search-filter.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/search-filter.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 검색·필터·표시 목록의 도구는 세 가지 역할로 나눕니다. 검색은 글자로 좁히고, 필터는 속성 값으로 거르고, 표시는 같은 결과를 어떻게 보일지(보기 방식·정렬·그룹) 정합니다. 도구는 이 순서로 같은 좁은 간격에 두고 만들기는 넓은 간격 뒤에 둡니다. 뷰·탭 알약으로 도구를 만들지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/spacing.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/spacing.md index d47d526..3d9ff31 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/spacing.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/spacing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 간격과 크기 앱의 크기는 rem과 테마 토큰으로 씁니다. 1px 선과 그림자만 px로 둡니다. 그래야 루트 글자 크기를 키울 때 부품 높이·간격·모서리가 함께 커집니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/surfaces.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/surfaces.md index 13e1760..a5fdc07 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/surfaces.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/surfaces.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 면과 경계 화면은 네 단계의 면으로 쌓습니다. 안쪽에 놓이는 면은 바깥보다 한 단계 위입니다. 같은 단계의 면을 겹치면 경계가 사라지므로 카드 안에 같은 카드를 넣지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/theme.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/theme.md index ca991c6..906f5eb 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/theme.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/theme.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 테마와 색상 테마는 색·글자·간격·면·경계·모서리와 부품 변형의 기본값을 한 곳에서 정합니다. 프로젝트가 값을 정하지 않았으면 [기본 테마](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/foundations/theme.ts)에서 출발합니다. Stone 테마를 확장하며 Astryx 내부 클래스 덮어쓰기와 `!important`를 쓰지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/typography.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/typography.md index fafbd92..ae8d7cf 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/typography.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/design-system/references/typography.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 글자 조밀한 업무 화면의 글자는 네 크기로 위계를 만듭니다. 크기를 화면마다 새로 정하지 않고 테마의 `--text-*` 토큰을 씁니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/SKILL.md index 32170b7..33e871d 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/SKILL.md @@ -2,6 +2,7 @@ disable-model-invocation: true name: frontend description: React·TypeScript 웹 앱의 TanStack Router/Query 데이터 흐름, 폼 초안과 화면 전환을 구현합니다. 페이지·컴포넌트·프론트 상태를 만들거나 고칠 때 사용합니다. +arc42: "8.4, 2" --- # 프론트엔드 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/data-flow.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/data-flow.md index 29f8013..a379e02 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/data-flow.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/data-flow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4" +--- + # 상태와 데이터 흐름 | 상태 | 소유자 | diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/navigation.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/navigation.md index 34a170b..12c6952 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/navigation.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/navigation.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 6" +--- + # 화면 전환 첫 화면에 필요한 조회는 라우트 loader에서 준비하고 컴포넌트와 같은 queryOptions·캐시를 씁니다. 캐시가 있으면 오래됐어도 즉시 그리고 뒤에서 갱신하며(stale-while-revalidate), 캐시 신선도 조건으로 첫 그림을 거르지 않습니다. 앱 안 링크에 포인터나 초점이 오면 그 화면을 미리 준비합니다(intent prefetch). 화면마다 붙이지 않고 문서에 한 번 걸어 `pointerover`·`focusin`에서 앱 안 `a[href]`를 라우터의 preload로 준비하고, 같은 주소는 10초에 한 번만 부릅니다. 캐시가 없으면 다음 화면이 준비될 때까지 지금 화면을 유지하며, 가리는 막을 두지 않고 150ms가 지나면 콘텐츠 카드 위쪽 테두리에만 진행 표시를 띄웁니다. 누른 메뉴의 선택 표시는 응답 전에 옮기고, 캐시로 먼저 그린 본문이 서버 최신본과 다르면 읽는 글을 바로 바꾸지 않고 "최신 내용 보기" 안내만 띄웁니다. 메뉴·링크 진입, 뒤로 돌아오기, 검색 조건 변경을 구분해 로딩·스크롤·캐시 정책을 정합니다. 화면 표현은 디자인 시스템의 [데이터 상태](../../design-system/references/data-states.md)를 따릅니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/structure.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/structure.md index bbd86c0..cffc059 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/structure.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/frontend/references/structure.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 5" +--- + # 코드 작성 파일 배치와 레이어·슬라이스·공개 API는 공식 `feature-sliced-design` 스킬을 따릅니다. 이 워크플로우에서 FSD 규칙과 검사기를 별도로 유지하지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/SKILL.md index 46cf17e..759c5ef 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/SKILL.md @@ -1,6 +1,7 @@ --- name: goraebap-mode description: 웹 플랫폼의 기능 구현, 버그 수정, 구조 변경을 작업에 맞는 절차와 프론트·백엔드 지침으로 연결합니다. 프로젝트 AGENTS.md가 Webcraft 지침을 따른다고 밝혔을 때, 또는 사용자가 이 작업 방식을 이름으로 요청했을 때만 씁니다. 그 밖의 프로젝트에서는 쓰지 않습니다. +arc42: "none" --- # 웹 플랫폼 작업 방식 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md index 23430b7..74179d8 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 버그 수정 1. 기대·실제 동작, 재현 입력, 환경을 확보합니다. 가능한 경우 수정 전 실패를 직접 재현합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md index dfaeb41..56f3ac7 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 개선 1. 실제 실패나 사용자 피드백을 근거로 빠진 규칙·잘못된 도구·놓친 검증 중 원인을 찾습니다. 한 사례를 모든 프로젝트의 절대 규칙으로 만들지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md index 058d55d..509edf2 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 기능 구현 1. 누가 어떤 상황에서 무엇을 할 수 있어야 하는지와 수용 조건을 확인합니다. 기존 설계와 충돌하면 제품 선택을 먼저 해결합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md index 3194b8e..3d61a97 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 조사 1. 질문의 범위와 답을 확인할 근거를 정합니다. 코드, 테스트, 설계·결정 순으로 필요한 부분을 읽습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md index 84dffcf..f103a20 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 리팩터링 1. 유지할 동작과 바꿀 구조를 분리해 적습니다. 호출자와 외부 계약을 확인합니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/assets.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/assets.md index 94c57cd..bab2354 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/assets.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/assets.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 에셋 맡기기 에이전트는 로고, 아이콘 그림, 일러스트, 빈 상태 그림, 화면에 쓰는 이미지를 직접 만들지 않고 에셋 역할에 맡깁니다. 글은 [글쓰기 맡기기](writer.md)를 따르고, 이 문서는 그림과 이미지 자산을 누가 만들고 어떻게 맡기는지 정합니다. 화면 코드, 아이콘 라이브러리에 이미 있는 아이콘([아이콘 규칙](../../design-system/references/icons.md)), 외부에서 받아 쓰는 라이선스 자산은 맡기지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/handoff.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/handoff.md index 36f0890..71db87c 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/handoff.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/handoff.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 이어받기 문서 설치된 Webcraft 플러그인 판이 프로젝트 AGENTS.md의 최소 판보다 낮거나, 세션 중에 플러그인이 갱신돼 지침이 맞지 않거나, 필요한 지침을 읽을 수 없을 때는 추측으로 진행하지 않습니다. 지금까지의 작업 상태를 이어받기 문서로 남기고 플러그인 설치·갱신 방법과 새 세션에서 읽을 문서 경로를 사용자에게 알립니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/verification.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/verification.md index f68af3d..d2344ae 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/verification.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/verification.md @@ -1,3 +1,7 @@ +--- +arc42: "8.9" +--- + # 변경에 맞는 검증 프로젝트의 실제 스크립트와 CI를 확인해 명령을 선택합니다. 여기에는 특정 저장소의 경로·포트·검사 명령을 고정하지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writer.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writer.md index ad344eb..75d3172 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writer.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writer.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 글쓰기 맡기기 에이전트는 사람이 읽는 문서(가이드 해설, README, 사용 문서)와 스킬·참고 자료 본문을 직접 쓰지 않고 글쓰기 역할에 맡깁니다. 무엇을 어떤 문체로 쓸지는 [글쓰기 기준](writing.md)을 따르고, 이 문서는 누가 쓰고 어떻게 맡기는지 정합니다. 코드, 코드 주석, 커밋 메시지, 사용자에게 하는 대화 답변, 설정 파일은 맡기지 않고 에이전트가 직접 씁니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writing.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writing.md index 47cae97..9afc539 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writing.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/goraebap-mode/references/writing.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 스킬과 문서 쓰기 스킬은 에이전트가 판단하고 행동할 때 읽는 글입니다. 본문과 예시의 문체도 이후 작성에 영향을 줍니다. 글쓰기 규칙을 추가했으면 기존 본문도 그 기준으로 읽고 고칩니다. 이 기준으로 쓸 글을 맡기는 방법은 [글쓰기 맡기기](writer.md)를 따릅니다. @@ -33,3 +37,36 @@ 첫 문단만 읽어도 할 일을 알 수 있는지, 처음 읽는 사람이 조건과 예외를 따라 판단할 수 있는지 확인합니다. 소리 내어 읽으면 어색한 문장은 고칩니다. 필요한 계약·제약·실패 시 행동을 없애면서 길이만 줄이지 않습니다. 확인한 사실과 제안, 실제 수행한 검증과 미확인 범위를 구분합니다. 조사·제작·검수 기록은 작업 기록에 둡니다. 사용자에게 전달하는 문서에는 작업을 끝내는 데 필요한 내용을 씁니다. 화면 문구는 [문구와 검증](../../design-system/references/content-and-review.md)의 기준도 따릅니다. + +## 참고 문서의 구획 + +모든 지침 Markdown(`SKILL.md` 포함)은 프론트매터에 `arc42`를 둡니다. 값은 옮겨 갈 아키텍처 정의서 절 번호(`"8.6"`)로 적고, 여러 절에 걸치면 `"8.4, 6"`처럼 쉼표로 구분하며 첫 값을 주된 절로 삼습니다. 입구 스킬의 플레이북·맡기기 문서나 프로젝트 연결처럼 작업 방식·절차만 담은 문서는 `"none"`으로 둡니다. `npm run check`가 `arc42` 값과 꼬리 구획의 위치·순서를 검사하며, 사이트는 이 값으로 아키텍처 메뉴와 절 페이지 목록을 만듭니다. + +| 절 | 이름 | +| --- | --- | +| `1` | 소개와 목표 | +| `2` | 제약 | +| `3` | 맥락과 범위 | +| `4` | 해결 전략 | +| `5` | 구성 요소 | +| `6` | 실행 | +| `7` | 배치와 운영 | +| `8` | 횡단 관심사 | +| `8.1` | API와 모듈 계약 | +| `8.2` | 백엔드 코드 | +| `8.3` | 데이터와 마이그레이션 | +| `8.4` | 프론트 코드와 상태 | +| `8.5` | 화면 기초 | +| `8.6` | 화면 배치와 탐색 | +| `8.7` | 데이터 상태와 입력 | +| `8.8` | UI 부품 사용 | +| `8.9` | 검증 | +| `9` | 아키텍처 결정 | + +규칙 절에는 지금 지키는 규칙과 이유, 예시만 둡니다. 결정 날짜·이력(“~까지는 ~였다”)·실행 명령은 규칙 절에 쓰지 않습니다. + +필요할 때만 파일 맨 끝에 꼬리 구획을 다음 이름과 순서로 둡니다. 없는 구획은 만들지 않으며, 결정의 긴 경위는 그 스킬의 `notes.md`에 둡니다. + +1. `## 전환 중`: 아직 다 적용되지 않은 곳 +2. `## 작업 절차`: 명령·점검 순서 +3. `## 근거`: 결정 경위·기각한 대안 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/SKILL.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/SKILL.md index d721f3e..f0f7995 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/SKILL.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/SKILL.md @@ -1,6 +1,7 @@ --- name: manage-workflow description: 사용자가 Webcraft 연결·사본 전환·프로젝트 규칙 정리·지침 제안 처리를 요청했을 때만 씁니다. 일반 제품 구현에는 쓰지 않습니다. +arc42: "none" --- # 프로젝트와 지침 연결 diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md index 6690c21..28973de 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 사본에서 전환 예전 판의 플러그인은 프로젝트의 `.agents/skills`에 지침 사본(`<접두사>-mode`·`<접두사>-frontend` 등)을 설치하고 동기화 스크립트와 시작 훅을 두었습니다. 이 사본을 걷어내고 플러그인 지침을 직접 따르게 바꿉니다. 사본에서 고친 부분은 프로젝트 규칙으로 옮겨 잃지 않습니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/project-rules.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/project-rules.md index a411420..088bc93 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/project-rules.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/project-rules.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 프로젝트 규칙 프로젝트가 플러그인 지침과 다르게 하는 결정을 적는 자리입니다. 에이전트는 지침을 읽기 전에 이 규칙을 먼저 보고, 지침과 부딪히는 곳은 프로젝트 규칙을 따릅니다. diff --git a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/proposals.md b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/proposals.md index 3982a3f..21929b3 100644 --- a/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/proposals.md +++ b/plugins/webcraft/dist/claude/plugins/webcraft/skills/manage-workflow/references/proposals.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 제안 프로젝트 작업 중 요청이 기존 지침과 다를 때, 이 프로젝트만의 예외로 둘지 Webcraft 지침을 고칠지 정하고 Webcraft 원본 저장소(`dev-goraebap/dev.goraebap`)의 이슈로 받습니다. 제안자가 누구든 받아들일지는 플러그인 관리자가 정합니다. 프로젝트 세션에서 바로 PR을 올리는 안은 작업 중 다른 저장소 체크아웃·글쓰기 역할 위임·판 올리기가 끼어 무거워 쓰지 않고, 로컬 제안함은 다른 사용자의 제안을 받을 수 없어 쓰지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/.codex-plugin/plugin.json b/plugins/webcraft/dist/codex/plugins/webcraft/.codex-plugin/plugin.json index 903f00d..7ce73a2 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/.codex-plugin/plugin.json +++ b/plugins/webcraft/dist/codex/plugins/webcraft/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "webcraft", - "version": "0.8.0", + "version": "0.9.0", "description": "웹 플랫폼 개발 지침(프론트·디자인 시스템·백엔드·API·DB·아키텍처)과 프로젝트 연결", "author": { "name": "dev-goraebap" diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/package.json b/plugins/webcraft/dist/codex/plugins/webcraft/package.json index e72b43b..8c3f68b 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/package.json +++ b/plugins/webcraft/dist/codex/plugins/webcraft/package.json @@ -1,6 +1,6 @@ { "name": "webcraft", - "version": "0.8.0", + "version": "0.9.0", "private": true, "type": "module" } diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/api/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/api/SKILL.md index 9850efb..6dee246 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/api/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/api/SKILL.md @@ -1,6 +1,7 @@ --- name: api description: 웹 플랫폼의 HTTP 계약, 오류 응답, 인증·권한, 첨부와 OpenAPI 생성 타입을 맞춥니다. 엔드포인트·DTO·권한·업로드 계약을 만들거나 고칠 때 사용합니다. +arc42: "8.1" --- # API 계약 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/SKILL.md index a991efd..5eb2180 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/SKILL.md @@ -1,6 +1,7 @@ --- name: architecture description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 배포·복구 설계를 검토합니다. 여러 영역의 구조·새 기술·운영 방식을 바꿀 때 사용합니다. +arc42: "4, 7" --- # 아키텍처 @@ -12,6 +13,7 @@ description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 - 비밀값은 실행 환경의 비밀 저장 수단으로 관리합니다. 계정·접속 정보·업무 데이터는 공통 지침이나 시드에 넣지 않습니다. - 되돌리기 어려운 기술 선택은 맥락·결정·대안을 프로젝트 기록에 남깁니다. 제품 요구사항과 구현 상태를 구분합니다. - 운영 변경은 배포 순서·설정·데이터 이관·백업·복구·수동 작업을 검토 가능한 형태로 만듭니다. 인프라·호스트·태그·배포 권한은 프로젝트 정책입니다. +- 프로젝트의 아키텍처 정의서(arc42)를 쓸 때 Webcraft를 따르는 절은 지침 본문을 복사하지 않고, 각 지침의 `arc42` 값에 맞춰 지침 이름·플러그인 판·링크와 AGENTS.md 프로젝트 규칙 표의 예외만 적습니다. Webcraft 지침에 원천이 없는 절(1, 3 등)은 프로젝트의 요구사항·코드·운영 문서에서 채우고, 채울 원천이 없으면 비어 있다고 먼저 알립니다. 제품이 사용자에게 에이전트 플러그인을 제공하면 [제품 플러그인 관리](references/product-plugins.md)를 읽습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/references/product-plugins.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/references/product-plugins.md index 7db8abb..388bea1 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/references/product-plugins.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/architecture/references/product-plugins.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 제품 플러그인 관리 제품이 사용자에게 MCP 연결과 사용법을 제공할 때 적용합니다. 저장소 개발용 스킬과 사용자에게 배포할 스킬은 읽는 사람과 목적이 다르므로 원본을 나눕니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/SKILL.md index 391d554..d3a1396 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/SKILL.md @@ -1,6 +1,7 @@ --- name: backend description: Java·Spring Boot·jOOQ 기반 모듈형 모놀리스의 도메인, 서비스, 저장소와 조회 경계를 구현합니다. 서버 기능·유스케이스·모듈 구조를 만들거나 고칠 때 사용합니다. +arc42: "8.2, 5, 2" --- # 백엔드 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/code-style.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/code-style.md index 8a4bd61..bc06d96 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/code-style.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/code-style.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 코드 규칙 - 역할을 Controller·Service·Query·Repository·Requests·Views·ErrorCode 이름으로 드러냅니다. 피처별 Service가 읽기·쓰기를 함께 제공합니다. 저장소·조회 구현은 Jooq처럼 기술 이름을 붙이고 QueryRepository처럼 역할을 섞지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/contracts.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/contracts.md index 764a47d..462fc10 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/contracts.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/contracts.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1, 5" +--- + # 모듈 간 계약 모듈 루트에는 다른 모듈이 참조할 공개 계약과 공개 값 타입을 둡니다. 다른 모듈은 내부 application·domain·infrastructure 타입을 참조하지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/cross-module-read.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/cross-module-read.md index e2d730f..8d49514 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/cross-module-read.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/cross-module-read.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 모듈 간 조회 명령은 공개 계약으로 처리합니다. 조회는 표시값 조립과 결과 집합 결정의 요구를 구분합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/errors.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/errors.md index 1737dd4..c01b364 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/errors.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/errors.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 도메인 오류와 서비스 오류 오류를 판정하는 주체에 따라 책임을 나눕니다. 도메인은 업무 불변식과 의미 있는 상태 전이를 알고, application 서비스는 요청 주체·자원 부재·접근 권한·동시 변경을 판정합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/layers.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/layers.md index cc359c9..0bf301d 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/layers.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/layers.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2, 5, 6" +--- + # 계층과 명령 모듈은 단수 이름으로 두고 내부를 application·domain·infrastructure로 나눕니다. 모듈 루트의 Facade·Spi·Event가 공개 계약입니다. 다른 모듈의 내부 패키지를 직접 참조하거나 순환 호출하지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/queries.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/queries.md index 57ca89b..c5f3ea4 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/queries.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/queries.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 조회 포트 화면 조회 포트 `XxxQuery`는 그 조회를 소유한 서비스와 같은 피처의 application에 둡니다. 서비스와 조회 포트는 1:1로 구성합니다. 구현은 infrastructure의 package-private `JooqXxxQuery`에 둡니다. 도메인 저장소 구현과 합치지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/sharing.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/sharing.md index c1239a9..c7ef075 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/sharing.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/backend/references/sharing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 공유와 참조 application은 유스케이스·피처별로, domain은 애그리거트별로 나눕니다. 두 축은 독립적이며 서비스 하나가 여러 애그리거트를 조율할 수 있습니다. 처음에는 계층 루트에 두고 실제로 여러 단위가 생길 때 나눕니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/database/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/database/SKILL.md index 2683a13..9829474 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/database/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/database/SKILL.md @@ -1,6 +1,7 @@ --- name: database description: Flyway와 jOOQ를 사용하는 프로젝트의 스키마 변경, 기존 데이터 이관, 생성 코드 동기화를 수행합니다. 테이블·열·마이그레이션·DB 이관을 다룰 때 사용합니다. +arc42: "8.3, 2, 7" --- # DB와 마이그레이션 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/SKILL.md index 4019e18..e60ca68 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/SKILL.md @@ -1,6 +1,7 @@ --- name: design-system description: Astryx 기반 웹 앱에서 테마·아이콘·부품 조합·앱 셸·페이지 배치·반응형과 화면 상호작용을 일관되게 구현합니다. 부품·스타일·테마·레이아웃·화면 패턴을 만들거나 바꿀 때 사용합니다. +arc42: "8.5, 2" --- # 디자인 시스템 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/notes.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/notes.md index c22fbfc..47bbeb7 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/notes.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/notes.md @@ -1,3 +1,7 @@ +--- +arc42: "9" +--- + # 지침 개선 기록 ## 2026-11-05 · 제작 맥락의 화면 노출 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/app-layout.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/app-layout.md index db94ee0..9775105 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/app-layout.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/app-layout.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 5" +--- + # 앱 셸과 모바일 탐색 앱 셸([AppFrame](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/app/AppFrame.tsx))은 Astryx AppShell과 SideNav 위에 메뉴·페이지·휴대폰 탐색을 조립합니다. 메뉴·테마·밀도는 페이지마다 새로 만들지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/astryx-workflow.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/astryx-workflow.md index 325c315..11feae2 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/astryx-workflow.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/astryx-workflow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Astryx 작업 절차 ## 구현 전 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/basic-components.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/basic-components.md index f62cd51..ad7a92d 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/basic-components.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/basic-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Primitives (기본 부품) 버튼·라벨·아바타·입력처럼 독립된 UI 역할을 가진 부품은 Astryx를 직접 import합니다. 이름만 바꾼 래퍼를 만들어 API를 복제하지 않습니다. 고래밥의 기준은 테마 변형·크기와 쓰임 구분이며, 부품의 모든 API는 공식 문서(`astryx component <이름>`)를 따릅니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/composed-components.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/composed-components.md index 249a89c..cd85c1c 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/composed-components.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/composed-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Composites (조합 부품) 여러 기본 부품을 묶어 반복해 쓰는 단위입니다. 조합은 값과 동작을 props로 받고 제품의 API·라우트·업무 정책을 직접 소유하지 않습니다. Playground 템플릿과 견본은 같은 조합을 import하며 그 안에 같은 UI를 다시 만들지 않습니다. FSD의 widgets와 같은 분류가 아닙니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/content-and-review.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/content-and-review.md index 35f8580..7f9910d 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/content-and-review.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/content-and-review.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 문구·본문과 검증 ## 화면 문구를 넣는 기준 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/creation-form.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/creation-form.md index 4c0bec5..9cad35b 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/creation-form.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/creation-form.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 생성 양식 제목과 본문이 있는 것을 만들고 고칠 때는 한 양식([ComposeForm·ComposeSurface](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/compose))을 대화상자·페이지·휴대폰에서 같이 씁니다. 몇 칸으로 끝나는 변경은 [짧은 양식](dialog.md)을 씁니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/data-states.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/data-states.md index f4f6b7b..f82adcc 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/data-states.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/data-states.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7, 6" +--- + # 데이터 상태 조회 결과가 없거나 늦거나 실패했을 때의 화면입니다. 상태마다 사용자가 할 수 있는 다음 행동이 다르므로 구분해서 보입니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/dialog.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/dialog.md index 9c65581..9fe2e7c 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/dialog.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/dialog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 공통 다이얼로그 모든 대화상자는 한 틀([AppDialog](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/composites/dialog/AppDialog.tsx))을 씁니다. 머리·스크롤 본문·선택적 바닥이며 긴 본문에서도 본문만 스크롤하고 제목·닫기·마지막 동작은 보입니다. 제품 화면은 Astryx Dialog를 직접 쓰지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/icons.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/icons.md index 35fbd12..b19865f 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/icons.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/icons.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 아이콘 아이콘은 명령·상태·대상을 구분하는 시각 언어입니다. 화면은 의미 이름(`search`, `back`, `layout-list`)으로 아이콘을 부르고, 의미 이름에서 Solar 아이콘으로 가는 매핑은 [생성 스크립트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/scripts/generate-icons.mjs) 한 곳에 둡니다. 사용하는 이름만 생성하며, 이름을 더하면 스크립트를 다시 실행합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/interaction-patterns.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/interaction-patterns.md index 9dd0162..6fd7b0c 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/interaction-patterns.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/interaction-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 입력과 상호작용 어떤 상호작용을 어느 표면에서 할지 정합니다. 개별 도구의 동작은 [검색·필터·표시](search-filter.md), 대화상자의 배치는 [공통 다이얼로그](dialog.md), 제목·본문 작성은 [생성 양식](creation-form.md)이 소유합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/layout-patterns.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/layout-patterns.md index 1e1c8cf..badbf60 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/layout-patterns.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/layout-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 페이지 배치 페이지([Page](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/page/Page.tsx))는 머리 줄·배너 자리·툴바·적용 줄·본문의 순서를 고정합니다. 머리와 툴바는 고정하고 본문만 스크롤합니다. 구현 전에 기존 Page와 같은 역할의 화면을 읽고 각 조작을 보기·조건·표시·주 동작으로 나눕니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/motion.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/motion.md index e7fb644..70244b8 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/motion.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/motion.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 모션 움직임은 위치가 바뀌었거나 새 내용이 도착했음을 알릴 때, 또는 절차 완료를 한 번 축하할 때만 씁니다. 장식으로 반복하는 움직임을 두지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/pattern-catalog.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/pattern-catalog.md index e812fdf..189b186 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/pattern-catalog.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/pattern-catalog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 패턴의 글·코드·실행 견본 화면을 만들기 전에 해당 패턴의 사용 기준, 구현 파일, 실행 견본을 함께 읽습니다. 글은 선택 기준과 지킬 조건, 코드는 배치와 동작, 견본은 상태와 화면 크기를 바꾸어 확인하는 데 씁니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/peek.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/peek.md index 08859f0..aac683e 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/peek.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/peek.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 미리보기 패널 목록을 그대로 둔 채 항목을 차례로 훑을 때 목록 옆에 여는 비모달 패널입니다. Linear는 Space 키로, Plane은 행 클릭으로 엽니다. 우리는 Plane과 달리 미리보기 대상을 주소에 남겨 뒤로가기·새로고침·공유가 같은 화면을 엽니다. 구현은 키트의 [peek](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/routing)와 [PeekLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxPane](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)이 맡습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/reference-kit.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/reference-kit.md index e43161d..4097798 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/reference-kit.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/reference-kit.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 기본 레퍼런스의 사용과 갱신 프로젝트 디자인·기존 부품·사용자가 준 참고 화면이 있으면 그것을 우선합니다. 지정이 없을 때 [workspace 키트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/README.md)를 출발점으로 씁니다. 키트는 선택해서 채택하는 설계와 코드의 스냅샷이며 제품 전체를 자동 생성하는 템플릿이 아닙니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/route-masking.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/route-masking.md index 9a45f07..4352737 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/route-masking.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/route-masking.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 6" +--- + # 라우트 마스킹 자기 주소가 있는 작성·수정 양식을 데스크톱 목록 위 대화상자로 엽니다. 목록은 그대로 두고 주소창에는 양식의 실제 주소를 보입니다. 상태·복귀와 직접 링크의 계약은 frontend의 [화면 전환](../../frontend/references/navigation.md)이 소유하고, 키트의 [routed-panel](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/patterns/routing/routed-panel.ts)이 구현합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/search-filter.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/search-filter.md index 9914d40..255d9f0 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/search-filter.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/search-filter.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 검색·필터·표시 목록의 도구는 세 가지 역할로 나눕니다. 검색은 글자로 좁히고, 필터는 속성 값으로 거르고, 표시는 같은 결과를 어떻게 보일지(보기 방식·정렬·그룹) 정합니다. 도구는 이 순서로 같은 좁은 간격에 두고 만들기는 넓은 간격 뒤에 둡니다. 뷰·탭 알약으로 도구를 만들지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/spacing.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/spacing.md index d47d526..3d9ff31 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/spacing.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/spacing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 간격과 크기 앱의 크기는 rem과 테마 토큰으로 씁니다. 1px 선과 그림자만 px로 둡니다. 그래야 루트 글자 크기를 키울 때 부품 높이·간격·모서리가 함께 커집니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/surfaces.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/surfaces.md index 13e1760..a5fdc07 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/surfaces.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/surfaces.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 면과 경계 화면은 네 단계의 면으로 쌓습니다. 안쪽에 놓이는 면은 바깥보다 한 단계 위입니다. 같은 단계의 면을 겹치면 경계가 사라지므로 카드 안에 같은 카드를 넣지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/theme.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/theme.md index ca991c6..906f5eb 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/theme.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/theme.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 테마와 색상 테마는 색·글자·간격·면·경계·모서리와 부품 변형의 기본값을 한 곳에서 정합니다. 프로젝트가 값을 정하지 않았으면 [기본 테마](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/foundations/theme.ts)에서 출발합니다. Stone 테마를 확장하며 Astryx 내부 클래스 덮어쓰기와 `!important`를 쓰지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/typography.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/typography.md index fafbd92..ae8d7cf 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/typography.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/design-system/references/typography.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 글자 조밀한 업무 화면의 글자는 네 크기로 위계를 만듭니다. 크기를 화면마다 새로 정하지 않고 테마의 `--text-*` 토큰을 씁니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/SKILL.md index cc633f5..4a4f331 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/SKILL.md @@ -1,6 +1,7 @@ --- name: frontend description: React·TypeScript 웹 앱의 TanStack Router/Query 데이터 흐름, 폼 초안과 화면 전환을 구현합니다. 페이지·컴포넌트·프론트 상태를 만들거나 고칠 때 사용합니다. +arc42: "8.4, 2" --- # 프론트엔드 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/data-flow.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/data-flow.md index 29f8013..a379e02 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/data-flow.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/data-flow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4" +--- + # 상태와 데이터 흐름 | 상태 | 소유자 | diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/navigation.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/navigation.md index 34a170b..12c6952 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/navigation.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/navigation.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 6" +--- + # 화면 전환 첫 화면에 필요한 조회는 라우트 loader에서 준비하고 컴포넌트와 같은 queryOptions·캐시를 씁니다. 캐시가 있으면 오래됐어도 즉시 그리고 뒤에서 갱신하며(stale-while-revalidate), 캐시 신선도 조건으로 첫 그림을 거르지 않습니다. 앱 안 링크에 포인터나 초점이 오면 그 화면을 미리 준비합니다(intent prefetch). 화면마다 붙이지 않고 문서에 한 번 걸어 `pointerover`·`focusin`에서 앱 안 `a[href]`를 라우터의 preload로 준비하고, 같은 주소는 10초에 한 번만 부릅니다. 캐시가 없으면 다음 화면이 준비될 때까지 지금 화면을 유지하며, 가리는 막을 두지 않고 150ms가 지나면 콘텐츠 카드 위쪽 테두리에만 진행 표시를 띄웁니다. 누른 메뉴의 선택 표시는 응답 전에 옮기고, 캐시로 먼저 그린 본문이 서버 최신본과 다르면 읽는 글을 바로 바꾸지 않고 "최신 내용 보기" 안내만 띄웁니다. 메뉴·링크 진입, 뒤로 돌아오기, 검색 조건 변경을 구분해 로딩·스크롤·캐시 정책을 정합니다. 화면 표현은 디자인 시스템의 [데이터 상태](../../design-system/references/data-states.md)를 따릅니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/structure.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/structure.md index bbd86c0..cffc059 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/structure.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/frontend/references/structure.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 5" +--- + # 코드 작성 파일 배치와 레이어·슬라이스·공개 API는 공식 `feature-sliced-design` 스킬을 따릅니다. 이 워크플로우에서 FSD 규칙과 검사기를 별도로 유지하지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/SKILL.md index 46cf17e..759c5ef 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/SKILL.md @@ -1,6 +1,7 @@ --- name: goraebap-mode description: 웹 플랫폼의 기능 구현, 버그 수정, 구조 변경을 작업에 맞는 절차와 프론트·백엔드 지침으로 연결합니다. 프로젝트 AGENTS.md가 Webcraft 지침을 따른다고 밝혔을 때, 또는 사용자가 이 작업 방식을 이름으로 요청했을 때만 씁니다. 그 밖의 프로젝트에서는 쓰지 않습니다. +arc42: "none" --- # 웹 플랫폼 작업 방식 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md index 23430b7..74179d8 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 버그 수정 1. 기대·실제 동작, 재현 입력, 환경을 확보합니다. 가능한 경우 수정 전 실패를 직접 재현합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md index dfaeb41..56f3ac7 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 개선 1. 실제 실패나 사용자 피드백을 근거로 빠진 규칙·잘못된 도구·놓친 검증 중 원인을 찾습니다. 한 사례를 모든 프로젝트의 절대 규칙으로 만들지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md index 058d55d..509edf2 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 기능 구현 1. 누가 어떤 상황에서 무엇을 할 수 있어야 하는지와 수용 조건을 확인합니다. 기존 설계와 충돌하면 제품 선택을 먼저 해결합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md index 3194b8e..3d61a97 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 조사 1. 질문의 범위와 답을 확인할 근거를 정합니다. 코드, 테스트, 설계·결정 순으로 필요한 부분을 읽습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md index 84dffcf..f103a20 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 리팩터링 1. 유지할 동작과 바꿀 구조를 분리해 적습니다. 호출자와 외부 계약을 확인합니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/assets.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/assets.md index 94c57cd..bab2354 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/assets.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/assets.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 에셋 맡기기 에이전트는 로고, 아이콘 그림, 일러스트, 빈 상태 그림, 화면에 쓰는 이미지를 직접 만들지 않고 에셋 역할에 맡깁니다. 글은 [글쓰기 맡기기](writer.md)를 따르고, 이 문서는 그림과 이미지 자산을 누가 만들고 어떻게 맡기는지 정합니다. 화면 코드, 아이콘 라이브러리에 이미 있는 아이콘([아이콘 규칙](../../design-system/references/icons.md)), 외부에서 받아 쓰는 라이선스 자산은 맡기지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/handoff.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/handoff.md index 36f0890..71db87c 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/handoff.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/handoff.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 이어받기 문서 설치된 Webcraft 플러그인 판이 프로젝트 AGENTS.md의 최소 판보다 낮거나, 세션 중에 플러그인이 갱신돼 지침이 맞지 않거나, 필요한 지침을 읽을 수 없을 때는 추측으로 진행하지 않습니다. 지금까지의 작업 상태를 이어받기 문서로 남기고 플러그인 설치·갱신 방법과 새 세션에서 읽을 문서 경로를 사용자에게 알립니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/verification.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/verification.md index f68af3d..d2344ae 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/verification.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/verification.md @@ -1,3 +1,7 @@ +--- +arc42: "8.9" +--- + # 변경에 맞는 검증 프로젝트의 실제 스크립트와 CI를 확인해 명령을 선택합니다. 여기에는 특정 저장소의 경로·포트·검사 명령을 고정하지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writer.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writer.md index ad344eb..75d3172 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writer.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writer.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 글쓰기 맡기기 에이전트는 사람이 읽는 문서(가이드 해설, README, 사용 문서)와 스킬·참고 자료 본문을 직접 쓰지 않고 글쓰기 역할에 맡깁니다. 무엇을 어떤 문체로 쓸지는 [글쓰기 기준](writing.md)을 따르고, 이 문서는 누가 쓰고 어떻게 맡기는지 정합니다. 코드, 코드 주석, 커밋 메시지, 사용자에게 하는 대화 답변, 설정 파일은 맡기지 않고 에이전트가 직접 씁니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writing.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writing.md index 47cae97..9afc539 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writing.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/goraebap-mode/references/writing.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 스킬과 문서 쓰기 스킬은 에이전트가 판단하고 행동할 때 읽는 글입니다. 본문과 예시의 문체도 이후 작성에 영향을 줍니다. 글쓰기 규칙을 추가했으면 기존 본문도 그 기준으로 읽고 고칩니다. 이 기준으로 쓸 글을 맡기는 방법은 [글쓰기 맡기기](writer.md)를 따릅니다. @@ -33,3 +37,36 @@ 첫 문단만 읽어도 할 일을 알 수 있는지, 처음 읽는 사람이 조건과 예외를 따라 판단할 수 있는지 확인합니다. 소리 내어 읽으면 어색한 문장은 고칩니다. 필요한 계약·제약·실패 시 행동을 없애면서 길이만 줄이지 않습니다. 확인한 사실과 제안, 실제 수행한 검증과 미확인 범위를 구분합니다. 조사·제작·검수 기록은 작업 기록에 둡니다. 사용자에게 전달하는 문서에는 작업을 끝내는 데 필요한 내용을 씁니다. 화면 문구는 [문구와 검증](../../design-system/references/content-and-review.md)의 기준도 따릅니다. + +## 참고 문서의 구획 + +모든 지침 Markdown(`SKILL.md` 포함)은 프론트매터에 `arc42`를 둡니다. 값은 옮겨 갈 아키텍처 정의서 절 번호(`"8.6"`)로 적고, 여러 절에 걸치면 `"8.4, 6"`처럼 쉼표로 구분하며 첫 값을 주된 절로 삼습니다. 입구 스킬의 플레이북·맡기기 문서나 프로젝트 연결처럼 작업 방식·절차만 담은 문서는 `"none"`으로 둡니다. `npm run check`가 `arc42` 값과 꼬리 구획의 위치·순서를 검사하며, 사이트는 이 값으로 아키텍처 메뉴와 절 페이지 목록을 만듭니다. + +| 절 | 이름 | +| --- | --- | +| `1` | 소개와 목표 | +| `2` | 제약 | +| `3` | 맥락과 범위 | +| `4` | 해결 전략 | +| `5` | 구성 요소 | +| `6` | 실행 | +| `7` | 배치와 운영 | +| `8` | 횡단 관심사 | +| `8.1` | API와 모듈 계약 | +| `8.2` | 백엔드 코드 | +| `8.3` | 데이터와 마이그레이션 | +| `8.4` | 프론트 코드와 상태 | +| `8.5` | 화면 기초 | +| `8.6` | 화면 배치와 탐색 | +| `8.7` | 데이터 상태와 입력 | +| `8.8` | UI 부품 사용 | +| `8.9` | 검증 | +| `9` | 아키텍처 결정 | + +규칙 절에는 지금 지키는 규칙과 이유, 예시만 둡니다. 결정 날짜·이력(“~까지는 ~였다”)·실행 명령은 규칙 절에 쓰지 않습니다. + +필요할 때만 파일 맨 끝에 꼬리 구획을 다음 이름과 순서로 둡니다. 없는 구획은 만들지 않으며, 결정의 긴 경위는 그 스킬의 `notes.md`에 둡니다. + +1. `## 전환 중`: 아직 다 적용되지 않은 곳 +2. `## 작업 절차`: 명령·점검 순서 +3. `## 근거`: 결정 경위·기각한 대안 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/SKILL.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/SKILL.md index d721f3e..f0f7995 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/SKILL.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/SKILL.md @@ -1,6 +1,7 @@ --- name: manage-workflow description: 사용자가 Webcraft 연결·사본 전환·프로젝트 규칙 정리·지침 제안 처리를 요청했을 때만 씁니다. 일반 제품 구현에는 쓰지 않습니다. +arc42: "none" --- # 프로젝트와 지침 연결 diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md index 6690c21..28973de 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 사본에서 전환 예전 판의 플러그인은 프로젝트의 `.agents/skills`에 지침 사본(`<접두사>-mode`·`<접두사>-frontend` 등)을 설치하고 동기화 스크립트와 시작 훅을 두었습니다. 이 사본을 걷어내고 플러그인 지침을 직접 따르게 바꿉니다. 사본에서 고친 부분은 프로젝트 규칙으로 옮겨 잃지 않습니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/project-rules.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/project-rules.md index a411420..088bc93 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/project-rules.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/project-rules.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 프로젝트 규칙 프로젝트가 플러그인 지침과 다르게 하는 결정을 적는 자리입니다. 에이전트는 지침을 읽기 전에 이 규칙을 먼저 보고, 지침과 부딪히는 곳은 프로젝트 규칙을 따릅니다. diff --git a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/proposals.md b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/proposals.md index 3982a3f..21929b3 100644 --- a/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/proposals.md +++ b/plugins/webcraft/dist/codex/plugins/webcraft/skills/manage-workflow/references/proposals.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 제안 프로젝트 작업 중 요청이 기존 지침과 다를 때, 이 프로젝트만의 예외로 둘지 Webcraft 지침을 고칠지 정하고 Webcraft 원본 저장소(`dev-goraebap/dev.goraebap`)의 이슈로 받습니다. 제안자가 누구든 받아들일지는 플러그인 관리자가 정합니다. 프로젝트 세션에서 바로 PR을 올리는 안은 작업 중 다른 저장소 체크아웃·글쓰기 역할 위임·판 올리기가 끼어 무거워 쓰지 않고, 로컬 제안함은 다른 사용자의 제안을 받을 수 없어 쓰지 않습니다. diff --git a/plugins/webcraft/package.json b/plugins/webcraft/package.json index 8fd1dc0..67034ad 100644 --- a/plugins/webcraft/package.json +++ b/plugins/webcraft/package.json @@ -1,6 +1,6 @@ { "name": "webcraft", - "version": "0.8.0", + "version": "0.9.0", "private": true, "type": "module", "engines": { diff --git a/plugins/webcraft/scripts/check.mjs b/plugins/webcraft/scripts/check.mjs index 7e065c7..1708298 100644 --- a/plugins/webcraft/scripts/check.mjs +++ b/plugins/webcraft/scripts/check.mjs @@ -6,6 +6,23 @@ import { fileURLToPath } from 'node:url'; const root = fileURLToPath(new URL('../', import.meta.url)); let skills = 0; let links = 0; +let sections = 0; +// 아키텍처 정의서(arc42)의 절: 1~9와 8절의 하위 절. 사이트의 아키텍처 메뉴(site/content-plugin.ts)와 같다. +const ARC42 = /^([1-79]|8\.[1-9])$/; +// 꼬리 구획은 이 이름과 순서로 파일 맨 끝에만 둔다(글쓰기 기준의 「참고 문서의 구획」). +const TAILS = ['전환 중', '작업 절차', '근거']; +function checkSections(file, content) { + const front = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content)?.[1] ?? ''; + const value = /^arc42: "([^"]+)"\r?$/m.exec(front)?.[1]; + assert(value, `arc42 프론트매터가 없습니다: ${file}`); + if (value !== 'none') for (const part of value.split(',').map(item => item.trim())) + assert(ARC42.test(part), `arc42 값은 1~9 또는 8.1~8.9, 해당 없으면 none입니다: ${file} (${part})`); + const headings = [...content.matchAll(/^## (.+)$/gm)].map(match => match[1].trim()); + const tails = headings.filter(heading => TAILS.includes(heading)); + assert.deepEqual(headings.slice(headings.length - tails.length), tails, `꼬리 구획은 파일 맨 끝에만 둡니다: ${file}`); + assert.deepEqual(tails, TAILS.filter(tail => tails.includes(tail)), `꼬리 구획 순서는 ${TAILS.join(' → ')}입니다: ${file}`); + sections++; +} async function check(directory) { for (const entry of await fs.readdir(directory, { withFileTypes: true })) { const file = path.join(directory, entry.name); @@ -13,8 +30,9 @@ async function check(directory) { if (entry.isDirectory()) { await check(file); continue; } if (!file.endsWith('.md')) continue; const content = await fs.readFile(file, 'utf8'); + checkSections(file, content); if (entry.name === 'SKILL.md') { - const frontmatter = /^---\r?\nname: ([a-z0-9]+(?:-[a-z0-9]+)*)\r?\ndescription: ([^\r\n]+)\r?\n---/.exec(content); + const frontmatter = /^---\r?\nname: ([a-z0-9]+(?:-[a-z0-9]+)*)\r?\ndescription: ([^\r\n]+)\r?\n(?:arc42: "[^"]+"\r?\n)?---/.exec(content); assert(frontmatter, `스킬 frontmatter가 잘못됐습니다: ${file}`); assert.equal(frontmatter[1], path.basename(directory)); assert(frontmatter[1].length <= 64); @@ -32,4 +50,4 @@ async function check(directory) { } } await check(path.join(root, 'skills')); -process.stdout.write(`${skills}개 스킬, ${links}개 로컬 링크 확인\n`); +process.stdout.write(`${skills}개 스킬, ${links}개 로컬 링크, ${sections}개 문서의 arc42·구획 확인\n`); diff --git a/plugins/webcraft/skills/api/SKILL.md b/plugins/webcraft/skills/api/SKILL.md index 9850efb..6dee246 100644 --- a/plugins/webcraft/skills/api/SKILL.md +++ b/plugins/webcraft/skills/api/SKILL.md @@ -1,6 +1,7 @@ --- name: api description: 웹 플랫폼의 HTTP 계약, 오류 응답, 인증·권한, 첨부와 OpenAPI 생성 타입을 맞춥니다. 엔드포인트·DTO·권한·업로드 계약을 만들거나 고칠 때 사용합니다. +arc42: "8.1" --- # API 계약 diff --git a/plugins/webcraft/skills/architecture/SKILL.md b/plugins/webcraft/skills/architecture/SKILL.md index a991efd..5eb2180 100644 --- a/plugins/webcraft/skills/architecture/SKILL.md +++ b/plugins/webcraft/skills/architecture/SKILL.md @@ -1,6 +1,7 @@ --- name: architecture description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 배포·복구 설계를 검토합니다. 여러 영역의 구조·새 기술·운영 방식을 바꿀 때 사용합니다. +arc42: "4, 7" --- # 아키텍처 @@ -12,6 +13,7 @@ description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 - 비밀값은 실행 환경의 비밀 저장 수단으로 관리합니다. 계정·접속 정보·업무 데이터는 공통 지침이나 시드에 넣지 않습니다. - 되돌리기 어려운 기술 선택은 맥락·결정·대안을 프로젝트 기록에 남깁니다. 제품 요구사항과 구현 상태를 구분합니다. - 운영 변경은 배포 순서·설정·데이터 이관·백업·복구·수동 작업을 검토 가능한 형태로 만듭니다. 인프라·호스트·태그·배포 권한은 프로젝트 정책입니다. +- 프로젝트의 아키텍처 정의서(arc42)를 쓸 때 Webcraft를 따르는 절은 지침 본문을 복사하지 않고, 각 지침의 `arc42` 값에 맞춰 지침 이름·플러그인 판·링크와 AGENTS.md 프로젝트 규칙 표의 예외만 적습니다. Webcraft 지침에 원천이 없는 절(1, 3 등)은 프로젝트의 요구사항·코드·운영 문서에서 채우고, 채울 원천이 없으면 비어 있다고 먼저 알립니다. 제품이 사용자에게 에이전트 플러그인을 제공하면 [제품 플러그인 관리](references/product-plugins.md)를 읽습니다. diff --git a/plugins/webcraft/skills/architecture/references/product-plugins.md b/plugins/webcraft/skills/architecture/references/product-plugins.md index 7db8abb..388bea1 100644 --- a/plugins/webcraft/skills/architecture/references/product-plugins.md +++ b/plugins/webcraft/skills/architecture/references/product-plugins.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 제품 플러그인 관리 제품이 사용자에게 MCP 연결과 사용법을 제공할 때 적용합니다. 저장소 개발용 스킬과 사용자에게 배포할 스킬은 읽는 사람과 목적이 다르므로 원본을 나눕니다. diff --git a/plugins/webcraft/skills/backend/SKILL.md b/plugins/webcraft/skills/backend/SKILL.md index 391d554..d3a1396 100644 --- a/plugins/webcraft/skills/backend/SKILL.md +++ b/plugins/webcraft/skills/backend/SKILL.md @@ -1,6 +1,7 @@ --- name: backend description: Java·Spring Boot·jOOQ 기반 모듈형 모놀리스의 도메인, 서비스, 저장소와 조회 경계를 구현합니다. 서버 기능·유스케이스·모듈 구조를 만들거나 고칠 때 사용합니다. +arc42: "8.2, 5, 2" --- # 백엔드 diff --git a/plugins/webcraft/skills/backend/references/code-style.md b/plugins/webcraft/skills/backend/references/code-style.md index 8a4bd61..bc06d96 100644 --- a/plugins/webcraft/skills/backend/references/code-style.md +++ b/plugins/webcraft/skills/backend/references/code-style.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 코드 규칙 - 역할을 Controller·Service·Query·Repository·Requests·Views·ErrorCode 이름으로 드러냅니다. 피처별 Service가 읽기·쓰기를 함께 제공합니다. 저장소·조회 구현은 Jooq처럼 기술 이름을 붙이고 QueryRepository처럼 역할을 섞지 않습니다. diff --git a/plugins/webcraft/skills/backend/references/contracts.md b/plugins/webcraft/skills/backend/references/contracts.md index 764a47d..462fc10 100644 --- a/plugins/webcraft/skills/backend/references/contracts.md +++ b/plugins/webcraft/skills/backend/references/contracts.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1, 5" +--- + # 모듈 간 계약 모듈 루트에는 다른 모듈이 참조할 공개 계약과 공개 값 타입을 둡니다. 다른 모듈은 내부 application·domain·infrastructure 타입을 참조하지 않습니다. diff --git a/plugins/webcraft/skills/backend/references/cross-module-read.md b/plugins/webcraft/skills/backend/references/cross-module-read.md index e2d730f..8d49514 100644 --- a/plugins/webcraft/skills/backend/references/cross-module-read.md +++ b/plugins/webcraft/skills/backend/references/cross-module-read.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 모듈 간 조회 명령은 공개 계약으로 처리합니다. 조회는 표시값 조립과 결과 집합 결정의 요구를 구분합니다. diff --git a/plugins/webcraft/skills/backend/references/errors.md b/plugins/webcraft/skills/backend/references/errors.md index 1737dd4..c01b364 100644 --- a/plugins/webcraft/skills/backend/references/errors.md +++ b/plugins/webcraft/skills/backend/references/errors.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 도메인 오류와 서비스 오류 오류를 판정하는 주체에 따라 책임을 나눕니다. 도메인은 업무 불변식과 의미 있는 상태 전이를 알고, application 서비스는 요청 주체·자원 부재·접근 권한·동시 변경을 판정합니다. diff --git a/plugins/webcraft/skills/backend/references/layers.md b/plugins/webcraft/skills/backend/references/layers.md index cc359c9..0bf301d 100644 --- a/plugins/webcraft/skills/backend/references/layers.md +++ b/plugins/webcraft/skills/backend/references/layers.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2, 5, 6" +--- + # 계층과 명령 모듈은 단수 이름으로 두고 내부를 application·domain·infrastructure로 나눕니다. 모듈 루트의 Facade·Spi·Event가 공개 계약입니다. 다른 모듈의 내부 패키지를 직접 참조하거나 순환 호출하지 않습니다. diff --git a/plugins/webcraft/skills/backend/references/queries.md b/plugins/webcraft/skills/backend/references/queries.md index 57ca89b..c5f3ea4 100644 --- a/plugins/webcraft/skills/backend/references/queries.md +++ b/plugins/webcraft/skills/backend/references/queries.md @@ -1,3 +1,7 @@ +--- +arc42: "8.2" +--- + # 조회 포트 화면 조회 포트 `XxxQuery`는 그 조회를 소유한 서비스와 같은 피처의 application에 둡니다. 서비스와 조회 포트는 1:1로 구성합니다. 구현은 infrastructure의 package-private `JooqXxxQuery`에 둡니다. 도메인 저장소 구현과 합치지 않습니다. diff --git a/plugins/webcraft/skills/backend/references/sharing.md b/plugins/webcraft/skills/backend/references/sharing.md index c1239a9..c7ef075 100644 --- a/plugins/webcraft/skills/backend/references/sharing.md +++ b/plugins/webcraft/skills/backend/references/sharing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.1" +--- + # 공유와 참조 application은 유스케이스·피처별로, domain은 애그리거트별로 나눕니다. 두 축은 독립적이며 서비스 하나가 여러 애그리거트를 조율할 수 있습니다. 처음에는 계층 루트에 두고 실제로 여러 단위가 생길 때 나눕니다. diff --git a/plugins/webcraft/skills/database/SKILL.md b/plugins/webcraft/skills/database/SKILL.md index 2683a13..9829474 100644 --- a/plugins/webcraft/skills/database/SKILL.md +++ b/plugins/webcraft/skills/database/SKILL.md @@ -1,6 +1,7 @@ --- name: database description: Flyway와 jOOQ를 사용하는 프로젝트의 스키마 변경, 기존 데이터 이관, 생성 코드 동기화를 수행합니다. 테이블·열·마이그레이션·DB 이관을 다룰 때 사용합니다. +arc42: "8.3, 2, 7" --- # DB와 마이그레이션 diff --git a/plugins/webcraft/skills/design-system/SKILL.md b/plugins/webcraft/skills/design-system/SKILL.md index 4019e18..e60ca68 100644 --- a/plugins/webcraft/skills/design-system/SKILL.md +++ b/plugins/webcraft/skills/design-system/SKILL.md @@ -1,6 +1,7 @@ --- name: design-system description: Astryx 기반 웹 앱에서 테마·아이콘·부품 조합·앱 셸·페이지 배치·반응형과 화면 상호작용을 일관되게 구현합니다. 부품·스타일·테마·레이아웃·화면 패턴을 만들거나 바꿀 때 사용합니다. +arc42: "8.5, 2" --- # 디자인 시스템 diff --git a/plugins/webcraft/skills/design-system/notes.md b/plugins/webcraft/skills/design-system/notes.md index c22fbfc..47bbeb7 100644 --- a/plugins/webcraft/skills/design-system/notes.md +++ b/plugins/webcraft/skills/design-system/notes.md @@ -1,3 +1,7 @@ +--- +arc42: "9" +--- + # 지침 개선 기록 ## 2026-11-05 · 제작 맥락의 화면 노출 diff --git a/plugins/webcraft/skills/design-system/references/app-layout.md b/plugins/webcraft/skills/design-system/references/app-layout.md index db94ee0..9775105 100644 --- a/plugins/webcraft/skills/design-system/references/app-layout.md +++ b/plugins/webcraft/skills/design-system/references/app-layout.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 5" +--- + # 앱 셸과 모바일 탐색 앱 셸([AppFrame](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/app/AppFrame.tsx))은 Astryx AppShell과 SideNav 위에 메뉴·페이지·휴대폰 탐색을 조립합니다. 메뉴·테마·밀도는 페이지마다 새로 만들지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/astryx-workflow.md b/plugins/webcraft/skills/design-system/references/astryx-workflow.md index 325c315..11feae2 100644 --- a/plugins/webcraft/skills/design-system/references/astryx-workflow.md +++ b/plugins/webcraft/skills/design-system/references/astryx-workflow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Astryx 작업 절차 ## 구현 전 diff --git a/plugins/webcraft/skills/design-system/references/basic-components.md b/plugins/webcraft/skills/design-system/references/basic-components.md index f62cd51..ad7a92d 100644 --- a/plugins/webcraft/skills/design-system/references/basic-components.md +++ b/plugins/webcraft/skills/design-system/references/basic-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Primitives (기본 부품) 버튼·라벨·아바타·입력처럼 독립된 UI 역할을 가진 부품은 Astryx를 직접 import합니다. 이름만 바꾼 래퍼를 만들어 API를 복제하지 않습니다. 고래밥의 기준은 테마 변형·크기와 쓰임 구분이며, 부품의 모든 API는 공식 문서(`astryx component <이름>`)를 따릅니다. diff --git a/plugins/webcraft/skills/design-system/references/composed-components.md b/plugins/webcraft/skills/design-system/references/composed-components.md index 249a89c..cd85c1c 100644 --- a/plugins/webcraft/skills/design-system/references/composed-components.md +++ b/plugins/webcraft/skills/design-system/references/composed-components.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # Composites (조합 부품) 여러 기본 부품을 묶어 반복해 쓰는 단위입니다. 조합은 값과 동작을 props로 받고 제품의 API·라우트·업무 정책을 직접 소유하지 않습니다. Playground 템플릿과 견본은 같은 조합을 import하며 그 안에 같은 UI를 다시 만들지 않습니다. FSD의 widgets와 같은 분류가 아닙니다. diff --git a/plugins/webcraft/skills/design-system/references/content-and-review.md b/plugins/webcraft/skills/design-system/references/content-and-review.md index 35f8580..7f9910d 100644 --- a/plugins/webcraft/skills/design-system/references/content-and-review.md +++ b/plugins/webcraft/skills/design-system/references/content-and-review.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 문구·본문과 검증 ## 화면 문구를 넣는 기준 diff --git a/plugins/webcraft/skills/design-system/references/creation-form.md b/plugins/webcraft/skills/design-system/references/creation-form.md index 4c0bec5..9cad35b 100644 --- a/plugins/webcraft/skills/design-system/references/creation-form.md +++ b/plugins/webcraft/skills/design-system/references/creation-form.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 생성 양식 제목과 본문이 있는 것을 만들고 고칠 때는 한 양식([ComposeForm·ComposeSurface](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/compose))을 대화상자·페이지·휴대폰에서 같이 씁니다. 몇 칸으로 끝나는 변경은 [짧은 양식](dialog.md)을 씁니다. diff --git a/plugins/webcraft/skills/design-system/references/data-states.md b/plugins/webcraft/skills/design-system/references/data-states.md index f4f6b7b..f82adcc 100644 --- a/plugins/webcraft/skills/design-system/references/data-states.md +++ b/plugins/webcraft/skills/design-system/references/data-states.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7, 6" +--- + # 데이터 상태 조회 결과가 없거나 늦거나 실패했을 때의 화면입니다. 상태마다 사용자가 할 수 있는 다음 행동이 다르므로 구분해서 보입니다. diff --git a/plugins/webcraft/skills/design-system/references/dialog.md b/plugins/webcraft/skills/design-system/references/dialog.md index 9c65581..9fe2e7c 100644 --- a/plugins/webcraft/skills/design-system/references/dialog.md +++ b/plugins/webcraft/skills/design-system/references/dialog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 공통 다이얼로그 모든 대화상자는 한 틀([AppDialog](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/composites/dialog/AppDialog.tsx))을 씁니다. 머리·스크롤 본문·선택적 바닥이며 긴 본문에서도 본문만 스크롤하고 제목·닫기·마지막 동작은 보입니다. 제품 화면은 Astryx Dialog를 직접 쓰지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/icons.md b/plugins/webcraft/skills/design-system/references/icons.md index 35fbd12..b19865f 100644 --- a/plugins/webcraft/skills/design-system/references/icons.md +++ b/plugins/webcraft/skills/design-system/references/icons.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 아이콘 아이콘은 명령·상태·대상을 구분하는 시각 언어입니다. 화면은 의미 이름(`search`, `back`, `layout-list`)으로 아이콘을 부르고, 의미 이름에서 Solar 아이콘으로 가는 매핑은 [생성 스크립트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/scripts/generate-icons.mjs) 한 곳에 둡니다. 사용하는 이름만 생성하며, 이름을 더하면 스크립트를 다시 실행합니다. diff --git a/plugins/webcraft/skills/design-system/references/interaction-patterns.md b/plugins/webcraft/skills/design-system/references/interaction-patterns.md index 9dd0162..6fd7b0c 100644 --- a/plugins/webcraft/skills/design-system/references/interaction-patterns.md +++ b/plugins/webcraft/skills/design-system/references/interaction-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 입력과 상호작용 어떤 상호작용을 어느 표면에서 할지 정합니다. 개별 도구의 동작은 [검색·필터·표시](search-filter.md), 대화상자의 배치는 [공통 다이얼로그](dialog.md), 제목·본문 작성은 [생성 양식](creation-form.md)이 소유합니다. diff --git a/plugins/webcraft/skills/design-system/references/layout-patterns.md b/plugins/webcraft/skills/design-system/references/layout-patterns.md index 1e1c8cf..badbf60 100644 --- a/plugins/webcraft/skills/design-system/references/layout-patterns.md +++ b/plugins/webcraft/skills/design-system/references/layout-patterns.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 페이지 배치 페이지([Page](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/page/Page.tsx))는 머리 줄·배너 자리·툴바·적용 줄·본문의 순서를 고정합니다. 머리와 툴바는 고정하고 본문만 스크롤합니다. 구현 전에 기존 Page와 같은 역할의 화면을 읽고 각 조작을 보기·조건·표시·주 동작으로 나눕니다. diff --git a/plugins/webcraft/skills/design-system/references/motion.md b/plugins/webcraft/skills/design-system/references/motion.md index e7fb644..70244b8 100644 --- a/plugins/webcraft/skills/design-system/references/motion.md +++ b/plugins/webcraft/skills/design-system/references/motion.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 모션 움직임은 위치가 바뀌었거나 새 내용이 도착했음을 알릴 때, 또는 절차 완료를 한 번 축하할 때만 씁니다. 장식으로 반복하는 움직임을 두지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/pattern-catalog.md b/plugins/webcraft/skills/design-system/references/pattern-catalog.md index e812fdf..189b186 100644 --- a/plugins/webcraft/skills/design-system/references/pattern-catalog.md +++ b/plugins/webcraft/skills/design-system/references/pattern-catalog.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 패턴의 글·코드·실행 견본 화면을 만들기 전에 해당 패턴의 사용 기준, 구현 파일, 실행 견본을 함께 읽습니다. 글은 선택 기준과 지킬 조건, 코드는 배치와 동작, 견본은 상태와 화면 크기를 바꾸어 확인하는 데 씁니다. diff --git a/plugins/webcraft/skills/design-system/references/peek.md b/plugins/webcraft/skills/design-system/references/peek.md index 08859f0..aac683e 100644 --- a/plugins/webcraft/skills/design-system/references/peek.md +++ b/plugins/webcraft/skills/design-system/references/peek.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6" +--- + # 미리보기 패널 목록을 그대로 둔 채 항목을 차례로 훑을 때 목록 옆에 여는 비모달 패널입니다. Linear는 Space 키로, Plane은 행 클릭으로 엽니다. 우리는 Plane과 달리 미리보기 대상을 주소에 남겨 뒤로가기·새로고침·공유가 같은 화면을 엽니다. 구현은 키트의 [peek](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/routing)와 [PeekLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxPane](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)이 맡습니다. diff --git a/plugins/webcraft/skills/design-system/references/reference-kit.md b/plugins/webcraft/skills/design-system/references/reference-kit.md index e43161d..4097798 100644 --- a/plugins/webcraft/skills/design-system/references/reference-kit.md +++ b/plugins/webcraft/skills/design-system/references/reference-kit.md @@ -1,3 +1,7 @@ +--- +arc42: "8.8" +--- + # 기본 레퍼런스의 사용과 갱신 프로젝트 디자인·기존 부품·사용자가 준 참고 화면이 있으면 그것을 우선합니다. 지정이 없을 때 [workspace 키트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/README.md)를 출발점으로 씁니다. 키트는 선택해서 채택하는 설계와 코드의 스냅샷이며 제품 전체를 자동 생성하는 템플릿이 아닙니다. diff --git a/plugins/webcraft/skills/design-system/references/route-masking.md b/plugins/webcraft/skills/design-system/references/route-masking.md index 9a45f07..4352737 100644 --- a/plugins/webcraft/skills/design-system/references/route-masking.md +++ b/plugins/webcraft/skills/design-system/references/route-masking.md @@ -1,3 +1,7 @@ +--- +arc42: "8.6, 6" +--- + # 라우트 마스킹 자기 주소가 있는 작성·수정 양식을 데스크톱 목록 위 대화상자로 엽니다. 목록은 그대로 두고 주소창에는 양식의 실제 주소를 보입니다. 상태·복귀와 직접 링크의 계약은 frontend의 [화면 전환](../../frontend/references/navigation.md)이 소유하고, 키트의 [routed-panel](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/patterns/routing/routed-panel.ts)이 구현합니다. diff --git a/plugins/webcraft/skills/design-system/references/search-filter.md b/plugins/webcraft/skills/design-system/references/search-filter.md index 9914d40..255d9f0 100644 --- a/plugins/webcraft/skills/design-system/references/search-filter.md +++ b/plugins/webcraft/skills/design-system/references/search-filter.md @@ -1,3 +1,7 @@ +--- +arc42: "8.7" +--- + # 검색·필터·표시 목록의 도구는 세 가지 역할로 나눕니다. 검색은 글자로 좁히고, 필터는 속성 값으로 거르고, 표시는 같은 결과를 어떻게 보일지(보기 방식·정렬·그룹) 정합니다. 도구는 이 순서로 같은 좁은 간격에 두고 만들기는 넓은 간격 뒤에 둡니다. 뷰·탭 알약으로 도구를 만들지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/spacing.md b/plugins/webcraft/skills/design-system/references/spacing.md index d47d526..3d9ff31 100644 --- a/plugins/webcraft/skills/design-system/references/spacing.md +++ b/plugins/webcraft/skills/design-system/references/spacing.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 간격과 크기 앱의 크기는 rem과 테마 토큰으로 씁니다. 1px 선과 그림자만 px로 둡니다. 그래야 루트 글자 크기를 키울 때 부품 높이·간격·모서리가 함께 커집니다. diff --git a/plugins/webcraft/skills/design-system/references/surfaces.md b/plugins/webcraft/skills/design-system/references/surfaces.md index 13e1760..a5fdc07 100644 --- a/plugins/webcraft/skills/design-system/references/surfaces.md +++ b/plugins/webcraft/skills/design-system/references/surfaces.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 면과 경계 화면은 네 단계의 면으로 쌓습니다. 안쪽에 놓이는 면은 바깥보다 한 단계 위입니다. 같은 단계의 면을 겹치면 경계가 사라지므로 카드 안에 같은 카드를 넣지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/theme.md b/plugins/webcraft/skills/design-system/references/theme.md index ca991c6..906f5eb 100644 --- a/plugins/webcraft/skills/design-system/references/theme.md +++ b/plugins/webcraft/skills/design-system/references/theme.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 테마와 색상 테마는 색·글자·간격·면·경계·모서리와 부품 변형의 기본값을 한 곳에서 정합니다. 프로젝트가 값을 정하지 않았으면 [기본 테마](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/foundations/theme.ts)에서 출발합니다. Stone 테마를 확장하며 Astryx 내부 클래스 덮어쓰기와 `!important`를 쓰지 않습니다. diff --git a/plugins/webcraft/skills/design-system/references/typography.md b/plugins/webcraft/skills/design-system/references/typography.md index fafbd92..ae8d7cf 100644 --- a/plugins/webcraft/skills/design-system/references/typography.md +++ b/plugins/webcraft/skills/design-system/references/typography.md @@ -1,3 +1,7 @@ +--- +arc42: "8.5" +--- + # 글자 조밀한 업무 화면의 글자는 네 크기로 위계를 만듭니다. 크기를 화면마다 새로 정하지 않고 테마의 `--text-*` 토큰을 씁니다. diff --git a/plugins/webcraft/skills/frontend/SKILL.md b/plugins/webcraft/skills/frontend/SKILL.md index cc633f5..4a4f331 100644 --- a/plugins/webcraft/skills/frontend/SKILL.md +++ b/plugins/webcraft/skills/frontend/SKILL.md @@ -1,6 +1,7 @@ --- name: frontend description: React·TypeScript 웹 앱의 TanStack Router/Query 데이터 흐름, 폼 초안과 화면 전환을 구현합니다. 페이지·컴포넌트·프론트 상태를 만들거나 고칠 때 사용합니다. +arc42: "8.4, 2" --- # 프론트엔드 diff --git a/plugins/webcraft/skills/frontend/references/data-flow.md b/plugins/webcraft/skills/frontend/references/data-flow.md index 29f8013..a379e02 100644 --- a/plugins/webcraft/skills/frontend/references/data-flow.md +++ b/plugins/webcraft/skills/frontend/references/data-flow.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4" +--- + # 상태와 데이터 흐름 | 상태 | 소유자 | diff --git a/plugins/webcraft/skills/frontend/references/navigation.md b/plugins/webcraft/skills/frontend/references/navigation.md index 34a170b..12c6952 100644 --- a/plugins/webcraft/skills/frontend/references/navigation.md +++ b/plugins/webcraft/skills/frontend/references/navigation.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 6" +--- + # 화면 전환 첫 화면에 필요한 조회는 라우트 loader에서 준비하고 컴포넌트와 같은 queryOptions·캐시를 씁니다. 캐시가 있으면 오래됐어도 즉시 그리고 뒤에서 갱신하며(stale-while-revalidate), 캐시 신선도 조건으로 첫 그림을 거르지 않습니다. 앱 안 링크에 포인터나 초점이 오면 그 화면을 미리 준비합니다(intent prefetch). 화면마다 붙이지 않고 문서에 한 번 걸어 `pointerover`·`focusin`에서 앱 안 `a[href]`를 라우터의 preload로 준비하고, 같은 주소는 10초에 한 번만 부릅니다. 캐시가 없으면 다음 화면이 준비될 때까지 지금 화면을 유지하며, 가리는 막을 두지 않고 150ms가 지나면 콘텐츠 카드 위쪽 테두리에만 진행 표시를 띄웁니다. 누른 메뉴의 선택 표시는 응답 전에 옮기고, 캐시로 먼저 그린 본문이 서버 최신본과 다르면 읽는 글을 바로 바꾸지 않고 "최신 내용 보기" 안내만 띄웁니다. 메뉴·링크 진입, 뒤로 돌아오기, 검색 조건 변경을 구분해 로딩·스크롤·캐시 정책을 정합니다. 화면 표현은 디자인 시스템의 [데이터 상태](../../design-system/references/data-states.md)를 따릅니다. diff --git a/plugins/webcraft/skills/frontend/references/structure.md b/plugins/webcraft/skills/frontend/references/structure.md index bbd86c0..cffc059 100644 --- a/plugins/webcraft/skills/frontend/references/structure.md +++ b/plugins/webcraft/skills/frontend/references/structure.md @@ -1,3 +1,7 @@ +--- +arc42: "8.4, 5" +--- + # 코드 작성 파일 배치와 레이어·슬라이스·공개 API는 공식 `feature-sliced-design` 스킬을 따릅니다. 이 워크플로우에서 FSD 규칙과 검사기를 별도로 유지하지 않습니다. diff --git a/plugins/webcraft/skills/goraebap-mode/SKILL.md b/plugins/webcraft/skills/goraebap-mode/SKILL.md index 46cf17e..759c5ef 100644 --- a/plugins/webcraft/skills/goraebap-mode/SKILL.md +++ b/plugins/webcraft/skills/goraebap-mode/SKILL.md @@ -1,6 +1,7 @@ --- name: goraebap-mode description: 웹 플랫폼의 기능 구현, 버그 수정, 구조 변경을 작업에 맞는 절차와 프론트·백엔드 지침으로 연결합니다. 프로젝트 AGENTS.md가 Webcraft 지침을 따른다고 밝혔을 때, 또는 사용자가 이 작업 방식을 이름으로 요청했을 때만 씁니다. 그 밖의 프로젝트에서는 쓰지 않습니다. +arc42: "none" --- # 웹 플랫폼 작업 방식 diff --git a/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md b/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md index 23430b7..74179d8 100644 --- a/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md +++ b/plugins/webcraft/skills/goraebap-mode/playbooks/bug-fix.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 버그 수정 1. 기대·실제 동작, 재현 입력, 환경을 확보합니다. 가능한 경우 수정 전 실패를 직접 재현합니다. diff --git a/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md b/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md index dfaeb41..56f3ac7 100644 --- a/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md +++ b/plugins/webcraft/skills/goraebap-mode/playbooks/evolve.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 개선 1. 실제 실패나 사용자 피드백을 근거로 빠진 규칙·잘못된 도구·놓친 검증 중 원인을 찾습니다. 한 사례를 모든 프로젝트의 절대 규칙으로 만들지 않습니다. diff --git a/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md b/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md index 058d55d..509edf2 100644 --- a/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md +++ b/plugins/webcraft/skills/goraebap-mode/playbooks/feature.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 기능 구현 1. 누가 어떤 상황에서 무엇을 할 수 있어야 하는지와 수용 조건을 확인합니다. 기존 설계와 충돌하면 제품 선택을 먼저 해결합니다. diff --git a/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md b/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md index 3194b8e..3d61a97 100644 --- a/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md +++ b/plugins/webcraft/skills/goraebap-mode/playbooks/investigate.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 조사 1. 질문의 범위와 답을 확인할 근거를 정합니다. 코드, 테스트, 설계·결정 순으로 필요한 부분을 읽습니다. diff --git a/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md b/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md index 84dffcf..f103a20 100644 --- a/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md +++ b/plugins/webcraft/skills/goraebap-mode/playbooks/refactor.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 리팩터링 1. 유지할 동작과 바꿀 구조를 분리해 적습니다. 호출자와 외부 계약을 확인합니다. diff --git a/plugins/webcraft/skills/goraebap-mode/references/assets.md b/plugins/webcraft/skills/goraebap-mode/references/assets.md index 94c57cd..bab2354 100644 --- a/plugins/webcraft/skills/goraebap-mode/references/assets.md +++ b/plugins/webcraft/skills/goraebap-mode/references/assets.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 에셋 맡기기 에이전트는 로고, 아이콘 그림, 일러스트, 빈 상태 그림, 화면에 쓰는 이미지를 직접 만들지 않고 에셋 역할에 맡깁니다. 글은 [글쓰기 맡기기](writer.md)를 따르고, 이 문서는 그림과 이미지 자산을 누가 만들고 어떻게 맡기는지 정합니다. 화면 코드, 아이콘 라이브러리에 이미 있는 아이콘([아이콘 규칙](../../design-system/references/icons.md)), 외부에서 받아 쓰는 라이선스 자산은 맡기지 않습니다. diff --git a/plugins/webcraft/skills/goraebap-mode/references/handoff.md b/plugins/webcraft/skills/goraebap-mode/references/handoff.md index 36f0890..71db87c 100644 --- a/plugins/webcraft/skills/goraebap-mode/references/handoff.md +++ b/plugins/webcraft/skills/goraebap-mode/references/handoff.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 이어받기 문서 설치된 Webcraft 플러그인 판이 프로젝트 AGENTS.md의 최소 판보다 낮거나, 세션 중에 플러그인이 갱신돼 지침이 맞지 않거나, 필요한 지침을 읽을 수 없을 때는 추측으로 진행하지 않습니다. 지금까지의 작업 상태를 이어받기 문서로 남기고 플러그인 설치·갱신 방법과 새 세션에서 읽을 문서 경로를 사용자에게 알립니다. diff --git a/plugins/webcraft/skills/goraebap-mode/references/verification.md b/plugins/webcraft/skills/goraebap-mode/references/verification.md index f68af3d..d2344ae 100644 --- a/plugins/webcraft/skills/goraebap-mode/references/verification.md +++ b/plugins/webcraft/skills/goraebap-mode/references/verification.md @@ -1,3 +1,7 @@ +--- +arc42: "8.9" +--- + # 변경에 맞는 검증 프로젝트의 실제 스크립트와 CI를 확인해 명령을 선택합니다. 여기에는 특정 저장소의 경로·포트·검사 명령을 고정하지 않습니다. diff --git a/plugins/webcraft/skills/goraebap-mode/references/writer.md b/plugins/webcraft/skills/goraebap-mode/references/writer.md index ad344eb..75d3172 100644 --- a/plugins/webcraft/skills/goraebap-mode/references/writer.md +++ b/plugins/webcraft/skills/goraebap-mode/references/writer.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 글쓰기 맡기기 에이전트는 사람이 읽는 문서(가이드 해설, README, 사용 문서)와 스킬·참고 자료 본문을 직접 쓰지 않고 글쓰기 역할에 맡깁니다. 무엇을 어떤 문체로 쓸지는 [글쓰기 기준](writing.md)을 따르고, 이 문서는 누가 쓰고 어떻게 맡기는지 정합니다. 코드, 코드 주석, 커밋 메시지, 사용자에게 하는 대화 답변, 설정 파일은 맡기지 않고 에이전트가 직접 씁니다. diff --git a/plugins/webcraft/skills/goraebap-mode/references/writing.md b/plugins/webcraft/skills/goraebap-mode/references/writing.md index 47cae97..9afc539 100644 --- a/plugins/webcraft/skills/goraebap-mode/references/writing.md +++ b/plugins/webcraft/skills/goraebap-mode/references/writing.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 스킬과 문서 쓰기 스킬은 에이전트가 판단하고 행동할 때 읽는 글입니다. 본문과 예시의 문체도 이후 작성에 영향을 줍니다. 글쓰기 규칙을 추가했으면 기존 본문도 그 기준으로 읽고 고칩니다. 이 기준으로 쓸 글을 맡기는 방법은 [글쓰기 맡기기](writer.md)를 따릅니다. @@ -33,3 +37,36 @@ 첫 문단만 읽어도 할 일을 알 수 있는지, 처음 읽는 사람이 조건과 예외를 따라 판단할 수 있는지 확인합니다. 소리 내어 읽으면 어색한 문장은 고칩니다. 필요한 계약·제약·실패 시 행동을 없애면서 길이만 줄이지 않습니다. 확인한 사실과 제안, 실제 수행한 검증과 미확인 범위를 구분합니다. 조사·제작·검수 기록은 작업 기록에 둡니다. 사용자에게 전달하는 문서에는 작업을 끝내는 데 필요한 내용을 씁니다. 화면 문구는 [문구와 검증](../../design-system/references/content-and-review.md)의 기준도 따릅니다. + +## 참고 문서의 구획 + +모든 지침 Markdown(`SKILL.md` 포함)은 프론트매터에 `arc42`를 둡니다. 값은 옮겨 갈 아키텍처 정의서 절 번호(`"8.6"`)로 적고, 여러 절에 걸치면 `"8.4, 6"`처럼 쉼표로 구분하며 첫 값을 주된 절로 삼습니다. 입구 스킬의 플레이북·맡기기 문서나 프로젝트 연결처럼 작업 방식·절차만 담은 문서는 `"none"`으로 둡니다. `npm run check`가 `arc42` 값과 꼬리 구획의 위치·순서를 검사하며, 사이트는 이 값으로 아키텍처 메뉴와 절 페이지 목록을 만듭니다. + +| 절 | 이름 | +| --- | --- | +| `1` | 소개와 목표 | +| `2` | 제약 | +| `3` | 맥락과 범위 | +| `4` | 해결 전략 | +| `5` | 구성 요소 | +| `6` | 실행 | +| `7` | 배치와 운영 | +| `8` | 횡단 관심사 | +| `8.1` | API와 모듈 계약 | +| `8.2` | 백엔드 코드 | +| `8.3` | 데이터와 마이그레이션 | +| `8.4` | 프론트 코드와 상태 | +| `8.5` | 화면 기초 | +| `8.6` | 화면 배치와 탐색 | +| `8.7` | 데이터 상태와 입력 | +| `8.8` | UI 부품 사용 | +| `8.9` | 검증 | +| `9` | 아키텍처 결정 | + +규칙 절에는 지금 지키는 규칙과 이유, 예시만 둡니다. 결정 날짜·이력(“~까지는 ~였다”)·실행 명령은 규칙 절에 쓰지 않습니다. + +필요할 때만 파일 맨 끝에 꼬리 구획을 다음 이름과 순서로 둡니다. 없는 구획은 만들지 않으며, 결정의 긴 경위는 그 스킬의 `notes.md`에 둡니다. + +1. `## 전환 중`: 아직 다 적용되지 않은 곳 +2. `## 작업 절차`: 명령·점검 순서 +3. `## 근거`: 결정 경위·기각한 대안 diff --git a/plugins/webcraft/skills/manage-workflow/SKILL.md b/plugins/webcraft/skills/manage-workflow/SKILL.md index d721f3e..f0f7995 100644 --- a/plugins/webcraft/skills/manage-workflow/SKILL.md +++ b/plugins/webcraft/skills/manage-workflow/SKILL.md @@ -1,6 +1,7 @@ --- name: manage-workflow description: 사용자가 Webcraft 연결·사본 전환·프로젝트 규칙 정리·지침 제안 처리를 요청했을 때만 씁니다. 일반 제품 구현에는 쓰지 않습니다. +arc42: "none" --- # 프로젝트와 지침 연결 diff --git a/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md b/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md index 6690c21..28973de 100644 --- a/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md +++ b/plugins/webcraft/skills/manage-workflow/references/migrate-from-copies.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 사본에서 전환 예전 판의 플러그인은 프로젝트의 `.agents/skills`에 지침 사본(`<접두사>-mode`·`<접두사>-frontend` 등)을 설치하고 동기화 스크립트와 시작 훅을 두었습니다. 이 사본을 걷어내고 플러그인 지침을 직접 따르게 바꿉니다. 사본에서 고친 부분은 프로젝트 규칙으로 옮겨 잃지 않습니다. diff --git a/plugins/webcraft/skills/manage-workflow/references/project-rules.md b/plugins/webcraft/skills/manage-workflow/references/project-rules.md index a411420..088bc93 100644 --- a/plugins/webcraft/skills/manage-workflow/references/project-rules.md +++ b/plugins/webcraft/skills/manage-workflow/references/project-rules.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 프로젝트 규칙 프로젝트가 플러그인 지침과 다르게 하는 결정을 적는 자리입니다. 에이전트는 지침을 읽기 전에 이 규칙을 먼저 보고, 지침과 부딪히는 곳은 프로젝트 규칙을 따릅니다. diff --git a/plugins/webcraft/skills/manage-workflow/references/proposals.md b/plugins/webcraft/skills/manage-workflow/references/proposals.md index 3982a3f..21929b3 100644 --- a/plugins/webcraft/skills/manage-workflow/references/proposals.md +++ b/plugins/webcraft/skills/manage-workflow/references/proposals.md @@ -1,3 +1,7 @@ +--- +arc42: "none" +--- + # 지침 제안 프로젝트 작업 중 요청이 기존 지침과 다를 때, 이 프로젝트만의 예외로 둘지 Webcraft 지침을 고칠지 정하고 Webcraft 원본 저장소(`dev-goraebap/dev.goraebap`)의 이슈로 받습니다. 제안자가 누구든 받아들일지는 플러그인 관리자가 정합니다. 프로젝트 세션에서 바로 PR을 올리는 안은 작업 중 다른 저장소 체크아웃·글쓰기 역할 위임·판 올리기가 끼어 무거워 쓰지 않고, 로컬 제안함은 다른 사용자의 제안을 받을 수 없어 쓰지 않습니다. diff --git a/site/content-plugin.ts b/site/content-plugin.ts index 9509730..24126b9 100644 --- a/site/content-plugin.ts +++ b/site/content-plugin.ts @@ -22,6 +22,8 @@ export type GuideDoc = { source: string; /** 본문이 스스로 h1을 가지면 true(지침 Markdown). */ hasTitle: boolean; + /** 아키텍처 정의서(arc42)에서 이 문서가 맡는 절. 첫 값이 메뉴에서 놓일 절이다. 해당 없으면 비운다. */ + arc42?: string[]; kind?: 'post'; date?: string; updated?: string; @@ -41,8 +43,24 @@ export const skillGroups = [ { skill: 'manage-workflow', label: '프로젝트 연결', icon: 'attachment' }, ] as const; +/** + * 아키텍처 메뉴의 절(arc42). 지침 Markdown과 화면 해설은 프론트매터 arc42로 자기 절을 밝히고, 메뉴는 첫 값의 절 아래에 + * 둔다. 8절은 하위 절로 나눈다. 절마다 site/content/architecture/.mdx(점은 하이픈) 개요 페이지가 있다. + */ +export const architectureSections = [ + { id: '1', label: '소개와 목표', icon: 'home' }, { id: '2', label: '제약', icon: 'lock' }, { id: '3', label: '맥락과 범위', icon: 'link' }, + { id: '4', label: '해결 전략', icon: 'layout-board' }, { id: '5', label: '구성 요소', icon: 'layout-grid' }, { id: '6', label: '실행', icon: 'clock' }, + { id: '7', label: '배치와 운영', icon: 'archive' }, { id: '8', label: '횡단 관심사', icon: 'layout-list' }, + { id: '8.1', label: 'API와 모듈 계약' }, { id: '8.2', label: '백엔드 코드' }, { id: '8.3', label: '데이터와 마이그레이션' }, + { id: '8.4', label: '프론트 코드와 상태' }, { id: '8.5', label: '화면 기초' }, { id: '8.6', label: '화면 배치와 탐색' }, + { id: '8.7', label: '데이터 상태와 입력' }, { id: '8.8', label: 'UI 부품 사용' }, { id: '8.9', label: '검증' }, + { id: '9', label: '아키텍처 결정', icon: 'book' }, +] as const; +export const sectionPath = (id: string) => `/webcraft/architecture/${id.replace('.', '-')}/`; + /** 화면 해설·견본 묶음(site/content의 폴더). */ export const contentGroups = [ + { dir: 'architecture', label: '아키텍처', icon: 'layout-board' }, { dir: 'common', label: '화면 공통', icon: 'layout-grid' }, { dir: 'app-shell', label: '앱 셸', icon: 'sidebar' }, { dir: 'catalog/foundations', label: 'Foundations (디자인 기초)', icon: 'sun' }, @@ -70,7 +88,8 @@ export function skillRoute(file: string) { const frontmatter = (text: string) => { const block = /^---\r?\n([\s\S]*?)\r?\n---/.exec(text)?.[1] ?? ''; const field = (name: string) => /^\s*(?:"|')?(.*?)(?:"|')?\s*$/.exec(new RegExp(`^${name}:\\s*(.+)$`, 'm').exec(block)?.[1] ?? '')?.[1]; - return { title: field('title'), description: field('description'), order: Number(/order:\s*(\d+)/.exec(block)?.[1] ?? 99) }; + const arc42 = field('arc42')?.split(',').map(value => value.trim()).filter(value => value && value !== 'none'); + return { title: field('title'), description: field('description'), order: Number(/order:\s*(\d+)/.exec(block)?.[1] ?? 99), arc42: arc42?.length ? arc42 : undefined }; }; function skillDocs(): GuideDoc[] { @@ -84,9 +103,11 @@ function skillDocs(): GuideDoc[] { const relative = posix(path.relative(dir, file)); const isEntry = relative === 'SKILL.md'; const index = linked.indexOf(relative); + const meta = frontmatter(text); return { path: skillRoute(file), title: /^# (.+)$/m.exec(text)?.[1].trim() ?? relative, - description: isEntry ? frontmatter(text).description : undefined, group: `/webcraft/rules/${skill}/`, + description: isEntry ? meta.description : undefined, arc42: meta.arc42, + group: meta.arc42 ? sectionPath(meta.arc42[0]) : `/webcraft/rules/${skill}/`, order: isEntry ? 0 : index >= 0 ? index + 1 : 500, source: repoPath(file), hasTitle: true, }; }).sort((a, b) => a.order - b.order || a.path.localeCompare(b.path)); @@ -98,8 +119,8 @@ function contentDocs(): GuideDoc[] { const relative = posix(path.relative(contentRoot, file)).replace(/\.mdx?$/, '').replace(/(^|\/)index$/, ''); const meta = frontmatter(readFileSync(file, 'utf8')); const group = contentGroups.find(item => relative === item.dir || relative.startsWith(`${item.dir}/`)); - return { path: relative ? `/webcraft/${relative}/` : '/webcraft/', title: meta.title ?? relative, description: meta.description, - group: group ? `/webcraft/${group.dir}/` : '/webcraft/', order: meta.order, source: repoPath(file), hasTitle: false }; + return { path: relative ? `/webcraft/${relative}/` : '/webcraft/', title: meta.title ?? relative, description: meta.description, arc42: meta.arc42, + group: meta.arc42 ? sectionPath(meta.arc42[0]) : group ? `/webcraft/${group.dir}/` : '/webcraft/', order: meta.order, source: repoPath(file), hasTitle: false }; }).sort((a, b) => a.order - b.order || a.title.localeCompare(b.title)); } @@ -164,7 +185,8 @@ export function guideContent(): Plugin { load(source) { if (source !== `\0${id}`) return undefined; const docs = siteDocuments(); - return `export const docs = ${JSON.stringify(docs)};\nexport const skillGroups = ${JSON.stringify(skillGroups)};\nexport const contentGroups = ${JSON.stringify(contentGroups)};`; + return `export const docs = ${JSON.stringify(docs)};\nexport const skillGroups = ${JSON.stringify(skillGroups)};\nexport const contentGroups = ${JSON.stringify(contentGroups)}; +export const architectureSections = ${JSON.stringify(architectureSections)};`; }, generateBundle() { const root = path.join(contentRoot, 'blog/posts'); diff --git a/site/content/app-shell/adaptive.mdx b/site/content/app-shell/adaptive.mdx index 95a1686..e22c69e 100644 --- a/site/content/app-shell/adaptive.mdx +++ b/site/content/app-shell/adaptive.mdx @@ -3,6 +3,7 @@ title: "적응형(휴대폰)" description: "하단 탭, 바텀시트, 전체 화면 상세, 뒤로가기" sidebar: order: 10 +arc42: "8.6" --- diff --git a/site/content/app-shell/astryx-notes.md b/site/content/app-shell/astryx-notes.md index 0509140..05fd9a3 100644 --- a/site/content/app-shell/astryx-notes.md +++ b/site/content/app-shell/astryx-notes.md @@ -3,6 +3,7 @@ title: "구현 메모: Astryx" description: "규칙을 Astryx와 TanStack으로 구현하는 방법" sidebar: order: 13 +arc42: "8.8" --- [앱 셸 개요](/app-shell/overview/)부터 정리한 화면 설계 규칙을 현재 기술 스택(Astryx 디자인 시스템, React, TanStack Router·Query)으로 구현할 때 어떤 부품과 훅을 쓰는지 대응합니다. 앞선 문서들은 특정 UI 라이브러리에 묶이지 않도록 셸, 머리 줄, 도구 자리, 본문 열 같은 역할로 규칙을 정의했습니다. Astryx와 TanStack에 맞춘 구현 방법은 이 페이지에만 모아 두며, 기술 스택을 바꾸면 앞선 규칙은 그대로 두고 이 페이지만 다시 씁니다. diff --git a/site/content/app-shell/choosing-presentation.mdx b/site/content/app-shell/choosing-presentation.mdx index 2577874..96ae561 100644 --- a/site/content/app-shell/choosing-presentation.mdx +++ b/site/content/app-shell/choosing-presentation.mdx @@ -3,6 +3,7 @@ title: "어떤 모습으로 열까" description: "팝오버·확인 창·짧은 양식·미리보기·마스킹·페이지 중 고르기" sidebar: order: 7 +arc42: "8.6" --- diff --git a/site/content/app-shell/collections.mdx b/site/content/app-shell/collections.mdx index 6bc7a5f..7104e20 100644 --- a/site/content/app-shell/collections.mdx +++ b/site/content/app-shell/collections.mdx @@ -3,6 +3,7 @@ title: "목록·표·보드" description: "무엇으로 보일지, 행의 구성, 그룹·개수·페이지" sidebar: order: 5 +arc42: "8.6" --- diff --git a/site/content/app-shell/content-width.mdx b/site/content/app-shell/content-width.mdx index 61433c8..ef23940 100644 --- a/site/content/app-shell/content-width.mdx +++ b/site/content/app-shell/content-width.mdx @@ -3,6 +3,7 @@ title: "콘텐츠 폭" description: "전체 폭 목록, 읽기 열, 설정 열, 상세 + 속성 열" sidebar: order: 4 +arc42: "8.6" --- diff --git a/site/content/app-shell/filters-and-display.mdx b/site/content/app-shell/filters-and-display.mdx index 984988e..1658956 100644 --- a/site/content/app-shell/filters-and-display.mdx +++ b/site/content/app-shell/filters-and-display.mdx @@ -3,6 +3,7 @@ title: "검색·필터·표시" description: "세 도구의 역할, 적용 칩, 주소에 남기기" sidebar: order: 6 +arc42: "8.7" --- diff --git a/site/content/app-shell/header-and-toolbar.mdx b/site/content/app-shell/header-and-toolbar.mdx index c541ff7..3de7db1 100644 --- a/site/content/app-shell/header-and-toolbar.mdx +++ b/site/content/app-shell/header-and-toolbar.mdx @@ -3,6 +3,7 @@ title: "머리 줄과 툴바" description: "경로·동작·뷰·도구의 자리와 순서" sidebar: order: 3 +arc42: "8.6" --- diff --git a/site/content/app-shell/overview.md b/site/content/app-shell/overview.md index 8eb6982..c698e72 100644 --- a/site/content/app-shell/overview.md +++ b/site/content/app-shell/overview.md @@ -3,6 +3,7 @@ title: "앱 셸 개요" description: "로그인 뒤 사이드바와 콘텐츠 영역으로 된 업무 도구의 규칙집" sidebar: order: 1 +arc42: "8.6, 5" --- 로그인 뒤 사이드바(탐색)와 콘텐츠 영역으로 이루어진 업무 도구(Linear·Plane 같은 SaaS 앱)를 만들거나 검토할 때 따르는 규칙집입니다. 개발자가 화면을 설계·검토할 때 판단 기준으로 삼고, AI 에이전트가 페이지를 만들기 전에 읽고 그대로 결정하도록 썼습니다. diff --git a/site/content/app-shell/peek.mdx b/site/content/app-shell/peek.mdx index 8ca2302..478f937 100644 --- a/site/content/app-shell/peek.mdx +++ b/site/content/app-shell/peek.mdx @@ -3,6 +3,7 @@ title: "미리보기 패널" description: "목록 옆에서 훑기, 주소에 남기는 방법, 행 클릭 규칙" sidebar: order: 9 +arc42: "8.6" --- diff --git a/site/content/app-shell/preferred-screens.mdx b/site/content/app-shell/preferred-screens.mdx index b084b87..f128022 100644 --- a/site/content/app-shell/preferred-screens.mdx +++ b/site/content/app-shell/preferred-screens.mdx @@ -3,6 +3,7 @@ title: "선호 화면" description: "규칙이 아닌 취향의 기준 화면" sidebar: order: 12 +arc42: "8.6" --- diff --git a/site/content/app-shell/route-masking.mdx b/site/content/app-shell/route-masking.mdx index 2aaa286..69817c9 100644 --- a/site/content/app-shell/route-masking.mdx +++ b/site/content/app-shell/route-masking.mdx @@ -3,6 +3,7 @@ title: "라우트 마스킹" description: "하나의 주소에 대화상자와 페이지 두 모습을 두는 이유와 계약" sidebar: order: 8 +arc42: "8.6, 6" --- diff --git a/site/content/app-shell/shell-and-sidebar.mdx b/site/content/app-shell/shell-and-sidebar.mdx index 98b9fd6..656c759 100644 --- a/site/content/app-shell/shell-and-sidebar.mdx +++ b/site/content/app-shell/shell-and-sidebar.mdx @@ -3,6 +3,7 @@ title: "셸과 사이드바" description: "셸의 구성, 사이드바 폭·접기·계층·하위 공간" sidebar: order: 2 +arc42: "8.6" --- diff --git a/site/content/app-shell/states-and-feedback.mdx b/site/content/app-shell/states-and-feedback.mdx index d9bea3d..dbb85fa 100644 --- a/site/content/app-shell/states-and-feedback.mdx +++ b/site/content/app-shell/states-and-feedback.mdx @@ -3,6 +3,7 @@ title: "상태와 피드백" description: "대기·빈 상태·오류·알림·저장·제출" sidebar: order: 11 +arc42: "8.7, 6" --- diff --git a/site/content/architecture/1.mdx b/site/content/architecture/1.mdx new file mode 100644 index 0000000..9e8bd41 --- /dev/null +++ b/site/content/architecture/1.mdx @@ -0,0 +1,14 @@ +--- +title: "1. 소개와 목표" +description: "웹 플랫폼의 목적과 개발 방식, 최우선으로 지키는 품질 목표를 다룹니다." +sidebar: + order: 1 +--- + +arc42의 1절은 시스템이 해결하려는 문제와 핵심 기능, 이해관계자가 기대하는 최우선 품질 목표를 다룹니다. Webcraft는 프론트엔드·디자인 시스템·백엔드·API·데이터베이스·아키텍처를 아우르는 웹 플랫폼 개발 지침으로, 사람과 에이전트가 같은 규칙과 절차로 일하도록 묶습니다. 공통으로 추구하는 품질 목표는 화면과 상호작용의 일관성, 레이아웃 밀림과 깜빡임이 없는 화면 전환, 변경 위험에 맞춰 실제로 확인하는 검증 가능성입니다. + +이 절에 배정된 별도의 지침 문서는 없습니다. 플러그인의 작업 방식과 연결 절차는 소개 메뉴의 [작업 방식](/rules/goraebap-mode/)과 [프로젝트 연결](/rules/manage-workflow/)에서 다루며, 개별 프로젝트의 아키텍처 정의서를 쓸 때는 제품의 고유 목적·핵심 사용자 흐름·품질 요구를 프로젝트 요구사항 문서에서 가져와 채웁니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/2.mdx b/site/content/architecture/2.mdx new file mode 100644 index 0000000..8ba5311 --- /dev/null +++ b/site/content/architecture/2.mdx @@ -0,0 +1,14 @@ +--- +title: "2. 제약" +description: "웹 플랫폼의 기본 기술 스택과 설계·구현 전제를 다룹니다." +sidebar: + order: 2 +--- + +arc42의 2절은 설계와 구현의 자유도를 제한하는 기술적·조직적 제약을 다룹니다. Webcraft는 프론트엔드에 React·TypeScript·Vite와 TanStack Router/Query, Feature-Sliced Design(FSD) 파일 구조를 기본으로 삼고, 화면 표현은 Astryx 디자인 시스템과 Solar 아이콘 위에서 조립합니다. 백엔드는 Java·Spring Boot·jOOQ 기반의 모듈형 모놀리스를, 데이터베이스는 관계형 DB와 Flyway 마이그레이션·jOOQ 코드 생성을 전제합니다. + +각 영역의 구체적인 버전, 패키지 루트, 실제 DB 엔진, 실행 환경과 배포 정책은 프로젝트가 정합니다. 기존 프로젝트가 다른 기술이나 디자인을 이미 채택했다면 그 선택과 `AGENTS.md`의 프로젝트 규칙을 우선하며, 기능 작업 중에 임의로 스택 전환을 끼워 넣지 않습니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/3.mdx b/site/content/architecture/3.mdx new file mode 100644 index 0000000..f8277d1 --- /dev/null +++ b/site/content/architecture/3.mdx @@ -0,0 +1,14 @@ +--- +title: "3. 맥락과 범위" +description: "공통 지침이 다루는 범위와 개별 프로젝트가 결정하는 경계를 다룹니다." +sidebar: + order: 3 +--- + +arc42의 3절은 시스템이 외부 사용자·외부 시스템과 주고받는 업무적·기술적 경계를 다룹니다. Webcraft에서는 플러그인이 제공하는 공통 개발 지침의 범위와 개별 프로젝트가 소유하는 결정의 경계를 이 자리에서 가릅니다. Webcraft는 여러 웹 제품에서 반복해 쓰는 구조·상태·계약·화면 규칙만 다루며, 프로젝트에 지침 사본을 두지 않고 사용자 범위에 설치한 플러그인 원본을 참조하게 합니다. + +제품의 업무 도메인, 단일·다중 조직 범위, 외부 연동 대상, 인프라·호스트·배포 권한은 프로젝트가 정합니다. 공통 지침과 다르게 결정한 예외는 각 저장소 `AGENTS.md`의 프로젝트 규칙 표에 적어 지침보다 우선 적용합니다. 이 절에 직접 배정된 지침 문서는 없으며, 연결 절차와 예외 작성법은 [프로젝트 연결](/rules/manage-workflow/)과 [프로젝트 규칙](/rules/manage-workflow/project-rules/)에서 확인합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/4.mdx b/site/content/architecture/4.mdx new file mode 100644 index 0000000..c1c17ec --- /dev/null +++ b/site/content/architecture/4.mdx @@ -0,0 +1,14 @@ +--- +title: "4. 해결 전략" +description: "모듈형 모놀리스 기본 구조, 상태 소유권 분리, 외부 연동 원칙을 다룹니다." +sidebar: + order: 4 +--- + +arc42의 4절은 시스템의 품질 목표와 제약을 달성하기 위한 핵심 설계 방향과 구조적 결정을 다룹니다. Webcraft는 필요한 모듈 경계를 갖춘 모듈형 모놀리스를 기본 출발점으로 삼고, 별도 서비스·큐·캐시·복제는 구체적인 요구와 운영 비용이 확인될 때만 도입합니다. 서버 상태·라우트·입력 초안·도메인 원본의 소유자를 분리해 같은 원본을 여러 곳에서 편집하고 맞추는 구조를 피하며, 외부 제공자 호출은 핵심 트랜잭션과 분리해 타임아웃·실패·재시도·멱등성을 정합니다. + +각 프로젝트는 자신의 핵심 사용자 흐름과 트래픽·가용성 요구에 맞춰 추가 인프라 도입 여부와 외부 연동 계약을 결정합니다. 되돌리기 어려운 기술 선택은 맥락·결정·대안을 프로젝트 기록에 남깁니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/5.mdx b/site/content/architecture/5.mdx new file mode 100644 index 0000000..a15f2a6 --- /dev/null +++ b/site/content/architecture/5.mdx @@ -0,0 +1,14 @@ +--- +title: "5. 구성 요소" +description: "프론트엔드 FSD 계층과 앱 셸, 백엔드 모듈과 내부 계층 구성을 다룹니다." +sidebar: + order: 5 +--- + +arc42의 5절은 시스템을 이루는 정적 구성 요소와 책임, 의존 방향을 다룹니다. Webcraft에서 프론트엔드는 Feature-Sliced Design(FSD)의 계층·슬라이스·공개 API 규칙으로 코드를 나누고, 화면 바깥 틀은 앱 셸 하나로 사이드바·페이지 머리 줄·휴대폰 하단 탭을 조립합니다. 백엔드는 단수 이름의 업무 모듈로 나누며, 각 모듈 안을 `application`·`domain`·`infrastructure` 계층으로 가르고 모듈 루트의 `Facade`·`Spi`·`Event`만 모듈 간 공개 계약으로 둡니다. + +어떤 업무 모듈과 프론트엔드 슬라이스를 둘지, 메뉴 공간과 하위 묶음을 어떻게 구성할지는 프로젝트의 도메인에 따라 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/6.mdx b/site/content/architecture/6.mdx new file mode 100644 index 0000000..09c2d37 --- /dev/null +++ b/site/content/architecture/6.mdx @@ -0,0 +1,14 @@ +--- +title: "6. 실행" +description: "화면 이동과 데이터 준비, 주소 있는 대화상자, 서버 요청의 실행 흐름을 다룹니다." +sidebar: + order: 6 +--- + +arc42의 6절은 주요 시나리오에서 구성 요소들이 실행 중에 상호작용하는 동적 흐름을 다룹니다. 프론트엔드는 링크에 포인터나 초점이 올 때 다음 화면의 데이터와 지연 로딩 코드를 미리 준비하고, 캐시가 있으면 즉시 그린 뒤 뒤에서 갱신하며, 대기가 150ms를 넘을 때만 콘텐츠 카드 위쪽 테두리에 진행 표시를 띄웁니다. 작성·수정 양식을 데스크톱 목록 위에서 열 때는 라우트 마스킹으로 목록 맥락을 유지한 채 양식의 주소를 노출하고, 백엔드에서는 요청이 Controller에서 피처별 Service로 들어가 읽기는 조회 포트로, 쓰기는 도메인 엔티티 복원·업무 메서드 호출·명시적 저장으로 흐릅니다. + +프로젝트는 개별 유스케이스의 트랜잭션 범위와 외부 후속 작업(영속 outbox 등), 화면별 검색 조건과 복귀 경로를 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/7.mdx b/site/content/architecture/7.mdx new file mode 100644 index 0000000..f099e56 --- /dev/null +++ b/site/content/architecture/7.mdx @@ -0,0 +1,14 @@ +--- +title: "7. 배치와 운영" +description: "스키마·애플리케이션 배포 순서와 데이터 이관, 백업·복구 검증 기준을 다룹니다." +sidebar: + order: 7 +--- + +arc42의 7절은 소프트웨어가 실행되는 인프라 환경과 배포·운영 방식을 다룹니다. Webcraft는 운영 변경을 할 때 배포 순서, 환경 설정, 기존 데이터 채우기·변환·제거 순서, 백업과 복구 수단을 미리 검토할 수 있는 형태로 정리하도록 정합니다. 스키마 변경은 빈 DB와 이전 버전의 비식별 사본에서 먼저 검증하고, 비밀값은 실행 환경의 비밀 저장 수단으로 분리하며 백업 생성과 실제 복구 확인을 구분합니다. + +실제 클라우드·온프레미스 인프라 구성, 호스트와 네트워크, 컨테이너·릴리스 태그 규칙, 배포 승인 권한은 프로젝트 정책으로 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-1.mdx b/site/content/architecture/8-1.mdx new file mode 100644 index 0000000..0eb9400 --- /dev/null +++ b/site/content/architecture/8-1.mdx @@ -0,0 +1,12 @@ +--- +title: "8.1. API와 모듈 계약" +description: "외부 HTTP 계약과 백엔드 모듈 간 공개 계약·조회·공유, 제품 플러그인 배포 기준을 다룹니다." +sidebar: + order: 9 +--- + +arc42 8절의 하위 절로, 클라이언트·외부 호출자와 만나는 HTTP 경계와 백엔드 내부 모듈 사이의 계약 규칙을 다룹니다. Webcraft는 서버를 계약의 원본으로 두어 OpenAPI와 생성 클라이언트 타입을 함께 맞추고, 상태 코드·`application/problem+json` 오류 응답·인증과 업로드 검증·피처별 `Facade`(`Param`/`Result`)와 `Spi`·교차 모듈 조회와 피처 간 코드 공유·사용자용 제품 플러그인 패키징 기준을 정합니다. 프로젝트는 자원 경로의 접두사와 식별자 형식, 업무 시간대, 숨긴 자원의 존재 노출 정책과 구체적인 도메인 계약을 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-2.mdx b/site/content/architecture/8-2.mdx new file mode 100644 index 0000000..1706ea0 --- /dev/null +++ b/site/content/architecture/8-2.mdx @@ -0,0 +1,12 @@ +--- +title: "8.2. 백엔드 코드" +description: "백엔드 계층 역할, 읽기와 쓰기 경로, 조회 포트, 도메인·서비스 오류 처리를 다룹니다." +sidebar: + order: 10 +--- + +arc42 8절의 하위 절로, 백엔드 모듈 안에서 도메인·서비스·저장소·조회 포트를 작성하는 공통 코드 규칙을 다룹니다. Webcraft는 피처별 `Service` 하나에 읽기와 쓰기를 함께 두되 읽기는 `Query` 포트와 jOOQ 구현으로, 쓰기는 순수 Java 도메인 엔티티의 업무 메서드와 명시적 `save`로 경로를 나누며, 도메인 규칙 위반(`DomainRuleViolation`)과 서비스 유스케이스 오류(`BusinessException`·`ErrorCode`)의 판정 책임을 분리합니다. 프로젝트는 패키지 루트와 실제 애그리거트·피처 구분, 정적 검사·포매터 도구를 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-3.mdx b/site/content/architecture/8-3.mdx new file mode 100644 index 0000000..aba163f --- /dev/null +++ b/site/content/architecture/8-3.mdx @@ -0,0 +1,12 @@ +--- +title: "8.3. 데이터와 마이그레이션" +description: "Flyway 스키마 변경과 데이터 이관, jOOQ 코드 생성과 마이그레이션 검증을 다룹니다." +sidebar: + order: 11 +--- + +arc42 8절의 하위 절로, 데이터베이스 스키마를 변경하고 기존 데이터를 이관할 때 지키는 공통 절차를 다룹니다. Webcraft는 공유 환경에 적용된 Flyway 마이그레이션을 고치지 않고 새 버전을 추가하며, 기존 행의 채우기·변환·제거 순서 설계, jOOQ 생성 코드 동기화, 빈 DB와 비식별 검증 사본에서의 사전 검증을 정합니다. 프로젝트는 사용할 DB 엔진과 버전, 코드 생성 명령, 운영 데이터 삭제·변환의 승인 범위를 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-4.mdx b/site/content/architecture/8-4.mdx new file mode 100644 index 0000000..19418f4 --- /dev/null +++ b/site/content/architecture/8-4.mdx @@ -0,0 +1,12 @@ +--- +title: "8.4. 프론트 코드와 상태" +description: "컴포넌트·훅 작성 규칙과 서버 캐시·URL·초안 상태 소유권, 화면 전환 제어를 다룹니다." +sidebar: + order: 12 +--- + +arc42 8절의 하위 절로, 프론트엔드 컴포넌트·훅 작성과 비동기 데이터·라우트·초안 상태의 흐름을 다룹니다. Webcraft는 서버 데이터는 TanStack Query, 확정된 필터·정렬·페이지는 검증한 URL, 입력 초안은 로컬 상태나 라우터 위의 초안 저장소가 소유하도록 나누고, 파생값 state 복사 금지와 라우트 loader·프리페치·캐시 수명 기준을 정합니다. 프로젝트는 라우트 경로와 API 엔드포인트, 연속 저장·충돌 해결의 세부 정책을 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-5.mdx b/site/content/architecture/8-5.mdx new file mode 100644 index 0000000..b2e411b --- /dev/null +++ b/site/content/architecture/8-5.mdx @@ -0,0 +1,12 @@ +--- +title: "8.5. 화면 기초" +description: "시각 위계, 테마와 색상, 글자 크기, 간격과 분기점, 면 단계, 아이콘, 모션 규칙을 다룹니다." +sidebar: + order: 13 +--- + +arc42 8절의 하위 절로, 모든 화면의 바탕이 되는 시각 위계와 디자인 토큰, 표현 규칙을 다룹니다. Webcraft는 덜 중요한 요소를 누그러뜨려 위계를 세우는 원칙 아래 라이트·다크 기준 색과 4단계 면·2단계 경계선, 업무 화면의 4단계 글자 크기와 리치 본문(16px·줄 높이 1.7), `64rem` 단일 반응형 분기점과 모바일 터치 크기(44px 이상), Solar 아이콘 매핑(기본 Linear·선택 Bold Duotone), `prefers-reduced-motion`을 지키는 모션 시간을 정합니다. 프로젝트는 고유 브랜드 디자인이나 별도 큰 화면 배율이 필요할 때 프로젝트 규칙으로 조정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-6.mdx b/site/content/architecture/8-6.mdx new file mode 100644 index 0000000..5e4fb2e --- /dev/null +++ b/site/content/architecture/8-6.mdx @@ -0,0 +1,12 @@ +--- +title: "8.6. 화면 배치와 탐색" +description: "앱 셸과 사이드바, 페이지 머리·툴바·목록·상세·설정 배치, 대화상자와 패널, 적응형 탐색을 다룹니다." +sidebar: + order: 14 +--- + +arc42 8절의 하위 절로, 앱 바깥 틀부터 페이지 안의 구역 배치, 대화상자·패널로 여는 탐색 방식과 휴대폰 적응 규칙을 다룹니다. Webcraft는 데스크톱 사이드바(기본 340px, Inset·Split 배치)와 휴대폰 하단 탭의 전환, 페이지 머리 줄·배너·툴바·본문(목록·45rem 상세와 설정)의 고정 배치, 공통 다이얼로그(`AppDialog`), 목록 옆 미리보기 패널(`?peek=`)과 목록 위 라우트 마스킹 대화상자(`?panel=`)의 주소·복귀 계약을 정합니다. 프로젝트는 메뉴 트리 구성과 각 목록의 성격(처리 목록·작업 목록), 상세 속성 항목을 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-7.mdx b/site/content/architecture/8-7.mdx new file mode 100644 index 0000000..9169aa8 --- /dev/null +++ b/site/content/architecture/8-7.mdx @@ -0,0 +1,12 @@ +--- +title: "8.7. 데이터 상태와 입력" +description: "로딩·빈 상태·오류 피드백, 상호작용 표면과 단축키, 검색·필터·표시 도구, 생성 양식과 화면 문구를 다룹니다." +sidebar: + order: 15 +--- + +arc42 8절의 하위 절로, 데이터 대기·빈 결과·오류 상태의 피드백과 사용자의 입력·검색·작성 상호작용 규칙을 다룹니다. Webcraft는 첫 방문 덮개와 화면 전환 중 진행 표시·교차 페이드, 대기·실패·404·0건의 상태 화면 순서와 오류 알림 자리(칸 곁·배너·되돌리기 토스트), 상호작용 표면 선택과 키보드 단축키, 목록의 검색·필터·표시 도구, 제목·본문·속성 알약으로 이루어진 생성 양식과 초안 보존, 화면 문구 작성과 UI 검증 기준을 정합니다. 프로젝트는 실제 필터 속성·선택지 한도, 본문 편집기의 명시·자동 저장 정책과 활동 영역의 댓글 기능을 정합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-8.mdx b/site/content/architecture/8-8.mdx new file mode 100644 index 0000000..2e4728a --- /dev/null +++ b/site/content/architecture/8-8.mdx @@ -0,0 +1,12 @@ +--- +title: "8.8. UI 부품 사용" +description: "Astryx 기본 부품과 키트 조합 부품을 고르고 채택하는 규칙과 작업 절차를 다룹니다." +sidebar: + order: 16 +--- + +arc42 8절의 하위 절로, Astryx 기본 부품(Primitives)과 여러 부품을 묶은 조합 부품(Composites)을 고르고 프로젝트에 채택하는 규칙을 다룹니다. Webcraft는 버튼·라벨·아바타·입력의 변형과 쓰임, 팝오버↔바텀시트·검색·필터·속성 알약·활동 피드·순서 바꾸기·파일 올리기·본문 칸의 조합 책임, Astryx CLI 조회와 스타일 변경 순서, workspace 레퍼런스 키트에서 필요한 파일만 프로젝트 소유 코드로 옮기는 절차를 정합니다. 프로젝트는 자기 도메인 전용 조합과 실제 API·라우터·저장 계약을 연결하며, 규칙에 따라 만든 부품 코드와 조작 가능한 실행 견본은 사이트의 **UI 키트** 메뉴에서 확인합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8-9.mdx b/site/content/architecture/8-9.mdx new file mode 100644 index 0000000..fe3deca --- /dev/null +++ b/site/content/architecture/8-9.mdx @@ -0,0 +1,12 @@ +--- +title: "8.9. 검증" +description: "화면·전환·서버·API·스키마·문서 변경에 맞춰 수행할 검증 기준을 다룹니다." +sidebar: + order: 17 +--- + +arc42 8절의 하위 절로, 코드나 문서를 바꿨을 때 변경 종류와 위험에 맞춰 확인해야 할 검증 기준을 다룹니다. Webcraft는 화면·반응형·서버 로직·API 계약·스키마·스킬 문서별 필수 확인 항목과, 화면 전환·캐시·지연 로딩 변경 시 주요 이동 경로의 레이아웃 이동 합(`layout-shift` 0.01 이하)·재방문 진행 표시 미노출·`aria-busy` 해제 대기를 재는 Playwright 점검 절차를 정합니다. 프로젝트는 실제 검사 스크립트와 CI 명령, 개발용 로그인 경로를 정하며, 완료 보고에서는 수행한 검증과 확인하지 못한 범위를 구분합니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/8.mdx b/site/content/architecture/8.mdx new file mode 100644 index 0000000..85b9300 --- /dev/null +++ b/site/content/architecture/8.mdx @@ -0,0 +1,14 @@ +--- +title: "8. 횡단 관심사" +description: "여러 모듈과 화면에 걸쳐 같은 방식으로 지키는 계약·코드·화면·검증 규칙을 다룹니다." +sidebar: + order: 8 +--- + +arc42의 8절은 특정 모듈 하나에 머물지 않고 여러 구성 요소에 걸쳐 일관되게 적용하는 공통 규칙과 해법을 다룹니다. Webcraft의 상세 지침과 화면 해설은 대부분 이 절에 속하며, 메뉴를 백엔드·프론트엔드로 먼저 가르지 않고 8.1부터 8.9까지의 아키텍처 주제로 묶습니다. + +API와 모듈 계약(8.1), 백엔드 코드(8.2), 데이터와 마이그레이션(8.3)은 서버와 데이터 경계의 규칙을 다루고, 프론트 코드와 상태(8.4), 화면 기초(8.5), 화면 배치와 탐색(8.6), 데이터 상태와 입력(8.7), UI 부품 사용(8.8)은 클라이언트 코드와 화면 표현을 다룹니다. 변경에 맞는 확인 절차는 검증(8.9)에 모으고, 프로젝트마다 다르게 적용하는 예외는 `AGENTS.md`의 프로젝트 규칙 표에 적습니다. + +## 이 절의 지침 + + diff --git a/site/content/architecture/9.mdx b/site/content/architecture/9.mdx new file mode 100644 index 0000000..0eccc9a --- /dev/null +++ b/site/content/architecture/9.mdx @@ -0,0 +1,25 @@ +--- +title: "9. 아키텍처 결정" +description: "Webcraft 지침과 키트를 바꾸며 내린 주요 아키텍처 결정과 경위 기록을 다룹니다." +sidebar: + order: 18 +--- + +arc42의 9절은 시스템에 영향을 준 중요한 아키텍처 결정과 그 배경, 기각한 대안을 기록합니다. Webcraft에서는 규칙 절 본문에 결정 날짜나 과거 이력을 섞지 않고, 지침을 바꾼 결정과 긴 경위는 각 스킬의 `notes.md`(현재는 디자인 시스템의 지침 개선 기록)에 모읍니다. 개별 프로젝트에서 내린 되돌리기 어려운 기술 선택과 지침 예외의 이유는 해당 프로젝트의 기록과 `AGENTS.md` 프로젝트 규칙 표에 남깁니다. + +최근 Webcraft와 레퍼런스 키트에서 내린 주요 결정은 다음과 같습니다. + +| 날짜 | 결정 | 이유 | +| --- | --- | --- | +| 2026-11-05 | 반응형 분기점·셸 배치 전환에서도 페이지의 `Card` 부모 요소를 유지 | `Card`와 `VStack` 사이에서 부모 요소 종류가 바뀌면 페이지가 다시 마운트되어 작성 중인 초안이 사라지기 때문입니다. | +| 2026-11-07 | Storybook을 걷어내고 가이드 문서 안에 실제 키트 견본을 iframe으로 배치 | 정적 캡처는 직접 조작할 수 없고 키트가 바뀔 때마다 다시 떠야 하며, 별도 Storybook은 가이드 테마 선택과 갈라지기 때문입니다. | +| 2026-11-08 | 앱 코드 로드 전 첫 화면 규칙으로 업무 앱의 첫 방문 덮개(`BootCover`)와 공개 문서의 SSG를 구분 | 스크립트와 테마 CSS가 오기 전에 빈 화면이나 테마 없는 화면이 깜빡이는 현상을 막기 위해서입니다. | +| 2026-11-08 | 가이드 사이트를 Astro에서 키트와 같은 React·Vite·TanStack Router SPA로 전환 | 클라이언트 라우팅 시 테마 스타일 유실과 셸 재마운트를 막기 위한 우회를 없애고, 키트와 같은 전환 규칙을 그대로 쓰기 위해서입니다. | +| 2026-11-09 (0.8.0) | 화면 이동에서 본문을 가리는 막 대신 진행 표시와 교차 페이드 사용 | 스켈레톤·영역별 덮개·불투명 막은 본문 높이와 맞지 않거나 재방문에서도 화면을 가리므로, 캐시는 즉시 그리고 150ms가 넘는 대기만 카드 위쪽 진행 표시로 알립니다. | +| 2026-11-09 (0.8.0) | 리치 본문(본문 칸·상세 본문)을 데스크톱·휴대폰 모두 16px, 줄 높이 1.7로 설정 | 조밀한 목록·도구용 본문 토큰(13px·15px)과 긴 글을 읽고 쓰는 영역의 가독성 요구를 분리하고 작성 칸과 상세 본문의 크기를 맞추기 위해서입니다. | +| 2026-11-09 (0.8.0) | 공통 지침 제안을 Webcraft 공개 저장소 이슈로 일원화 | 프로젝트에 지침 사본을 두지 않고 `AGENTS.md`의 프로젝트 규칙 표와 원본 저장소 이슈로 예외와 회수를 관리하기 위해서입니다. | +| 2026-11-09 (0.9.0) | 가이드 메뉴를 arc42(1~9절) 기반으로 다시 묶고 지침마다 `arc42` 번호를 부여 | 지침을 읽는 사람과 프로젝트 아키텍처 정의서를 쓰는 에이전트가 같은 절 구조에서 규칙과 화면 해설을 찾고 연결하게 하기 위해서입니다. | + +## 이 절의 지침 + + diff --git a/site/content/common/icons.mdx b/site/content/common/icons.mdx index 889026d..6d7ffc6 100644 --- a/site/content/common/icons.mdx +++ b/site/content/common/icons.mdx @@ -3,6 +3,7 @@ title: "아이콘" description: "한 세트, 의미 이름, 선과 채움으로 상태 표현" sidebar: order: 2 +arc42: "8.5" --- diff --git a/site/content/common/visual-hierarchy.mdx b/site/content/common/visual-hierarchy.mdx index 1adb334..307abbb 100644 --- a/site/content/common/visual-hierarchy.mdx +++ b/site/content/common/visual-hierarchy.mdx @@ -3,6 +3,7 @@ title: "시각 위계" description: "덜 중요한 것을 누그러뜨려 만드는 위계, 간격 단계, 상자 줄이기" sidebar: order: 1 +arc42: "8.5" --- diff --git a/site/content/index.mdx b/site/content/index.mdx index 5b020a3..ed3c097 100644 --- a/site/content/index.mdx +++ b/site/content/index.mdx @@ -5,11 +5,11 @@ description: Webcraft 플러그인의 개발 지침과 화면 해설·견본을 Webcraft 플러그인의 개발 지침을 사람이 읽도록 모은 사이트입니다. 지침 문서는 플러그인의 스킬 Markdown을 그대로 보여 주므로 플러그인을 고치면 사이트도 바뀝니다. 화면 해설은 그 규칙을 사람이 읽도록 풀어 쓴 글이며, 둘이 다르면 스킬이 맞습니다. -메뉴는 문서 종류가 아니라 영역으로 묶어 화면을 만드는 사람이 지침·해설·견본을 세 군데로 오가지 않게 했습니다. +규칙은 아키텍처에서 찾고, 규칙대로 만든 부품과 실행 견본은 UI 키트에서 찾습니다. -- 공통에는 [작업 방식](/rules/goraebap-mode/), [아키텍처](/rules/architecture/), [프로젝트 연결](/rules/manage-workflow/)이 있습니다. -- 클라이언트에는 [프론트엔드](/rules/frontend/), [디자인 시스템](/rules/design-system/), 화면 해설인 [화면 공통](/common/visual-hierarchy/)과 [앱 셸](/app-shell/overview/), 견본 묶음 Foundations·Primitives·Composites·Layouts·Patterns·[Playground](/catalog/playground/)가 있습니다. -- 서버에는 [백엔드](/rules/backend/), [API](/rules/api/), [데이터베이스](/rules/database/)가 있습니다. +- 소개에는 이 안내와 [작업 방식](/rules/goraebap-mode/), [프로젝트 연결](/rules/manage-workflow/)이 있습니다. +- 아키텍처에는 [arc42 1~9절](/architecture/1/) 순서로 개발 지침과 화면 해설을 절마다 모아 두었습니다. +- UI 키트에는 Foundations·Primitives·Composites·Layouts·Patterns 부품과 기능 단위 실행 견본인 [Playground](/catalog/playground/)가 있습니다. ## 규칙의 세 가지 표시 diff --git a/site/src/app/providers.tsx b/site/src/app/providers.tsx index ab25194..13fb0fd 100644 --- a/site/src/app/providers.tsx +++ b/site/src/app/providers.tsx @@ -3,6 +3,7 @@ import { MDXProvider } from '@mdx-js/react'; import type { ComponentPropsWithRef } from 'react'; import { GuideShell } from '@/widgets/site-shell'; import { Sample, SampleGroup, Source } from '@/widgets/samples'; +import { SectionDocs } from '@/widgets/architecture'; import { Diagram } from '@/shared/markdown/Diagram'; import { RouterLink } from '@/shared/ui/patterns/routing/RouterLink'; import styles from '@/shared/styles/prose.module.css'; @@ -16,6 +17,6 @@ function Table(props: ComponentPropsWithRef<'table'>) { return
; } -const mdxComponents = { a: DocLink, table: Table, div: Diagram, Sample, SampleGroup, Source }; +const mdxComponents = { a: DocLink, table: Table, div: Diagram, Sample, SampleGroup, Source, SectionDocs }; export function SiteApp() { return ; } diff --git a/site/src/entities/document/index.ts b/site/src/entities/document/index.ts index e0045b4..8217c8b 100644 --- a/site/src/entities/document/index.ts +++ b/site/src/entities/document/index.ts @@ -1,5 +1,5 @@ import type { ComponentType } from 'react'; -import { contentGroups, docs, skillGroups } from 'virtual:guide-docs'; +import { architectureSections, contentGroups, docs, skillGroups } from 'virtual:guide-docs'; import type { GuideDoc } from '../../../content-plugin'; export type { GuideDoc }; @@ -17,7 +17,8 @@ export async function loadDoc(doc: GuideDoc) { export const docAt = (path: string) => docs.find(doc => doc.path === path); const label = (group: string) => group === '/blog/' ? 'Blog' : [...skillGroups.map(item => ({ path: `/webcraft/rules/${item.skill}/`, label: item.label })), - ...contentGroups.map(item => ({ path: `/webcraft/${item.dir}/`, label: item.label }))].find(item => item.path === group)?.label ?? ''; + ...contentGroups.map(item => ({ path: `/webcraft/${item.dir}/`, label: item.label })), + ...architectureSections.map(item => ({ path: `/webcraft/architecture/${item.id.replace('.', '-')}/`, label: `${item.id}. ${item.label}` }))].find(item => item.path === group)?.label ?? ''; export const groupLabel = label; /** 묶음 주소(예: /app-shell/)의 첫 문서. 지침은 묶음 주소가 곧 그 지침의 첫 장이다. */ @@ -25,3 +26,7 @@ export const firstOf = (group: string) => group === '/blog/' ? undefined : docs. /** 문서 찾기 목록. */ export const searchEntries = docs.map(doc => ({ id: doc.path, label: doc.title, group: label(doc.group), description: doc.description })); + +/** 아키텍처 절(arc42) 하나에 걸린 문서들: 그 절을 첫 값으로 가진 것과 다른 값으로 함께 가진 것. 개요 페이지 자신은 뺀다. */ +export const docsOfSection = (id: string) => docs.filter(doc => doc.arc42?.includes(id)); +export { architectureSections }; diff --git a/site/src/env.d.ts b/site/src/env.d.ts index b75d46c..ccc6095 100644 --- a/site/src/env.d.ts +++ b/site/src/env.d.ts @@ -4,6 +4,7 @@ declare module 'virtual:guide-docs' { export const docs: import('../content-plugin').GuideDoc[]; export const skillGroups: readonly { skill: string; label: string; icon: string }[]; export const contentGroups: readonly { dir: string; label: string; icon: string }[]; + export const architectureSections: readonly { id: string; label: string; icon?: string }[]; } declare module '*.md' { diff --git a/site/src/widgets/architecture/SectionDocs.tsx b/site/src/widgets/architecture/SectionDocs.tsx new file mode 100644 index 0000000..66ab1e8 --- /dev/null +++ b/site/src/widgets/architecture/SectionDocs.tsx @@ -0,0 +1,31 @@ +import { architectureSections, docsOfSection } from '@/entities/document'; +import { RouterLink } from '@/shared/ui/patterns/routing/RouterLink'; + +const where = (source: string) => source.startsWith('plugins/') ? '지침' : '해설'; + +function DocList({ id }: { id: string }) { + const found = docsOfSection(id).filter(doc => !doc.path.startsWith('/webcraft/architecture/')) + .sort((a, b) => Number(b.source.startsWith('plugins/')) - Number(a.source.startsWith('plugins/'))); + if (!found.length) return

이 절을 원천으로 삼는 지침 문서가 없습니다. 위 개요가 이 절의 내용 전부입니다.

; + return
    + {found.map(doc =>
  • + {doc.title} ({where(doc.source)}{doc.arc42?.[0] === id ? '' : `, 주로 ${doc.arc42?.[0]}절`}) + {doc.description ? ` — ${doc.description}` : null} +
  • )} +
; +} + +/** + * 아키텍처 절 개요 페이지의 문서 목록: 프론트매터 arc42에 그 절을 가진 지침과 화면 해설. 하위 절이 있으면(8절) 하위 절마다 + * 제목과 목록을 둔다. 목록은 빌드 때의 문서 목록에서 만들므로 문서에 arc42를 붙이면 따로 고치지 않아도 나타난다. + */ +export function SectionDocs({ section }: { section: string }) { + const subsections = architectureSections.filter(item => item.id.startsWith(`${section}.`)); + if (!subsections.length) return ; + return <> + {subsections.map(item =>
+

{item.id}. {item.label}

+ +
)} + ; +} diff --git a/site/src/widgets/architecture/index.ts b/site/src/widgets/architecture/index.ts new file mode 100644 index 0000000..d691c66 --- /dev/null +++ b/site/src/widgets/architecture/index.ts @@ -0,0 +1 @@ +export { SectionDocs } from './SectionDocs'; diff --git a/site/src/widgets/site-shell/navigation.ts b/site/src/widgets/site-shell/navigation.ts index 60f0795..78d265c 100644 --- a/site/src/widgets/site-shell/navigation.ts +++ b/site/src/widgets/site-shell/navigation.ts @@ -1,4 +1,4 @@ -import { contentGroups, skillGroups } from 'virtual:guide-docs'; +import { architectureSections, contentGroups, skillGroups } from 'virtual:guide-docs'; import { docs } from '@/entities/document'; import type { IconName } from '@/shared/ui/foundations/icons/solar-icon'; import type { NavEntry, NavSpace } from '@/shared/ui/layouts/app/nav'; @@ -12,17 +12,29 @@ const content = (dirs: string[]) => contentGroups.filter(item => dirs.some(dir = const rules = (skills: string[]) => skillGroups.filter(item => skills.includes(item.skill)) .map(item => ({ path: `/webcraft/rules/${item.skill}/`, label: item.label, icon: item.icon })); +const sectionPath = (id: string) => `/webcraft/architecture/${id.replace('.', '-')}/`; +/** 지침이 먼저, 화면 해설이 뒤에. 같은 종류 안에서는 문서 목록의 순서를 지킨다. */ +const isRule = (source: string) => source.startsWith('plugins/'); +/** 절에 놓이는 문서: 프론트매터 arc42의 첫 값이 그 절인 것. */ +const docsIn = (id: string): NavEntry[] => docs.filter(doc => doc.arc42?.[0] === id) + .sort((a, b) => Number(isRule(b.source)) - Number(isRule(a.source))) + .map(doc => ({ path: doc.path, label: doc.title })); +const sectionEntry = (section: (typeof architectureSections)[number]): NavEntry => { + const subsections = architectureSections.filter(item => item.id.startsWith(`${section.id}.`)); + return { path: sectionPath(section.id), label: `${section.id}. ${section.label}`, icon: section.icon as IconName | undefined, + children: subsections.length ? subsections.map(sectionEntry) : docsIn(section.id) }; +}; + /** - * 메뉴: 소개 → 공통(작업 방식·구조·연결) → 클라이언트(지침·화면 해설·견본) → 서버(지침). 문서 종류가 아니라 영역으로 묶어 - * 화면을 만드는 사람이 지침·해설·견본을 한 묶음 안에서 오간다. + * 메뉴: 소개(작업 방식·프로젝트 연결) → 아키텍처(arc42 절, 지침과 해설을 절마다) → UI 키트(부품과 견본). 규칙은 아키텍처의 + * 절에서 찾고, 규칙대로 만든 부품과 견본은 UI 키트에서 본다. 백엔드·프론트를 따로 나누지 않고 8절의 하위 절로 가른다. */ export const guideSpace: NavSpace = { id: 'webcraft', title: 'Webcraft', sections: [ - { title: '소개', isHeaderHidden: true, entries: [{ path: '/webcraft/', label: '소개', icon: 'home' }] }, - { title: '공통', entries: entriesOf(rules(['goraebap-mode', 'architecture', 'manage-workflow'])) }, - { title: '클라이언트', entries: [...entriesOf(rules(['frontend', 'design-system'])), ...entriesOf(content(['common', 'app-shell', 'catalog']))] }, - { title: '서버', entries: entriesOf(rules(['backend', 'api', 'database'])) }, + { title: '소개', isHeaderHidden: true, entries: [{ path: '/webcraft/', label: '소개', icon: 'home' }, ...entriesOf(rules(['goraebap-mode', 'manage-workflow']))] }, + { title: '아키텍처', entries: architectureSections.filter(section => !section.id.includes('.')).map(sectionEntry) }, + { title: 'UI 키트', entries: entriesOf(content(['catalog'])) }, ], };