Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
064b62c
fix: 팀공유/원본대화 모달에서 wide 코드블럭이 모달을 밀지 않도록 min-w-0 처리
sabit1997 Sep 21, 2026
2f0cf58
fix: 모바일 가로 넘침 이중 방어 (body overflow-x-hidden + MarkdownAnswer min-w-0)
sabit1997 Sep 21, 2026
0dfb9c5
fix: 채팅 뷰 assistant 메시지 wide 코드블럭이 뷰포트 밀지 않도록 min-w-0
sabit1997 Sep 21, 2026
8c7f06f
Merge pull request #52 from Qode-4/fix/modal-code-block-horizontal-sc…
sabit1997 Sep 21, 2026
8d9ac32
chore: eslint가 로컬 빌드 산출물(storybook-static, .vite, artifacts)을 검사하지 않도…
sabit1997 Sep 25, 2026
7a46bf1
docs: AGENTS.md 테스트 러너 설명을 실제(vitest)와 맞춤
sabit1997 Sep 25, 2026
4713f53
Merge branch 'chore/eslint-ignore-build-output' into develop
sabit1997 Sep 25, 2026
11981cf
docs: 디자인 시스템 Quire 정체성 문서(SYSTEM.md) 초안 추가
sabit1997 Sep 25, 2026
733e041
docs: Quire 파운데이션(Phase B) 결정 기록 초안 추가
sabit1997 Sep 25, 2026
790a91d
docs: 파운데이션 결정 기록에 오렌지 선·기본값 차단·대형 제목 결정 반영
sabit1997 Sep 25, 2026
cbc8118
Merge branch 'docs/system-identity' into develop
sabit1997 Sep 25, 2026
3d95d39
refactor: 색 토큰을 raw/semantic 2층으로 재편하고 fg-*/line-* 이름으로 일괄 치환
sabit1997 Sep 25, 2026
2952b4a
refactor: 타이포 스케일을 역할 이름 7단계(micro~display)로 통합하고 최소 10px 적용
sabit1997 Sep 25, 2026
4d29b61
refactor: radius 를 역할 이름(inline/control/card/panel/shell)으로, 그림자를 sha…
sabit1997 Sep 25, 2026
d2f3055
feat: 토큰 대비 매트릭스 생성·비토큰 클래스 검출 스크립트(yarn tokens:check) 추가
sabit1997 Sep 25, 2026
086f0f1
docs: DESIGN.md·foundations.md 를 새 토큰 체계 기준으로 갱신
sabit1997 Sep 25, 2026
4d5ee0a
Merge remote-tracking branch 'origin/develop' into refactor/design-to…
sabit1997 Sep 25, 2026
9340bac
Merge branch 'develop' of https://github.com/Qode-4/Qode-Fe into develop
sabit1997 Sep 25, 2026
be6f023
Merge remote-tracking branch 'origin/develop' into refactor/design-to…
sabit1997 Sep 25, 2026
6a4e961
Merge pull request #53 from Qode-4/refactor/design-tokens
sabit1997 Sep 25, 2026
0157a1f
chore: 생성 산출물(contrast-matrix, storybook-static)을 prettier·git 대상에서 제외
sabit1997 Sep 25, 2026
932b024
feat: className 병합 유틸 cn()(clsx + tailwind-merge) 추가
sabit1997 Sep 25, 2026
3fe5b31
refactor: ui 컴포넌트 className 조립을 cn() 으로 통일
sabit1997 Sep 25, 2026
5530208
feat: 참조 소스 공용 컴포넌트 SourceList 추가 — 같은 파일을 한 줄로 묶어 표시
sabit1997 Sep 25, 2026
d558572
docs: Phase C 컴포넌트 인벤토리·API 컨벤션 기록, DESIGN.md 참조 소스 절을 SourceList 기준으…
sabit1997 Sep 25, 2026
27721ef
fix: 답변·요약 본문의 참조 표기를 SourceList 로 옮겨 중복 표시 제거
sabit1997 Sep 25, 2026
67cfaa0
fix: SourceList 를 파일명·폴더·범위 3칸 표로 바꿔 넓은 화면에서 범위가 파일명 가까이 붙도록
sabit1997 Sep 25, 2026
2b5a642
revert: SourceList 3칸 표 배치를 되돌려 줄 범위를 다시 오른쪽 끝에 정렬
sabit1997 Sep 25, 2026
40c003d
Merge pull request #54 from Qode-4/refactor/quire-components
sabit1997 Sep 25, 2026
95efe33
refactor: IconButton 크기를 variant(ghost·outline) × size(sm·md) 로 정리
sabit1997 Sep 25, 2026
12d7160
feat: Link hover 시 밑줄이 진해지도록 하고 키보드 포커스 링 추가
sabit1997 Sep 25, 2026
cd3b8c0
feat: TextField 에 size(sm 40px·md 44px) 추가 — 모달 안 입력에 쓸 수 있도록
sabit1997 Sep 25, 2026
d604a00
feat: ChatComposer 에 항상 보이는 상태 줄(status) 추가 — 동기화 진행률을 placeholder 대신 표시
sabit1997 Sep 25, 2026
905ed73
docs: Button·IconButton·Link·TextField·ChatComposer 상단에 사용 규칙(Use/Don…
sabit1997 Sep 25, 2026
dd52da6
docs: 빠져 있던 ChatItemMenu·Toast 스토리 추가
sabit1997 Sep 26, 2026
c1071b4
refactor: OverlayModal 폭 8가지를 size(sm 440·md 520·lg 640·xl 720)로 통일
sabit1997 Sep 26, 2026
17e3205
fix: InlineAlert 안내·성공은 role=status 로 — 오류만 스크린리더가 즉시 끼어들어 읽도록
sabit1997 Sep 26, 2026
696459f
fix: 콘텐츠 위에 뜨는 Toast 에 shadow-overlay 적용(떠서 가리는 요소 규칙)
sabit1997 Sep 26, 2026
20c75e4
refactor: ChatItemMenu ⋯ 버튼을 IconButton(ghost)으로 내장하고 크기는 triggerSize 로
sabit1997 Sep 26, 2026
6e76b5c
docs: OverlayModal·InlineAlert·Toast·ChatItemMenu 상단에 사용 규칙 JSDoc 추가
sabit1997 Sep 26, 2026
12a8879
docs: 빠져 있던 MarkdownAnswer·CodeBlock 스토리 추가
sabit1997 Sep 26, 2026
d56a019
fix: 빈 화면 추천 질문을 누를 수 없는 예시 목록으로 바꾸고 '새 프로젝트 만들기'를 주 버튼으로
sabit1997 Sep 26, 2026
5a12b78
refactor: Icon 숫자 크기(size={16})를 같은 값의 size="sm" 으로
sabit1997 Sep 26, 2026
4679b58
docs: MarkdownAnswer·CodeBlock·Icon 사용 규칙 JSDoc 추가
sabit1997 Sep 26, 2026
d72909c
fix: 사이드바 로고·AI 아바타 이미지를 favicon.ico 대신 번들된 qode_logo_small.png 로
sabit1997 Sep 26, 2026
22e2c4a
refactor: Logo 가 심볼·글자 조합까지 그리도록(variant lockup·mark·wordmark × size …
sabit1997 Sep 26, 2026
0f84b2f
fix: ProjectSwitcher 키보드 동작 — 열면 현재 프로젝트 포커스, ↑↓·Home·End 이동, Esc 로 닫…
sabit1997 Sep 26, 2026
5bfe365
docs: ToastProvider 사용 규칙 JSDoc 추가
sabit1997 Sep 26, 2026
4523292
docs: Phase C 2차 결과를 components.md·DESIGN.md 에 반영
sabit1997 Sep 26, 2026
7c1b4d2
chore: 쓰지 않는 icon-192·512.png 삭제와 index.html·webmanifest 참조 정리
sabit1997 Sep 26, 2026
5ad1acc
Merge pull request #55 from Qode-4/refactor/quire-component-rules
sabit1997 Sep 26, 2026
8008b8e
chore: 사용처 없는 CreateChatModal 과 스토리 삭제
sabit1997 Sep 26, 2026
dd76d3a
fix: TextField 오류 테두리를 danger 로 — 연한 오류 배경 위 1.61:1 → 5.18:1 (입력 경계 3…
sabit1997 Sep 26, 2026
66768c1
refactor: 모달·설정 폼 입력창 8개를 TextField size=sm 으로 흡수
sabit1997 Sep 26, 2026
314dd2a
refactor: 흩어진 원형 아바타 10곳을 ui/Avatar(kind user·ai × size × tone)로 추출
sabit1997 Sep 26, 2026
297d1d0
feat: 아이콘 레지스트리에 More_vertical_light(⋮)·Menu_light(☰) 추가 — 기존 light 선…
sabit1997 Sep 26, 2026
0380e00
fix: IconButton md(36px) 안 아이콘을 16 → 20px 로 — 헤더·모바일 조작 버튼이 또렷하도록
sabit1997 Sep 26, 2026
8188137
refactor: AppShell 의 손 구현 아이콘 버튼 6개를 IconButton 으로 흡수
sabit1997 Sep 26, 2026
b9a6078
docs: Phase C 3차(흡수) 결과를 components.md·DESIGN.md 에 반영 — Avatar 절 추가
sabit1997 Sep 26, 2026
def5657
Merge pull request #56 from Qode-4/refactor/quire-component-adoption
sabit1997 Sep 26, 2026
8ad6a55
fix: OverlayModal 제목이 길 때 '닫기' 버튼이 세로로 접히지 않도록(shrink-0·nowrap, 제목 단어…
sabit1997 Sep 26, 2026
6a6729a
feat: 되돌릴 수 없는 액션 확인용 ui/ConfirmDialog 추가 — 간단·강조(emphasis) 두 단계, 동사 버튼
sabit1997 Sep 26, 2026
fbc87d4
refactor: window.confirm 4곳과 팀 채팅 확인 모달 2개를 ConfirmDialog 로 통일
sabit1997 Sep 26, 2026
e384c56
docs: Phase D 패턴 문서 시작 — README 와 확인 패턴(confirm.md)
sabit1997 Sep 26, 2026
ea95292
feat: ConfirmDialog 에 error 표시 — 실패해도 닫지 않고 모달 안에서 바로 다시 시도
sabit1997 Sep 26, 2026
ac41991
feat: 팀 공유 카드 '공유 취소'에 확인 단계 추가(간단형) — 되돌릴 수 없는 동작
sabit1997 Sep 26, 2026
214a6ea
refactor: 에러 패턴 적용 — 오류를 동작이 시작된 자리에 표시
sabit1997 Sep 26, 2026
2f13172
docs: 에러 패턴(error.md) 추가, 확인 패턴에 실패 처리·공유 취소 반영
sabit1997 Sep 26, 2026
9d2b704
feat: 팀 채팅 멤버 내보내기에 줄 안 확인 추가 — 모달 안이라 ConfirmDialog 를 겹치지 않음
sabit1997 Sep 26, 2026
4e2a43b
docs: 확인 패턴에 '모달 안에서는 줄 안 확인' 규칙 추가
sabit1997 Sep 26, 2026
0260c7d
refactor: 피드백 패턴 적용 — 결과가 보이면 조용히, 안 보이거나 보던 화면이 사라지면 토스트
sabit1997 Sep 26, 2026
09866cd
docs: 피드백 패턴(feedback.md) 추가
sabit1997 Sep 26, 2026
b87a073
feat: Spinner·StateMessage 컴포넌트 추가 — 기다림과 빈 상태 안내를 한 모양으로
sabit1997 Sep 26, 2026
1e62c02
refactor: 빈 상태·로딩 패턴 적용 — 버튼은 isLoading, 영역은 StateMessage, 채울 수 있는 빈 …
sabit1997 Sep 26, 2026
ff703e2
docs: 빈 상태·로딩 패턴(empty-loading.md) 추가, 패턴 목록 상태 갱신
sabit1997 Sep 26, 2026
d28e8a9
Merge pull request #57 from Qode-4/refactor/quire-patterns
sabit1997 Sep 26, 2026
6c04ece
feat: 컴포넌트 registry 도입 — ui 컴포넌트별 meta.ts 와 tokens:check 가 생성하는 docs/…
sabit1997 Sep 26, 2026
6b720b0
feat: tokens:check 에 패턴 규칙 추가 — 브라우저 confirm/alert, 손 스피너, 라벨 바꿔치기, 하…
sabit1997 Sep 26, 2026
0f25483
docs: AI 검수 체크리스트 추가, AGENTS.md 에 UI 작업 전 읽을 문서 안내
sabit1997 Sep 26, 2026
0a7f1dd
docs: DESIGN.md 의 컴포넌트별 규칙을 registry 로 이관 — 고유 규칙은 meta 로 옮기고 화면 규칙만 남김
sabit1997 Sep 26, 2026
c4856f8
docs: 확인 패턴의 줄 안 확인에 참고 구현 위치 추가
sabit1997 Sep 26, 2026
da900fe
Merge pull request #58 from Qode-4/feat/quire-ai-context
sabit1997 Sep 26, 2026
6f73bfc
feat: 모션 토큰 도입 — 작은 전환은 기본 150ms, 토스트·드로어는 duration-base 200ms, Loadi…
sabit1997 Sep 26, 2026
88749b0
refactor: 화면 문구를 해요체로 통일 — 말줄임표 …, 팀 채팅·저장소·방장 넘기기 용어 정리
sabit1997 Sep 26, 2026
0e6ca52
feat: tokens:check 에 문구 규칙 추가 — 습니다체, 마침표 3개, 폐기 용어
sabit1997 Sep 26, 2026
45aced6
docs: 문구 카탈로그(copy.md) 추가 — 상황별 톤·용어집, 관련 문서에서 연결
sabit1997 Sep 26, 2026
375483f
fix: 문구 검토 반영 — 1인칭 제거, 할 수 없어요/못했어요 구분, 경로 오류 뜻 복원, 준비 중 안내 유지
sabit1997 Sep 26, 2026
5e25c0f
Merge pull request #59 from Qode-4/refactor/quire-voice-motion
sabit1997 Sep 26, 2026
8763783
feat: PR CI 추가 — develop·main 으로 가는 PR 마다 lint·typecheck·test·tokens:…
sabit1997 Sep 26, 2026
d27c22e
feat: Storybook a11y addon 도입 — 스토리마다 접근성 검사 패널
sabit1997 Sep 26, 2026
19229f2
fix: 접근성 검사 위반 16건 수정 — 목록 역할 정리, 스크롤 영역 키보드 포커스, 체크리스트 라벨, 잠긴 단계 inert
sabit1997 Sep 26, 2026
d288117
chore: registry 재생성 — 스크롤 영역 포커스 링 토큰 반영
sabit1997 Sep 26, 2026
341b56c
docs: 운영 문서 추가 — 변경 흐름·문서 우선순위, PR·시스템 변경 템플릿, 상태 헤더 날짜 통일
sabit1997 Sep 26, 2026
40875c8
Merge pull request #60 from Qode-4/feat/quire-operations
sabit1997 Sep 26, 2026
8b9b0a9
docs: Quire 로고 확정 — 도브테일 심볼과 락업을 SYSTEM.md 에 기록
sabit1997 Sep 26, 2026
c36550c
fix: 문구 검사가 놓친 ㅂ니다 문구 수정 — 규칙을 ~니다·~니까 전체로 넓힘
sabit1997 Sep 26, 2026
f34d9cb
Merge pull request #61 from Qode-4/docs/quire-logo
sabit1997 Sep 26, 2026
95275d0
fix: 로그인 직후 뜨던 환영 화면 제거
sabit1997 Sep 26, 2026
f80fdfd
Merge pull request #62 from Qode-4/fix/remove-login-welcome
sabit1997 Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/ISSUE_TEMPLATE/system-change.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: 시스템 변경 제안
description: 새 토큰·컴포넌트·패턴이 필요하거나 기존 규칙을 바꾸자고 제안합니다. (docs/process/change-flow.md)
title: '[System]: '
labels: ['system-change']
body:
- type: dropdown
id: kind
attributes:
label: 무엇을 바꾸나요
options:
- 토큰 (색·글자·모서리·모션)
- 컴포넌트 (새 ui 컴포넌트 · variant/size 추가)
- 패턴 (결정 트리)
- 문구 규칙 (톤·용어집)
validations:
required: true
- type: textarea
id: need
attributes:
label: 왜 필요한가요
description: 어떤 화면에서 무엇을 하려는데 막혔는지. 스크린샷이 있으면 좋아요.
validations:
required: true
- type: textarea
id: existing
attributes:
label: 기존 것으로는 왜 안 되나요
description: docs/registry.md · docs/patterns · docs/foundations.md 에서 검토한 것
validations:
required: true
- type: textarea
id: proposal
attributes:
label: 제안
description: 이름·값·쓸 때/피할 때. 다른 대안이 있었다면 함께.
validations:
required: true
20 changes: 20 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 요약

<!-- 무엇을 왜 바꿨는지 -->

## 화면이 바뀌는 곳

<!-- 없으면 "없음". 있으면 전/후 스크린샷 -->

## UI 를 바꿨다면 (`docs/ai-review-checklist.md`)

- [ ] `docs/registry.md` 의 기존 컴포넌트를 썼다 (새로 만들었다면 JSDoc + `*.meta.ts` + 스토리)
- [ ] 상황이 패턴에 해당하면 `docs/patterns/README.md` 의 결정 트리를 따랐다
- [ ] 문구는 `docs/copy.md` — 해요체, `…`, 용어집
- [ ] 로딩·오류·빈 상태·성공을 확인했다
- [ ] 스토리가 있다면 Storybook Accessibility 패널 위반 0
- [ ] 새 토큰·컴포넌트·패턴이면 문서를 먼저 고쳤다 (change-flow(`docs/process/change-flow.md`))

## 검증

- [ ] CI 통과 (lint · typecheck · test · tokens:check · build)
59 changes: 59 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: CI

# develop·main 으로 가는 PR 마다 검수 5종을 돌린다 (AGENTS.md "명령어", docs/process/change-flow.md).
# 로컬 git hook 은 lint·typecheck·build 만 돌고, 건너뛸 수도 있어서 여기서 다시 막는다.
on:
pull_request:
branches:
- develop
- main
workflow_dispatch:

concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
verify:
runs-on: ubuntu-latest
timeout-minutes: 20
env:
# 검사용 빌드라 실제 API 주소가 필요 없다. index.html 의 %VITE_API_HOST% 치환만 채운다.
VITE_API_BASE_URL: http://localhost:3000
VITE_API_HOST: localhost:3000
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Setup Yarn via Corepack
run: |
corepack enable
corepack prepare yarn@3.6.3 --activate

- name: Install dependencies
run: corepack yarn install --immutable

- name: Lint
run: corepack yarn lint

- name: Typecheck
run: corepack yarn typecheck

- name: Test
run: corepack yarn test

- name: Tokens check
run: corepack yarn tokens:check

# tokens:check 가 다시 만든 docs/registry.md·contrast-matrix.md 가 커밋본과 다르면
# meta·토큰을 고치고 생성 파일을 커밋하지 않은 것이다.
- name: Generated docs are committed
run: git diff --exit-code -- docs/registry.md docs/tokens/contrast-matrix.md

- name: Build
run: corepack yarn build
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,4 @@ web-dist.tar.gz
#ai
/.omx
/.omc
storybook-static
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ pnpm-lock.yaml
LICENSE.md
tsconfig.json
tsconfig.*.json
# yarn tokens:check 가 생성 — 스크립트 출력 그대로 둔다
docs/tokens/contrast-matrix.md
docs/registry.md
2 changes: 1 addition & 1 deletion .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import svgr from 'vite-plugin-svgr';

const config: StorybookConfig = {
stories: ['../src/renderer/src/components/**/*.stories.@(ts|tsx)'],
addons: ['@storybook/addon-essentials', '@storybook/addon-interactions'],
addons: ['@storybook/addon-essentials', '@storybook/addon-interactions', '@storybook/addon-a11y'],
framework: {
name: '@storybook/react-vite',
options: {}
Expand Down
20 changes: 19 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ yarn dev # Electron 개발 모드 (main + preload + renderer HM
yarn web:dev # 렌더러만 브라우저에서 (src/renderer/vite.config.ts)
yarn lint # ESLint
yarn typecheck # tsc: node(main/preload) + web(renderer) 두 프로젝트 모두
yarn test # vitest
yarn build # typecheck + electron-vite build
yarn web:build # 웹 정적 빌드 → src/renderer/dist
yarn storybook # 컴포넌트 샌드박스 (포트 6006)
yarn tokens:check # 토큰·대비·패턴 규칙 검사 + docs/registry.md 생성
yarn swagger:local # OpenAPI → src/renderer/src/api/generated 재생성
```

테스트 러너는 없다. 검증 수단은 `lint` + `typecheck` + Storybook.
테스트는 `yarn test`(vitest, `*.test.ts(x)`). 검증 수단은 `lint` + `typecheck` + `test` + `build` + `tokens:check` + Storybook.

`yarn swagger:local`은 package.json에서 EC2 주소를 가리킨다. 로컬 백엔드(`../Qode-Server`)
스펙으로 생성하려면 스크립트의 `-p` URL을 `http://localhost:3000/docs/json`으로 바꿔서 실행한다.
Expand Down Expand Up @@ -82,6 +84,16 @@ vanilla-extract 플러그인이 세 곳(electron.vite, renderer vite, storybook)
아이콘은 SVGR(`?react`)로 불러 `components/icons/iconRegistry.ts`에 등록하고 `<Icon name="..." />`로 쓴다.
새 아이콘은 `icons/raw/`에 넣고 레지스트리에 추가해야 타입에 잡힌다.

### 디자인 시스템 (Quire) — UI 작업 전에 읽을 것

1. [`docs/registry.md`](docs/registry.md) — 컴포넌트별 쓸 때·피할 때·옵션. 새로 만들기 전에 여기서 찾는다.
2. [`docs/patterns/`](docs/patterns/README.md) — 확인·에러·피드백·빈 상태·로딩의 결정 트리.
3. [`docs/foundations.md`](docs/foundations.md) — 토큰(색·글자·모서리·모션)의 의미. 정체성·원칙은 [`SYSTEM.md`](SYSTEM.md).
화면 문구는 [`docs/copy.md`](docs/copy.md) — 해요체, `…`, 용어집.
4. 끝나면 [`docs/ai-review-checklist.md`](docs/ai-review-checklist.md) 로 검수하고 `yarn tokens:check` 를 돌린다.

새 ui 컴포넌트는 JSDoc(✅ Use / ❌ Don't) + `Name.meta.ts` + 스토리를 함께 만든다. `docs/registry.md` 는 생성 파일이라 직접 고치지 않는다.

### 컴포넌트 배치

`ui/`(범용, Storybook 스토리 동반) → `layout/`(AppShell·AuthFrame·ProjectTabs) → `feature/`(도메인 모달·테이블) → `pages/`.
Expand All @@ -93,6 +105,12 @@ vanilla-extract 플러그인이 세 곳(electron.vite, renderer vite, storybook)
- pre-push: `build` (즉 typecheck가 두 번 돌아 푸시가 느리다)
- commit-msg: 브랜치 이름의 숫자를 이슈 번호로 뽑아 커밋 제목 끝에 ` (#123)` 자동 추가

## CI

`.github/workflows/ci.yml` — develop·main 으로 가는 PR 마다 lint · typecheck · test · tokens:check · build.
`tokens:check` 가 다시 만든 `docs/registry.md`·`docs/tokens/contrast-matrix.md` 가 커밋본과 다르면 실패하니 함께 커밋한다.
토큰·컴포넌트·패턴을 새로 만들거나 바꿀 때는 [`docs/process/change-flow.md`](docs/process/change-flow.md), 문서끼리 어긋나면 [`docs/process/sot-priority.md`](docs/process/sot-priority.md).

## 배포

`v*` 태그 푸시 → Electron 3플랫폼 패키징(`release.yml`). `main` 브랜치 푸시 → 웹 정적 빌드 EC2 배포(`web-deploy-ec2.yml`).
Expand Down
Loading
Loading