Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Skill: Biome ๋‹จ์ผ ํ’ˆ์งˆ์ฒดํฌ ํ‘œ์ค€ํ™” (Web/Admin/CI)
---
name: biome-unification-ci
description: Standardize Biome-based lint/typecheck commands across web, admin, university-web, Husky hooks, and CI so local and GitHub Actions runs stay identical. Use when adding a new package's quality scripts, debugging a CI-vs-local lint mismatch, or asked to unify quality checks.
---

# Biome ๋‹จ์ผ ํ’ˆ์งˆ์ฒดํฌ ํ‘œ์ค€ํ™” (Web/Admin/University-Web/CI)

## ๋ชฉ์ 

Expand All @@ -21,6 +26,13 @@
- ํƒ€์ž… ์ฒดํฌ: `pnpm --filter @solid-connect/admin run typecheck`
- CI ์ฒดํฌ: `pnpm --filter @solid-connect/admin run ci:check`

### University Web

- ์ž๋™ ์ˆ˜์ •: `pnpm --filter @solid-connect/university-web run lint`
- ์ฒดํฌ ์ „์šฉ: `pnpm --filter @solid-connect/university-web run lint:check`
- ํƒ€์ž… ์ฒดํฌ: `pnpm --filter @solid-connect/university-web run typecheck:ci`
- CI ์ฒดํฌ: `pnpm --filter @solid-connect/university-web run ci:check`

### Root (Turbo)

- ์ „์ฒด CI ์ฒดํฌ: `pnpm ci:check`
Expand Down Expand Up @@ -49,8 +61,10 @@

1. `pnpm --filter @solid-connect/web run ci:check`
2. `pnpm --filter @solid-connect/admin run ci:check`
3. `pnpm ci:check`
4. `pnpm build`
3. `pnpm --filter @solid-connect/university-web run ci:check`
4. `pnpm typecheck` (๋ฃจํŠธ Turbo ์ „์ฒด ํƒ€์ž… ์ฒดํฌ)
5. `pnpm ci:check`
6. `pnpm build`

## ์‹คํŒจ ๋Œ€์‘

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Skill: Bruno API ๋™๊ธฐํ™” + Codegen + React Query ์—ฐ๊ณ„
---
name: bruno-codegen-react-query
description: Sync Bruno API specs, regenerate the shared TypeScript API client, and wire React Query on top. Use when the user asks to "๋ธŒ๋ฃจ๋…ธ ๋‹ค์‹œ ๋™๊ธฐํ™”ํ•ด์ค˜", "codegen ๋Œ๋ ค์„œ ํƒ€์ž… ์ตœ์‹ ํ™”ํ•ด์ค˜", "์ƒ์„ฑ ์ฝ”๋“œ ๊ธฐ์ค€์œผ๋กœ react-query ๋ถ™์—ฌ์ค˜", or reports a response type mismatch between server and generated types.
---

# Bruno API ๋™๊ธฐํ™” + Codegen + React Query ์—ฐ๊ณ„

## ๋ชฉ์ 

Expand All @@ -11,17 +16,10 @@
- ์‘๋‹ต ํƒ€์ž… ๋ถˆ์ผ์น˜ ์ ๊ฒ€
- ์•ฑ๋ณ„ React Query ๋ž˜ํผ/ํ›… ์—ฐ๊ฒฐ

## ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ ์˜ˆ์‹œ

- "๋ธŒ๋ฃจ๋…ธ ๋‹ค์‹œ ๋™๊ธฐํ™”ํ•ด์ค˜"
- "codegen ๋Œ๋ ค์„œ ํƒ€์ž… ์ตœ์‹ ํ™”ํ•ด์ค˜"
- "์ƒ์„ฑ ์ฝ”๋“œ ๊ธฐ์ค€์œผ๋กœ react-query ๋ถ™์—ฌ์ค˜"
- "์‘๋‹ต ํƒ€์ž…์ด ์„œ๋ฒ„๋ž‘ ๋‹ค๋ฅธ๋ฐ ์›์ธ ํ™•์ธํ•ด์ค˜"

## ํ•ต์‹ฌ ์›์น™

1. Bruno๋ฅผ ๋‹จ์ผ ์†Œ์Šค๋กœ ๋ณธ๋‹ค.
2. ์ƒ์„ฑ ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
2. ์ƒ์„ฑ ํŒŒ์ผ(`packages/api-schema/src/apis/*`)์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
3. ์ž˜๋ชป๋œ ์ƒ์„ฑ ๊ฒฐ๊ณผ๋Š” ์ƒ์„ฑ๊ธฐ(`packages/bruno-api-typescript`)๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
4. `onSuccess`, invalidation, toast, navigation ๋“ฑ์€ ์•ฑ ๋ ˆ์ด์–ด์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Expand Down Expand Up @@ -66,9 +64,6 @@

## ์‹คํŒจ ๋Œ€์‘

- remote sync ์‹คํŒจ ์‹œ:
- `BRUNO_REPO_URL`, `BRUNO_REPO_REF`, `BRUNO_COLLECTION_PATH` ์ ๊ฒ€
- ์ƒ์„ฑ ์‹คํŒจ ์‹œ:
- ํŒŒ์‹ฑ ๋ถˆ๊ฐ€ `.bru`์™€ docs JSON ํ˜•์‹ ํ™•์ธ
- ํƒ€์ž… ๋ถˆ์ผ์น˜ ์ง€์† ์‹œ:
- ์ž„์‹œ ์ˆ˜๋™ ํŒจ์น˜ ๊ธˆ์ง€, ์ƒ์„ฑ๊ธฐ ๋กœ์ง ์šฐ์„  ์ˆ˜์ •
- remote sync ์‹คํŒจ ์‹œ: `BRUNO_REPO_URL`, `BRUNO_REPO_REF`, `BRUNO_COLLECTION_PATH` ์ ๊ฒ€
- ์ƒ์„ฑ ์‹คํŒจ ์‹œ: ํŒŒ์‹ฑ ๋ถˆ๊ฐ€ `.bru`์™€ docs JSON ํ˜•์‹ ํ™•์ธ
- ํƒ€์ž… ๋ถˆ์ผ์น˜ ์ง€์† ์‹œ: ์ž„์‹œ ์ˆ˜๋™ ํŒจ์น˜ ๊ธˆ์ง€, ์ƒ์„ฑ๊ธฐ ๋กœ์ง ์šฐ์„  ์ˆ˜์ •
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Skill: Commit + Push + PR Subagent
---
name: commit-push-pr
description: One-shot commit, push, and PR creation subagent flow with Korean commit/PR language enforced. Use when the user asks to commit and push and open a PR in a single request (e.g. "์ปค๋ฐ‹ํ•˜๊ณ  ํ‘ธ์‹œํ•ด์„œ PR๊นŒ์ง€ ๋งŒ๋“ค์–ด์ค˜").
---

# Commit + Push + PR Subagent

## Goal

Expand All @@ -15,14 +20,14 @@

1. ์ž‘์—… ๋ธŒ๋žœ์น˜ ํ™•์ธ: `git branch --show-current`
2. ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ™•์ธ: `git status --short --branch`, `git diff --stat`
3. ์ปค๋ฐ‹ ์Šคํƒ€์ผ ์ค€์ˆ˜: ์ €์žฅ์†Œ ๊ทœ์น™(`<type>: <subject>`) ์‚ฌ์šฉ
3. ์ปค๋ฐ‹ ์Šคํƒ€์ผ ์ค€์ˆ˜: ์ €์žฅ์†Œ ๊ทœ์น™(์ด๋ชจ์ง€ + `<type>: <subject>`, `AGENTS.md`์˜ Commit Message Convention ์ฐธ๊ณ )
4. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ PR ์ œ๋ชฉ/๋ณธ๋ฌธ์€ ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑ

## Execution Steps

```bash
git add <files>
git commit -m "docs: ์ปค๋ฐ‹/ํ‘ธ์‹œ/PR ์„œ๋ธŒ์—์ด์ „ํŠธ ์Šคํ‚ฌ ๋ฌธ์„œ ์ถ”๊ฐ€"
git commit -m "๐Ÿ“ docs: ์ปค๋ฐ‹/ํ‘ธ์‹œ/PR ์„œ๋ธŒ์—์ด์ „ํŠธ ์Šคํ‚ฌ ๋ฌธ์„œ ์ถ”๊ฐ€"
git push -u origin <branch>
Comment on lines 26 to 31

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ“ Maintainability & Code Quality | ๐ŸŸ  Major | โšก Quick win

1. ํ‘ธ์‹œ ์ „ ํ•„์ˆ˜ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ ˆ์ฐจ๋ฅผ ๋ณด๊ฐ•ํ•ด ์ฃผ์„ธ์š”.

ํ˜„์žฌ ์‹คํ–‰ ๋‹จ๊ณ„์—๋Š” ๋ธŒ๋žœ์น˜ยท์ƒํƒœ ํ™•์ธ๊ณผ ์ปค๋ฐ‹/ํ‘ธ์‹œ๋งŒ ์žˆ๊ณ , pnpm typecheck ๋ฐ ๋ณ€๊ฒฝ๋œ ์•ฑ์˜ ๊ด€๋ จ ๊ฒ€์‚ฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์Šคํ‚ฌ์„ ๋”ฐ๋ฅด๋Š” ์—์ด์ „ํŠธ๊ฐ€ ๊ฒ€์ฆ ์—†์ด ํ‘ธ์‹œํ•˜์ง€ ์•Š๋„๋ก git add ์ „์— ํ•ด๋‹น ๊ฒ€์‚ฌ ๋‹จ๊ณ„๋ฅผ ๋ช…์‹œํ•ด ์ฃผ์„ธ์š”.

As per coding guidelines, ํ‘ธ์‹œ ์ „์— pnpm typecheck์™€ ๊ด€๋ จ ์•ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์ˆ˜์ •
 ## Execution Steps

+pnpm typecheck
+# ๋ณ€๊ฒฝ๋œ ์•ฑ์˜ ๊ด€๋ จ ๊ฒ€์‚ฌ ์‹คํ–‰
+
git add

</details>

<details>
<summary>๐Ÿค– Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/commit-push-pr/SKILL.md around lines 26 - 31, Update the
Execution Steps in the commit-push-PR skill documentation to run pnpm typecheck
and the relevant checks for changed applications before git add. Keep the
existing commit and push commands unchanged, and explicitly require these
validations before proceeding with the push.


</details>

<!-- fingerprinting:phantom:triton:luna -->

<!-- cr-indicator-types:potential_issue -->

<!-- cr-comment:v1:c8134dfb3512db3894ef8eef -->

_Source: Coding guidelines_

<!-- This is an auto-generated comment by CodeRabbit -->

gh pr create --base <base> --head <branch> --title "<title>" --body "$(cat <<'EOF'
## ์š”์•ฝ
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Skill: `fix/issues-405-409` ๋ฆฌ๋ฒ ์ด์Šค ํ”Œ๋ ˆ์ด๋ถ
---
name: rebase-issues-405-409
description: Rebase playbook for the fix/issues-405-409 branch onto origin/main, including known conflict resolution rules for UniverSityCard and pnpm-lock.yaml. Use only when working on the fix/issues-405-409 branch.
---

# `fix/issues-405-409` ๋ฆฌ๋ฒ ์ด์Šค ํ”Œ๋ ˆ์ด๋ถ

## ๋ชฉ์ 

Expand Down Expand Up @@ -40,11 +45,13 @@ git rebase --continue

```bash
git status --short --branch
git merge-base --is-ancestor origin/main HEAD && echo "origin/main is ancestor: OK"
git rev-list --left-right --count origin/main...HEAD
git log --oneline --max-count=12
```

- ๊ธฐ๋Œ€๊ฐ’: `origin/main...HEAD` ๊ฒฐ๊ณผ๊ฐ€ `0 7` (๊ธฐ์ค€ ๋ธŒ๋žœ์น˜ ๋Œ€๋น„ feature ์ปค๋ฐ‹ 7๊ฐœ๋งŒ ๋‚จ์Œ)
- ์›Œํ‚น ํŠธ๋ฆฌ๊ฐ€ cleanํ•˜๊ณ , `origin/main`์ด ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ์กฐ์ƒ(ancestor)์ธ์ง€๋กœ ๋ฆฌ๋ฒ ์ด์Šค ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
- `git rev-list --left-right --count origin/main...HEAD`์˜ ์ขŒ์ธก ๊ฐ’(๋’ค์ฒ˜์ง„ ์ปค๋ฐ‹ ์ˆ˜)์€ ๋ฐ˜๋“œ์‹œ `0`์ด์–ด์•ผ ํ•œ๋‹ค. ์šฐ์ธก ๊ฐ’(feature ์ปค๋ฐ‹ ์ˆ˜)์€ `origin/main`์ด ์ „์ง„ํ–ˆ๊ฑฐ๋‚˜ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์ด ์ถ”๊ฐ€/์ œ๊ฑฐ๋์œผ๋ฉด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ณ ์ •๊ฐ’(์˜ˆ: `7`)์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ๋ง๊ณ  `git log`๋กœ ์‹ค์ œ ์ปค๋ฐ‹ ๋ชฉ๋ก์„ ์ฐธ๊ณ ๊ฐ’์œผ๋กœ๋งŒ ํ™•์ธํ•œ๋‹ค.
- ์›๊ฒฉ feature ๋ธŒ๋žœ์น˜์™€ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ push ์‹œ `--force-with-lease`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

```bash
Expand Down
55 changes: 55 additions & 0 deletions .claude/skills/univ-extends-bruno-sync/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
name: univ-extends-bruno-sync
description: Rebase the feat/univ-extends branch and keep the generated Bruno TypeScript API client in sync. Use only when working on the feat/univ-extends branch or asked to rebase it against develop/main.
---

# feat/univ-extends ๋ฆฌ๋ฒ ์ด์Šค + Bruno ๋ช…์„ธ ๋™๊ธฐํ™”

## ๋ชฉ์ 

- `feat/univ-extends`๋ฅผ ์ตœ์‹  ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜์— ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค.
- Bruno ๋ช…์„ธ ๋ณ€๊ฒฝ์ด ์ƒ๊ฒจ๋„ TypeScript API ์ฝ”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

## ๋ฆฌ๋ฒ ์ด์Šค ์ ˆ์ฐจ

1. ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜ fetch
- `git fetch --all --prune`
2. ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜ ํ™•์ธ
- `git ls-remote --heads origin develop`์œผ๋กœ ์›๊ฒฉ `develop` ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
- ์กด์žฌํ•˜๋ฉด: ๋กœ์ปฌ `develop`์„ ์ตœ์‹  `origin/develop`์œผ๋กœ ๋งž์ถ˜ ๋’ค(`git checkout develop && git reset --hard origin/develop`, ๋กœ์ปฌ์— ์—†์œผ๋ฉด `git checkout -b develop origin/develop`) ๊ทธ ๋ธŒ๋žœ์น˜๋กœ ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ—„๏ธ Data Integrity & Integration | ๐ŸŸ  Major | โšก Quick win

2. git reset --hard๋กœ ๋กœ์ปฌ ์ž‘์—…์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋„๋ก ์•ˆ์ „์žฅ์น˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Line 19์˜ ๋ช…๋ น์€ ์ถ”์  ์ค‘์ธ ๋ฏธ์ปค๋ฐ‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋ฟ ์•„๋‹ˆ๋ผ ์›๊ฒฉ์— ์—†๋Š” ๋กœ์ปฌ develop ์ปค๋ฐ‹๋„ ์ฐธ์กฐ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊นจ๋—ํ•œ ์ž‘์—… ํŠธ๋ฆฌ์™€ ๋ฐฑ์—…์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜, ๊ธฐ๋ณธ ๋™์ž‘์„ git pull --ff-only origin develop์ฒ˜๋Ÿผ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํŒจํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ” ์ฃผ์„ธ์š”.

๐Ÿงฐ Tools
๐Ÿช› SkillSpector (2.3.11)

[error] 19: [TM1] Tool Parameter Abuse: Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Remediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.

(Tool Misuse (TM1))

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/univ-extends-bruno-sync/SKILL.md at line 19, Update the
develop-branch synchronization instructions in the rebase workflow to remove the
destructive git reset --hard behavior. Require a clean working tree and a backup
before any potentially destructive operation, or replace it with a safe
fast-forward-only update such as git pull --ff-only origin develop while
preserving the existing branch-creation path.

Source: Linters/SAST tools

- ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด(์ด ์ €์žฅ์†Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ `develop`์ด ์—†๋‹ค): `origin/main`์„ ๊ธฐ์ค€์œผ๋กœ ์ง์ ‘ ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค. ๋กœ์ปฌ `develop`์„ ๋งŒ๋“ค์–ด์„œ ์šฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค.
3. ๋ฆฌ๋ฒ ์ด์Šค ์‹คํ–‰
- `origin/develop`์ด ์žˆ๋Š” ๊ฒฝ์šฐ: `git rebase develop`
- ์—†๋Š” ๊ฒฝ์šฐ: `git rebase origin/main`
Comment on lines +18 to +23

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐ŸŽฏ Functional Correctness | ๐ŸŸ  Major | โšก Quick win

1. ๋ฆฌ๋ฒ ์ด์Šค ์ „์— ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„์˜ค๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Line 19์—์„œ develop์œผ๋กœ ์ „ํ™˜ํ•œ ๋’ค Line 22์—์„œ ๋ฐ”๋กœ git rebase develop์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ, ํ˜„์žฌ ๋ธŒ๋žœ์น˜๊ฐ€ develop์ธ ์ƒํƒœ์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ๋ฆฌ๋ฒ ์ด์Šคํ•˜๋Š” no-op์ด ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ feat/univ-extends๋Š” ๋ฆฌ๋ฒ ์ด์Šค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์˜ˆ์‹œ
  - ์กด์žฌํ•˜๋ฉด: ๋กœ์ปฌ `develop`์„ ์ตœ์‹  `origin/develop`์œผ๋กœ ๋งž์ถ˜๋‹ค.
+ - ๋™๊ธฐํ™”๊ฐ€ ๋๋‚˜๋ฉด `git checkout feat/univ-extends`๋กœ ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„๊ฐ„๋‹ค.
  - `origin/develop`์ด ์žˆ๋Š” ๊ฒฝ์šฐ: `git rebase develop`
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `git ls-remote --heads origin develop`์œผ๋กœ ์›๊ฒฉ `develop` ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
- ์กด์žฌํ•˜๋ฉด: ๋กœ์ปฌ `develop`์„ ์ตœ์‹  `origin/develop`์œผ๋กœ ๋งž์ถ˜ ๋’ค(`git checkout develop && git reset --hard origin/develop`, ๋กœ์ปฌ์— ์—†์œผ๋ฉด `git checkout -b develop origin/develop`) ๊ทธ ๋ธŒ๋žœ์น˜๋กœ ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค.
- ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด(์ด ์ €์žฅ์†Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ `develop`์ด ์—†๋‹ค): `origin/main`์„ ๊ธฐ์ค€์œผ๋กœ ์ง์ ‘ ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค. ๋กœ์ปฌ `develop`์„ ๋งŒ๋“ค์–ด์„œ ์šฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค.
3. ๋ฆฌ๋ฒ ์ด์Šค ์‹คํ–‰
- `origin/develop`์ด ์žˆ๋Š” ๊ฒฝ์šฐ: `git rebase develop`
- ์—†๋Š” ๊ฒฝ์šฐ: `git rebase origin/main`
- `git ls-remote --heads origin develop`์œผ๋กœ ์›๊ฒฉ `develop` ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
- ์กด์žฌํ•˜๋ฉด: ๋กœ์ปฌ `develop`์„ ์ตœ์‹  `origin/develop`์œผ๋กœ ๋งž์ถ˜ ๋’ค(`git checkout develop && git reset --hard origin/develop`, ๋กœ์ปฌ์— ์—†์œผ๋ฉด `git checkout -b develop origin/develop`) ๋™๊ธฐํ™”๊ฐ€ ๋๋‚˜๋ฉด `git checkout feat/univ-extends`๋กœ ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„๊ฐ„๋‹ค.
- ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด(์ด ์ €์žฅ์†Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ `develop`์ด ์—†๋‹ค): `origin/main`์„ ๊ธฐ์ค€์œผ๋กœ ์ง์ ‘ ๋ฆฌ๋ฒ ์ด์Šคํ•œ๋‹ค. ๋กœ์ปฌ `develop`์„ ๋งŒ๋“ค์–ด์„œ ์šฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค.
3. ๋ฆฌ๋ฒ ์ด์Šค ์‹คํ–‰
- `origin/develop`์ด ์žˆ๋Š” ๊ฒฝ์šฐ: `git rebase develop`
- ์—†๋Š” ๊ฒฝ์šฐ: `git rebase origin/main`
๐Ÿงฐ Tools
๐Ÿช› SkillSpector (2.3.11)

[error] 19: [TM1] Tool Parameter Abuse: Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Remediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.

(Tool Misuse (TM1))

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/univ-extends-bruno-sync/SKILL.md around lines 18 - 23, ๋ฆฌ๋ฒ ์ด์Šค
์‹คํ–‰ ์ „์— ํ˜„์žฌ ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋ณต๊ท€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. `develop` ๋™๊ธฐํ™” ๊ณผ์ •์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ „ํ™˜ํ•˜๋Š” ํ๋ฆ„์„ ์ˆ˜์ •ํ•ด `git
rebase develop` ๋˜๋Š” `git rebase origin/main`์ด ์ž‘์—… ๋ธŒ๋žœ์น˜์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ฉฐ,
`feat/univ-extends` ๊ฐ™์€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๊ฐ€ `develop` ์ž์ฒด๋ฅผ ๋ฆฌ๋ฒ ์ด์Šคํ•˜๋Š” no-op์ด ๋˜์ง€ ์•Š๊ฒŒ ํ•˜์„ธ์š”.

4. ์ถฉ๋Œ ์ฒ˜๋ฆฌ ์›์น™
- ์ž๋™ ์ƒ์„ฑ API ์ถฉ๋Œ์€ ์˜๋ฏธ ์—†๋Š” ๋Œ€๋Ÿ‰ ์ถฉ๋Œ์ด๋ฉด ํ•ด๋‹น ์ปค๋ฐ‹ `git rebase --skip`
- ๊ธฐ๋Šฅ ์ฝ”๋“œ ์ถฉ๋Œ์€ ์ˆ˜๋™ ๋ณ‘ํ•ฉ ํ›„ `git add` + `git rebase --continue`

## Bruno ๋™๊ธฐํ™” ์ ˆ์ฐจ

1. ๊ธฐ๋ณธ ์‹คํ–‰
- `pnpm run sync:bruno`
2. ์›๊ฒฉ ๋ช…์„ธ ๊ฐ•์ œ ๋™๊ธฐํ™” (๊ธฐ๋ณธ๊ณผ ๋™์ผ ๋™์ž‘ ๋ช…์‹œ)
- `pnpm --filter @solid-connect/api-schema run sync:bruno:remote`
3. ๋ชจ๋“œ ์ œ์–ด
- `BRUNO_SOURCE_MODE=local|remote|auto` (๊ธฐ๋ณธ: `remote`)

## ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ทœ์น™

- `BRUNO_COLLECTION_DIR`: ๋กœ์ปฌ ๋ช…์„ธ ํด๋”๋ฅผ ์ง์ ‘ ์ง€์ •
- `BRUNO_REPO_URL`: ์›๊ฒฉ Bruno ์ €์žฅ์†Œ URL
- `BRUNO_REPO_REF`: ์›๊ฒฉ ๋ธŒ๋žœ์น˜/ํƒœ๊ทธ (๊ธฐ๋ณธ `main`)
- `BRUNO_COLLECTION_PATH`: ์ €์žฅ์†Œ ๋‚ด๋ถ€ ๋ช…์„ธ ํด๋” (๊ธฐ๋ณธ `Solid Connection`)
- ๊ถŒ์žฅ ํŒŒ์ผ: `packages/api-schema/.env`

## ๊ฒ€์ฆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

1. `pnpm --filter @solid-connect/api-schema run sync:bruno`
2. `pnpm typecheck`
3. `pnpm build`

## ์‹คํŒจ ๋Œ€์‘

- `BRUNO_COLLECTION_DIR`์ด ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด `BRUNO_SOURCE_MODE` ๊ฐ’๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ทธ ๋กœ์ปฌ ๊ฒฝ๋กœ๊ฐ€ ํ•ญ์ƒ ์šฐ์„  ์‚ฌ์šฉ๋œ๋‹ค(`packages/api-schema/scripts/sync-bruno.mjs`์˜ `resolveCollectionDir()` ์ฐธ๊ณ ). ์ด ๊ฒฝ์šฐ `BRUNO_REPO_URL`์€ ํ•„์š” ์—†๋‹ค.
- `BRUNO_COLLECTION_DIR`์ด ์—†๊ณ , `BRUNO_SOURCE_MODE=remote`์ด๊ฑฐ๋‚˜(`auto` ๋ชจ๋“œ์—์„œ ๋กœ์ปฌ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋„ ์—†์–ด) ์›๊ฒฉ ๊ฒฝ๋กœ๋ฅผ resolveํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ `BRUNO_REPO_URL`์ด ์—†์œผ๋ฉด ์ฆ‰์‹œ ์‹คํŒจํ•œ๋‹ค.
- ์›๊ฒฉ clone ์„ฑ๊ณต ํ›„ `BRUNO_COLLECTION_PATH` ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด ์ฆ‰์‹œ ์‹คํŒจํ•œ๋‹ค.
67 changes: 67 additions & 0 deletions .claude/skills/university-web-rewrite-caution/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
name: university-web-rewrite-caution
description: Safety checklist before touching apps/university-web โ€” it is a separately deployed Next.js Multi-Zone SSG app that is CURRENTLY MID-REWRITE (desktop "skyscanner-style" layout redesign) with parallel work happening in git worktrees. Use whenever a task touches apps/university-web, the /university/* routes, packages/ui shared layout primitives, or anything under docs/screenshots/*-poc.
---

# University Web: ๋ฆฌ๋ผ์ดํŠธ ์ค‘ ์ฃผ์˜์‚ฌํ•ญ

## ์™œ ์ด ์Šคํ‚ฌ์ด ํ•„์š”ํ•œ๊ฐ€

`apps/university-web`์€ ๋‹จ์ˆœํ•œ ํ•˜์œ„ ๋ผ์šฐํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ **๋ณ„๋„๋กœ ๋ฐฐํฌ๋˜๋Š” ๋…๋ฆฝ Next.js ์•ฑ**์ด๊ณ , ์ง€๊ธˆ **๋ฐ์Šคํฌํ†ฑ ๋ ˆ์ด์•„์›ƒ ์ „๋ฉด ๋ฆฌ๋ผ์ดํŠธ("skyscanner-layout" ์Šคํƒ€์ผ)๊ฐ€ ์ง„ํ–‰ ์ค‘**์ด๋‹ค. ๋‹ค๋ฅธ ์•ฑ(`apps/web`, `apps/admin`)๊ณผ ๊ฐ™์€ ๊ฐ๊ฐ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค์Œ์ด ์‰ฝ๊ฒŒ ๊นจ์ง„๋‹ค:

- ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ๋ฆฌ๋ผ์ดํŠธ ์ž‘์—…๊ณผ ์ถฉ๋Œํ•˜๋Š” ์ค‘๋ณต/์—ญํ–‰ ์ˆ˜์ •
- SSG ๋นŒ๋“œ ์‹คํŒจ(๋นˆ ์นดํƒˆ๋กœ๊ทธ๋กœ ์กฐ์šฉํžˆ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ  ๋นŒ๋“œ ์ž์ฒด๊ฐ€ ์‹คํŒจํ•˜๋„๋ก ์„ค๊ณ„๋จ)
- `apps/web` โ†” `apps/university-web` ๊ฐ„ ๋ผ์šฐํŠธ ์†Œ์œ ๊ถŒ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜
- `apps/web`๊ณผ `apps/university-web`์— **๋™์ผ ๋‚ด์šฉ์œผ๋กœ ์ค‘๋ณต ๋ณด๊ด€๋œ** `AUTHENTICATION.md`/`COMPONENTS.md` ๋“œ๋ฆฌํ”„ํŠธ

## ์ž‘์—… ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (์ˆœ์„œ๋Œ€๋กœ)

1. **์ง„ํ–‰ ์ค‘์ธ ๋ฆฌ๋ผ์ดํŠธ์™€ ์ถฉ๋Œํ•˜๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.**
```bash
git worktree list
git branch -a --list "*skyscanner*" "*university*"
```
university ๊ด€๋ จ worktree/๋ธŒ๋žœ์น˜๊ฐ€ ์ด๋ฏธ ๋–  ์žˆ๋‹ค๋ฉด(์˜ˆ: `feat/skyscanner-layout-poc`, `fix/university-*`), ๊ฐ™์€ ํ™”๋ฉด์„ ๊ฑด๋“œ๋ฆฌ๊ธฐ ์ „์— ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  diff๋ฅผ ํ™•์ธํ•ด ์ค‘๋ณต ์ž‘์—…์„ ํ”ผํ•œ๋‹ค.

2. **`docs/screenshots/`์— ์ด๋ฏธ ์žˆ๋Š” POC ์ž๋ฃŒ๋ฅผ ํ™•์ธํ•œ๋‹ค.**
- `docs/screenshots/skyscanner-layout-poc/`, `docs/screenshots/university-skyscanner-layout-poc/`์— ๋ฐ์Šคํฌํ†ฑ(1440x1000)/๋ชจ๋ฐ”์ผ(390x844) contact sheet๊ฐ€ ์žˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add the POC artifacts required by this checklist

When an agent follows this mandatory university-web checklist, neither referenced POC directory exists in the reviewed tree; a repo-wide inspection of docs/screenshots finds only gradient-before.png and gradient-after.png. The agent therefore cannot inspect the claimed visual baseline or the README referenced later in the skill, so commit those artifacts or replace these references with paths that actually exist.

AGENTS.md reference: AGENTS.md:L62-L62

Useful? React with ๐Ÿ‘ย / ๐Ÿ‘Ž.

- ์ด๋ฏธ ๋ฆฌ๋ทฐ๋œ ๋ ˆ์ด์•„์›ƒ ๊ฒฐ์ •(์˜ˆ: ๋Œ€ํ•™ ๋ชฉ๋ก ๊ฐ€์ƒํ™”, ๋ชจ๋ฐ”์ผ ํ•˜๋‹จ ๋„ค๋น„ ์œ ์ง€, ๋ฐ์Šคํฌํ†ฑ nav ์ˆจ๊น€)์„ ์ž„์˜๋กœ ๋˜๋Œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

3. **๋ผ์šฐํŠธ ์†Œ์œ ๊ถŒ์„ `docs/university-multizone-deployment.md` ๊ธฐ์ค€์œผ๋กœ ์ง€ํ‚จ๋‹ค.**
- `/university`, `/university/search`, `/university/:homeUniversity`, `/university/:homeUniversity/:id`, `/university-static/*` โ†’ `apps/university-web` ์†Œ์œ  (SSG)
- `/university/score/*`, `/university/application/*` โ†’ `apps/web` ์†Œ์œ  (์ธ์ฆ/์ˆ˜์ • ํ”Œ๋กœ์šฐ, ์—ฌ๊ธฐ๋Š” ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค)
- `/university/list/:homeUniversity`๋Š” legacy URL์ด๋ฉฐ child route๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. redirect๋งŒ ์œ ์ง€.
- ์นดํƒˆ๋กœ๊ทธ ์„ฑ๊ฒฉ์˜ ์ƒˆ university ๋ผ์šฐํŠธ๋ฅผ ์‹ค์ˆ˜๋กœ `apps/web`์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

4. **๊ณต์œ  ๋ฌธ์„œ ๋™๊ธฐํ™”: `AUTHENTICATION.md` / `COMPONENTS.md`**
- `apps/web/AUTHENTICATION.md` โ‰ก `apps/university-web/AUTHENTICATION.md`
- `apps/web/COMPONENTS.md` โ‰ก `apps/university-web/COMPONENTS.md`
- ๋‘˜์€ ํ˜„์žฌ ์™„์ „ํžˆ ๋™์ผํ•œ ๋‚ด์šฉ์ด๋‹ค. ํ•œ์ชฝ๋งŒ ๊ณ ์น˜๋ฉด drift๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ, ์ปจ๋ฒค์…˜์„ ๋ฐ”๊ฟ€ ๋•Œ๋Š” **๋‘ ํŒŒ์ผ์„ ํ•จ๊ป˜ ์ˆ˜์ •**ํ•œ๋‹ค(diff๋กœ ํ™•์ธ: `diff apps/web/COMPONENTS.md apps/university-web/COMPONENTS.md`).

5. **๋ ˆ์ด์•„์›ƒ ๊ณตํ†ตํ™”๋Š” `packages/ui`๋กœ.**
- ๋ฆฌ๋ผ์ดํŠธ ๊ณผ์ •์—์„œ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๊ฐ€ `packages/ui`๋กœ ์ถ”์ถœ๋˜๊ณ  ์žˆ๋‹ค (์˜ˆ: `packages/ui/src/mobile-hero-detail-shell.tsx`).
- university ์ „์šฉ ํ™”๋ฉด์ด๋ผ๋„ web/admin๊ณผ ๊ฒน์น˜๋Š” ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด์ด๋ฉด `apps/university-web` ๋‚ด๋ถ€์— ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ๋ง๊ณ  `packages/ui`์— ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•˜๊ณ , ์—†์œผ๋ฉด ๊ทธ์ชฝ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์šฐ์„  ๊ณ ๋ คํ•œ๋‹ค.

6. **SSG ๋ฐ์ดํ„ฐ ํŽ˜์นญ์€ ์‹คํŒจ๋ฅผ ์‚ผํ‚ค์ง€ ์•Š๋Š”๋‹ค.**
- university-web์˜ ์นดํƒˆ๋กœ๊ทธ SSG๋Š” "๋ฐ์ดํ„ฐ fetch ์‹คํŒจ ์‹œ ๋นˆ ์นดํƒˆ๋กœ๊ทธ๋กœ ์กฐ์šฉํžˆ ๋นŒ๋“œ ์„ฑ๊ณต" ๋Œ€์‹  **๋นŒ๋“œ ์ž์ฒด๊ฐ€ ์‹คํŒจ**ํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค. ์ด ํŠน์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค (์—๋Ÿฌ๋ฅผ try/catch๋กœ ์‚ผ์ผœ ๋นˆ ๋ฐฐ์—ด fallback์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค).
- ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ์€ ์ˆ˜๋™ DB ๊ฐฑ์‹  ํ›„ university zone ์žฌ๋ฐฐํฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค(`/university/revalidate` ์ฐธ๊ณ ).

7. **ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜์กด์„ฑ ํ™•์ธ.**
- `apps/web`์€ ๋นŒ๋“œ ์‹œ `UNIVERSITY_WEB_DOMAIN`์ด ์—†์œผ๋ฉด ์‹คํŒจํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค(`/university` rewrite ๋Œ€์ƒ์ด ์—†์œผ๋ฉด catalog๊ฐ€ 404๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ). ์ด ๊ฐ€๋“œ๋ฅผ ์šฐํšŒ/์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.

## ๊ฒ€์ฆ

```bash
pnpm --filter @solid-connect/university-web run lint:check
pnpm --filter @solid-connect/university-web run typecheck:ci
pnpm --filter @solid-connect/university-web run build
pnpm --filter @solid-connect/web run build # UNIVERSITY_WEB_DOMAIN ํ•„์š”
```

๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋ฉด, ๊ธฐ์กด POC์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์Šคํฌํ†ฑ 1440x1000 / ๋ชจ๋ฐ”์ผ 390x844 ์Šคํฌ๋ฆฐ์ƒท์„ `docs/screenshots/<์ž‘์—…๋ช…>/`์— ๋‚จ๊ธฐ๊ณ  PR์— ์ฒจ๋ถ€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค (๊ธฐ์กด ์‚ฌ๋ก€: `docs/screenshots/university-skyscanner-layout-poc/README.md`).

## ์ฐธ๊ณ  ๋ฌธ์„œ

- `docs/university-multizone-deployment.md` โ€” ๋ผ์šฐํŠธ ์†Œ์œ ๊ถŒ, Vercel ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ, ๋ฐฐํฌ ์ ˆ์ฐจ
- `docs/screenshots/university-skyscanner-layout-poc/` โ€” ์ง„ํ–‰ ์ค‘์ธ ๋ฆฌ๋ผ์ดํŠธ์˜ ์ตœ์‹  ์‹œ๊ฐ QA ๊ธฐ์ค€
- `.claude/skills/bruno-codegen-react-query/SKILL.md` โ€” university-web๋„ ๊ฐ™์€ Bruno codegen์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ API ๋ณ€๊ฒฝ ์‹œ ํ•จ๊ป˜ ์ฐธ๊ณ 
Loading
Loading