https://github.com/yesonsys03-web/vibelign
AI coding safety CLI for vibe coding workflows. Checkpoints, undo, anchors, MCP, and secret protection for Claude Code, Cursor, Codex, and OpenCode.
https://github.com/yesonsys03-web/vibelign
ai-coding ai-safety claude-code cli code-safety codex cursor developer-tools mcp python vibe-coding vibelign
Last synced: 2 days ago
JSON representation
AI coding safety CLI for vibe coding workflows. Checkpoints, undo, anchors, MCP, and secret protection for Claude Code, Cursor, Codex, and OpenCode.
- Host: GitHub
- URL: https://github.com/yesonsys03-web/vibelign
- Owner: yesonsys03-web
- License: mit
- Created: 2026-03-12T06:54:21.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-05-29T01:10:56.000Z (13 days ago)
- Last Synced: 2026-05-29T02:21:30.355Z (13 days ago)
- Topics: ai-coding, ai-safety, claude-code, cli, code-safety, codex, cursor, developer-tools, mcp, python, vibe-coding, vibelign
- Language: Python
- Homepage: https://yesonsys03-web.github.io/VibeLign/
- Size: 111 MB
- Stars: 19
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.ko.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
๐ฐ๐ท ํ๊ตญ์ด ย |ย ๐บ๐ธ English
---
# ๐ฎ VibeLign โ AI ์ฝ๋ฉ์ ์์ ์ฅ์น
VibeLign(`vibelign`)์ ๋ฐ์ด๋ธ ์ฝ๋ฉ ์์
์ ๋ ์์ ํ๊ฒ ํด์ฃผ๋ AI ์ฝ๋ฉ ์์ **CLI + ๋ฐ์คํฌํฑ GUI** ์์.
ํ๋ก์ ํธ ๊ตฌ์กฐ ๋ณดํธ, ์ฒดํฌํฌ์ธํธ ์ ์ฅ, ๋๋๋ฆฌ๊ธฐ, ์ต์ปค ๊ด๋ฆฌ, ์ปค๋ฐ ์ ๋น๋ฐ์ ๋ณด ์ฐจ๋จ์ ๋์์ค์.
> **๐ v2.2**: GUI โ Rust core ๋ค์ด๋ ํธ ๋ธ๋ฆฌ์ง(in-process, Python subprocess ์์ด ~80ms โ <5ms), ํตํฉ ์๋ฌ ๋ก๊ทธ ๋ทฐ + GitHub ์ด์ ์๋ ๋ณด๊ณ , ์๋ ๋ฐฑ์
์คํจ ๊ฐ์ํ. [CHANGELOG](https://github.com/yesonsys03-web/VibeLign/blob/main/CHANGELOG.md) ์ฐธ๊ณ . v1 โ v2 ์ฌ์ฉ์: [๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋](https://github.com/yesonsys03-web/VibeLign/blob/main/MIGRATION_v1_to_v2.md).
๋ฌธ์: `https://yesonsys03-web.github.io/VibeLign/`
์ ์ฅ์: `https://github.com/yesonsys03-web/VibeLign`
์ด์: `https://github.com/yesonsys03-web/VibeLign/issues`
๋ฆด๋ฆฌ์ฆ: `https://github.com/yesonsys03-web/VibeLign/releases`
> ### ์ด๋ฐ ์ ์๋์?
>
> - AIํํ
๊ฐ๋จํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ฌ๋ผ๊ณ ํ๋๋ **ํ์ผ ์ ์ฒด๋ฅผ ๋ค์ ์ผ์ด์**
> - ๋ชจ๋ ์ฝ๋๊ฐ `main.py` ํ ํ์ผ์ ๋ค์ด์์ด์ โ **1000์ค ๋์, ๊ด๋ฆฌ ๋ถ๊ฐ๋ฅ**
> - AI๊ฐ ๋ค๋ฅธ ํ์ผ์ ๊ฑด๋๋ ค์ ์ด์ ์๋ฌด๊ฒ๋ ์ ๋ผ์
> - ๋๋๋ฆฌ๋ ค๊ณ ํ๋๋ฐ ๋ฐฉ๋ฒ์ ๋ชฐ๋ผ์
>
> **์ด๊ฑฐ๋ฅผ ์ํด ๋ง๋ค์์ด์!**
**๋ฐ์คํฌํฑ ์ฑ (macOS / Windows)** โ [๐ฅ ์ต์ ๋ฆด๋ฆฌ์ฆ ๋ค์ด๋ก๋](https://github.com/yesonsys03-web/VibeLign/releases/latest)
**Mac / Linux (CLI)**
```bash
pip install vibelign
vib start
```
**Windows** (PowerShell, CLI)
```powershell
# 1๋จ๊ณ: uv ์ค์น โ ์ต์ด 1ํ, PATH ์๋ ์ค์ , ๊ฒฝ๊ณ ์์
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# PowerShell ๊ป๋ค ์ผ๊ณ :
uv tool install vibelign
vib start
```

---
## ๐ค VibeLign์ด ๋ญ๊ฐ์?
AI ์ฝ๋ฉ ๋๊ตฌ(Claude Code, Cursor ๋ฑ)๋ ์ฝ๋๋ฅผ ๋นจ๋ฆฌ ์์ฑํด์. ํ์ง๋ง **๋ฌธ์ **๊ฐ ์์ด์:
| ๋ฌธ์ | VibeLign์ด ํด๊ฒฐํด์ค |
|------|---------------------|
| ๋ชจ๋ ์ฝ๋๊ฐ `main.py`์ ๋ค์ด๊ฐ | AI๊ฐ **์์์ ์ ๋ฆฌ**ํ๊ฒ ํจ |
| AI๊ฐ ์์ฒญํ ๊ฒ๊ณผ ๋ค๋ฅธ ๊ฑธ ํจ | **์ ํํ ์์ ์์ฒญ**์ ๋ง๋ค์ด์ค |
| ์ฝ๋๊ฐ ๋ง๊ฐ์ก๋๋ฐ ๋๋๋ฆด ์ ์์ | **์ธ์ด๋ธ & ๋๋๋ฆฌ๊ธฐ** ๊ธฐ๋ฅ ์ ๊ณต |
**์ด๋ค AI ๋๊ตฌ์๋ ํจ๊ป ์ธ ์ ์์ด์**: Claude Code ยท Cursor ยท Codex ยท OpenCode
---
## ๐ ๋ฑ 3๊ฐ์ง๋ง ๊ธฐ์ตํ์ธ์
```
AI๊ฐ ์ฝ๋ฉํ๊ธฐ ์ โ vib checkpoint "์์
์ " # ์ธ์ด๋ธ
AI๊ฐ ๋ง์ณค์ด โ vib undo # ๋๋๋ฆฌ๊ธฐ
๊ด์ฐฎ์์ก์ด โ vib checkpoint "์๋ฃ" # ๋ค์ ์ธ์ด๋ธ
```
> Git ๋ชฐ๋ผ๋ ๋ผ์. ๊ทธ๋ฅ `vib`๋ง ์น๋ฉด ๋ผ์.
---
## ๐ 3๋จ๊ณ๋ก ์์ํ๊ธฐ
**Mac / Linux**
```bash
# 1. ์ค์น
pip install vibelign
# 2. ํ๋ก์ ํธ ํด๋๋ก ์ด๋
cd my-project
# 3. ์์!
vib start
```
**Windows** (PowerShell)
```powershell
# 1. uv ์ค์น โ ์ต์ด 1ํ (PATH ์๋ ์ค์ , ๊ฒฝ๊ณ ์์)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# PowerShell ๊ป๋ค ๋ค์ ์ผ๊ณ :
# 2. vibelign ์ค์น
uv tool install vibelign
# 3. ํ๋ก์ ํธ ํด๋๋ก ์ด๋ ํ ์์!
cd my-project
vib start
```
---
## ๐ ๋ชจ๋ ๋ช
๋ น์ด
### ๊ธฐ๋ณธ (๊ผญ ์์๋๊ธฐ)
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib start` | ์ฒ์ ํ ๋ฒ๋ง! ํ๋ก์ ํธ ์ธํ
|
| `vib checkpoint "๋ฉ์์ง"` | ์ง๊ธ ์ํ ์ ์ฅ (๊ฒ์ ์ธ์ด๋ธ์ฒ๋ผ) |
| `vib checkpoint` | ์ ์ฅํ ๋ ๋ฉ์์ง ์
๋ ฅํ๋ผ๊ณ ๋ธ |
| `vib undo` | ๋ง์ง๋ง ์ธ์ด๋ธ ์ง์ ์ผ๋ก ๋์๊ฐ |
| `vib history` | ์ธ์ด๋ธ ๋ชฉ๋ก ๋ณด๊ธฐ |
| `vib backup-db-viewer --json` | Rust ๋ฐฑ์
DB๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ํ์ธ |
| `vib backup-db-maintenance --json` | ๋ฐฑ์
DB ํ์ผ ์ ๋ฆฌ ๊ณํ์ dry-run์ผ๋ก ํ์ธ |
| `vib backup-db-maintenance --apply --json` | DB ํ์ผ ๋ฐฑ์
ํ WAL ์ ๋ฆฌ์ ์กฐ๊ฑด๋ถ DB ์์ถ ์คํ |
### AIํํ
์ฝ๋ฉ ์์ฒญํ ๋
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib patch "๋ฒํผ ์ถ๊ฐํด์ค"` | AI์๊ฒ ์ด๋ป๊ฒ ์์ ํ ์ง ์๋ ค์ค (ํ๊ตญ์ด OK!) |
| `vib anchor` | AI๊ฐ ์์ ํด๋ ๋๋ ๊ณณ์ ํ์ํด์ค |
| `vib scan` | ํ์ผ ์ ๋ฆฌ + ์ต์ ์ํ ํ์ธ |
### VibeLign patch ๊ท์น
- ๋ณตํฉ ์์ฒญ์ `intent / source / destination / behavior_constraint`๋ก ๋จผ์ ๋ถํดํ๋ค.
- `์ญ์ `์ `์ด๋`์ด ๊ฐ์ด ๋์ค๋ฉด, ์ฌ์ฉ์๊ฐ ๋ถ๋ช
ํ ์ญ์ ๋ฅผ ์ํ์ง ์๋ ํ ์ด๋ + ๋ณด์กด์ผ๋ก ๋ณธ๋ค.
- `source`์ `destination`์ ๊ฐ์ ๊ท์น์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ง๊ณ ์ญํ ๋ณ๋ก ๋ฐ๋ก ํด์ํ๋ค.
- patch contract๋ codespeak ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด ํ
์คํธ์ ๋ฌธ์๋ ๊ฐ์ด ๊ฐฑ์ ํ๋ค.
- ์ฉ์ด๋ ๊ณตํต ๋ฌธ์์ glossary ๊ธฐ์ค์ผ๋ก ๋ง์ถ๋ค.
### ํ์ธํ๊ณ ๊ฒ์ฆํ ๋
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib doctor` | ํ๋ก์ ํธ ๊ฑด๊ฐ ์ํ ํ์ธ |
| `vib explain` | ๋ญ๊ฐ ๋ฐ๋์๋์ง ์ฌ์ด ๋ง๋ก ์ค๋ช
|
| `vib guard` | ์ฝ๋๊ฐ ๋ง๊ฐ์ง์ง ์์๋์ง ํ์ธ |
| `vib ask ํ์ผ๋ช
.py` | ํ์ผ์ด ๋ญ ํ๋์ง ์ค๋ช
ํด๋ฌ๋ผ๊ณ ํจ |
### ํ์ผ ๋ณดํธ
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib protect ํ์ผ๋ช
.py` | ์ค์ํ ํ์ผ ์ ๊ธ (AI๊ฐ ๋ชป ๊ฑด๋๋ฆผ) |
| `vib protect --list` | ์ ๊ทผ ํ์ผ ๋ชฉ๋ก ๋ณด๊ธฐ |
| `vib protect --remove ํ์ผ๋ช
.py` | ์ ๊ธ ํด์ |
| `vib secrets --staged` | ์ง๊ธ ์ปค๋ฐํ ๋ด์ฉ์์ API ํค, ํ ํฐ, `.env` ํ์ผ ์ฐจ๋จ |
### ์ค์ & ๋ด๋ณด๋ด๊ธฐ
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib config` | API ํค ์ค์ |
| `vib export claude` | Claude Code์ฉ ์ค์ ํ์ผ ๋ง๋ค๊ธฐ |
| `vib export cursor` | Cursor์ฉ ์ค์ ํ์ผ ๋ง๋ค๊ธฐ |
| `vib export opencode` | OpenCode์ฉ ์ค์ ํ์ผ ๋ง๋ค๊ธฐ |
### ๊ธฐํ ์ ์ฉํ ๊ฒ๋ค
| ๋ช
๋ น์ด | ํ๋ ์ผ |
|--------|---------|
| `vib watch` | ํ์ผ ๋ณ๊ฒฝ ์ค์๊ฐ ๊ฐ์ |
| `vib bench` | ์ต์ปค๊ฐ ์ผ๋ง๋ ํจ๊ณผ์ ์ธ์ง ํ
์คํธ |
| `vib manual` | ์์ธ ์ฌ์ฉ ์ค๋ช
์ ๋ณด๊ธฐ |
| `vib rules` | AI ๊ฐ๋ฐ ๊ท์น ์ ์ฒด ๋ณด๊ธฐ |
| `vib transfer` | AI ๋๊ตฌ ์ ํ์ฉ `PROJECT_CONTEXT.md` ์์ฑ |
| `vib transfer --handoff` | Session Handoff ๋ธ๋ก ์ถ๊ฐ โ ์ AI๊ฐ ๋ฐ๋ก ์ด์ด์ ์์
๊ฐ๋ฅ |
| `vib transfer --handoff --session-summary "์์
์์ฝ" --first-next-action "๋ค์ ํ ์ผ"` | handoff ์์ฝ๊ณผ ๋ค์ ์์
์ ์ง์ ์ง์ |
| `vib transfer --handoff --dry-run` | ํ์ผ ์ ์ฅ ์์ด handoff ๋ด์ฉ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ |
| `vib completion` | ํญ ๋๋ฅด๋ฉด ์๋์์ฑ๋๊ฒ ์ค์ |
| `vib install` | ์ค์น ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์๋ ค์ค |
---
## ๐ก ์ถ์ฒํ๋ ํ๋ฆ
```bash
# ์ฒ์ ์์ํ ๋
vib start
# AI๊ฐ ์ฝ๋ฉํ๊ธฐ ์
vib checkpoint "๋ก๊ทธ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ ์ "
vib doctor --strict
vib patch "๋ก๊ทธ์ธ ๋ฒํผ ๋ง๋ค์ด์ค"
# AI๊ฐ ์ฝ๋ฉํ ํ
vib explain --write-report
vib guard --strict --write-report
# ๋ค ๋์ผ๋ฉด
vib checkpoint "๋ก๊ทธ์ธ ๊ธฐ๋ฅ ์์ฑ!"
# ์ค์ํ์ผ๋ฉด
vib undo
# ํ ํฐ ํ๋ ๋๋ฌ ๋๋ AI ํด ์ ํ ์ ์
vib transfer --handoff # Session Handoff ๋ธ๋ก ์์ฑ
vib transfer --handoff --no-prompt --print # ์๋ ์์ฑ + ์ฝ์ ์ถ๋ ฅ
vib transfer --handoff --session-summary "ํ์ฌ ์ธ์
์์
" --first-next-action "ํ
์คํธ ์ฌ์คํ"
vib transfer --handoff --dry-run # ์ ์ฅ ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
# ์ AI์๊ฒ: "PROJECT_CONTEXT.md ์๋จ์ Session Handoff ๋ธ๋ก ๋จผ์ ์ฝ์ด์ค"
```
`transfer` ํธํ์ฑ: `--handoff`๋ `--compact` ๋๋ `--full`๊ณผ ํจ๊ป ์ธ ์ ์์ต๋๋ค.
์ด์ `vib start`๋ฅผ ์คํํ๋ฉด Git ์ ์ฅ์์์๋ ๋น๋ฐ์ ๋ณด ์ปค๋ฐ ๋ณดํธ๋ ์๋์ผ๋ก ์ผ์ ธ์.
์ปค๋ฐ ์ ์ ์ง๊ธ ์ฌ๋ฆฌ๋ ค๋ ๋ด์ฉ์์ API ํค, ํ ํฐ, ๊ฐ์ธํค, `.env` ๊ฐ์ ๋น๋ฐ์ ๋ณด ํ์ผ์ ๊ฒ์ฌํด์ ์ค์ ์
๋ก๋๋ฅผ ๋ง์์ค์.
```bash
# ํ์ํ๋ฉด ์๋ ๊ฒ์ฌ๋ ๊ฐ๋ฅ
vib secrets --staged
```
---
## ๐ง ์ค์น ๋ฐฉ๋ฒ
### ๋ฐฉ๋ฒ 1: uv (์ถ์ฒ, ๋น ๋ฆ)
```bash
uv tool install vibelign
```
> **์ค์น ํ "is not on your PATH" ๊ฒฝ๊ณ ๊ฐ ๋จ๋ฉด:**
> ```bash
> uv tool update-shell
> ```
> ๊ทธ ๋ค์ ํฐ๋ฏธ๋ ๊ป๋ค ๋ค์ ์ผ๋ฉด `vib` ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํด์.
> **bash ์**์ ์ด๋ค๋ฉด bash ์์์ `uv tool update-shell`์ ์คํํ๊ฑฐ๋:
> ```bash
> echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
> ```
### ๋ฐฉ๋ฒ 2: pip
```bash
pip install vibelign
```
์ค์นํ๋ฉด `vib`๋ `vibelign` ๋ ๋ค ์ธ ์ ์์ด์.
### ๋ฐฉ๋ฒ 3: ๋ฐ์คํฌํฑ ์ฑ (GUI)
์ต์ `.dmg` (macOS, Apple Silicon) ๋๋ `.exe` / `.msi` (Windows) ๋ฅผ
[Releases ํ์ด์ง](https://github.com/yesonsys03-web/VibeLign/releases/latest) ์์ ๋ฐ์ผ์ธ์.
GUI ์๋ `vib` ๋ฐํ์์ด ํจ๊ป ๋ฒ๋ค๋ง ๋์ด ์์ด์ ๋ณ๋์ CLI ์ค์น๊ฐ ํ์ ์์ด์.
> macOS ์ฒซ ์คํ ์ "์ฑ์ด ์์๋์์ต๋๋ค" ์ค๋ฅ๊ฐ ๋จ๋ฉด ํฐ๋ฏธ๋์์ `xattr -rc vibelign-gui.app` ์คํ
> (Apple ๊ณต์ฆ(notarization) ์์ด ๋ฐฐํฌ๋ ad-hoc ์๋ช
์ด๋ผ ์ ์์ ์ธ Gatekeeper ๊ฒฝ๊ณ ์์).
### Windows โ pip์ผ๋ก ์ค์น ํ `vib`๊ฐ ์ ๋ ๋
pip์ผ๋ก ์ค์นํ๋ฉด `vib.exe`๊ฐ Python `Scripts` ํด๋์ ๋ค์ด๊ฐ๋๋ฐ, ์ด ํด๋๊ฐ PATH์ ์์ผ๋ฉด `vib` ๋ช
๋ น์ด๋ฅผ ์ธ์ ๋ชปํด์.
์ค์นํ ๋ ๋จ๋ ๊ฒฝ๊ณ ๋ฉ์์ง์ ์ถ๊ฐํด์ผ ํ ๊ฒฝ๋ก๊ฐ ์ ํํ ๋์ ์์ด์:
```
WARNING: The scripts vib.exe ... are installed in 'C:\Users\...\Scripts' which is not on PATH.
```
**์๋์ผ๋ก PATH ์ค์ ํ๋ ๋ฐฉ๋ฒ:**
1. `Win + R` โ `sysdm.cpl` ์
๋ ฅ โ ์ํฐ
2. **๊ณ ๊ธ** ํญ โ **ํ๊ฒฝ ๋ณ์**
3. **์์คํ
๋ณ์**์ `Path` โ **ํธ์ง**
4. **์๋ก ๋ง๋ค๊ธฐ** ํด๋ฆญ ํ ๊ฒฝ๊ณ ๋ฉ์์ง์ ๋์จ `Scripts` ๊ฒฝ๋ก ๋ถ์ฌ๋ฃ๊ธฐ
- ์: `C:\Users\์ฌ์ฉ์์ด๋ฆ\AppData\Local\Programs\Python\Python312\Scripts\`
5. ํ์ธ โ PowerShell ์์ ํ ๊ป๋ค ๋ค์ ์ผ๊ธฐ
> **ํ:** `uv tool install vibelign`์ ์ฐ๋ฉด ์ด ๊ณผ์ ์ด ํ์ ์์ด์ โ PATH ์๋ ์ค์ .
---
## ๐ ๋ ์์ธํ ์๊ณ ์ถ์ผ๋ฉด
```bash
vib manual # ์์ธ ์ฌ์ฉ ์ค๋ช
์
vib manual rules # AI ๊ฐ๋ฐ ๊ท์น๋ง ๋ณด๊ธฐ
vib rules # rules๋ ๊ฐ์
```
---
## ๐ฏ ์ฐ๋ฆฌ ์ฝ์
> *"AI ์ฝ๋ฉ์ ๋น ๋ฅด๋ค. ํ์ง๋ง ์์ ์ฅ์น ์์ผ๋ฉด ๋ง๋ ๊ฑธ ๋ค ๋ ๋ฆด ์ ์๋ค."*
VibeLign์ด ๋ณด์ฅํ๋ ๊ฒ:
- โ
1์ด ๋ง์ ์ธ์ด๋ธ (`vib checkpoint "์ค๋ช
"`)
- โ
1์ด ๋ง์ ๋๋๋ฆฌ๊ธฐ (`vib undo`)
- โ
Git ๋ชฐ๋ผ๋ ๋จ
- โ
์ด๋ณด์๋ ์ฝ๊ฒ ์ธ ์ ์์
---
โญ **VibeLign์ด ์ฝ๋ ์ ์ฅํด์คฌ์ผ๋ฉด Star ํ๋ ๋ถํํด์ โ ๊ฐ์ฌํฉ๋๋ค!**
---
## ๐ ์
๋ฐ์ดํธ ๋ด์ญ (Release Notes)
**v2.2.20** โ Code Explorer ์ฌ์ด๋๋ฐ์ docs ํธ๋ฆฌ + ์นดํ
๊ณ ๋ฆฌ๋ณ ์ปฌ๋ฌ ๊ตฌ๋ถ:
- ๐ **์ฌ์ด๋๋ฐ์ `docs/` ํด๋ + `.md` ๋ฏธ๋ฆฌ๋ณด๊ธฐ** โ ์์ง `project_scan`(์ฝ๋ ๋ถ์ ํ์ดํ๋ผ์ธ๊ณผ ๊ณต์ )๊ณผ ๋ณ๋๋ก Tauri ์ ์ฉ `list_code_files` ์ค์บ๋๋ฅผ ์ ์ค. `docs/superpowers/specs/*.md`, wiki, release notes ๋ฑ์ Markdown ๋ฌธ์๊ฐ ํธ๋ฆฌ์ ๋
ธ์ถ๋๊ณ ๋ทฐ์ด์์ Markdown ์ธ์ด ํ๊ทธ๋ก ์ด๋ฆผ. anchor_tools/patch_suggester/doctor_v2/risk_analyzer ๋ฑ ์ฝ๋ ๋๋ฉ์ธ ๋ถ์์ ๊ทธ๋๋ก ์ ์ง.
- ๐จ **4์ ํญ ์นดํ
๊ณ ๋ฆฌ ์ปฌ๋ฌ๋ง** โ code(๋
น) / docs(์ฃผํฉ) / tests(๋ณด๋ผ) / other(ํ์). ํ์ผ์ ํ์ฅ์ยท๊ฒฝ๋ก(`.test.*`, `__tests__/`, `spec/`, `tests/`)๋ก, ๋๋ ํฐ๋ฆฌ๋ ํ์ ํ์ผ ๋ค์๊ฒฐ๋ก ์๋ ํ์ . ๊ฐ ํ์ 4px ์ผ์ชฝ ์ก์ผํธ ๋ฐ + ์นดํ
๊ณ ๋ฆฌ ๋ฐฐ๊ฒฝ ํดํธ + ์นดํ
๊ณ ๋ฆฌ ๋ํธ โ ํ๋์ ๊ตฌ๋ถ.
- ๐งฉ **`vib/*.ts` ANCHOR ๋ง์ปค ์ผ๊ด ๋ณด๊ฐ** โ GUI ๋๋ฉ์ธ ๋ชจ๋ 16๊ฐ + DocsViewer ํ
์คํธ 2๊ฑด์ `// === ANCHOR: NAME_START === / _END ===` ์ถ๊ฐ. `vib guard --strict` ์ ์ต์ปค ๊ฒฝ๊ณ ๊ฒ์ฆ์ด GUI ์ ์์ญ์ ์ ์ฉ๋จ.
**v2.2.19** โ GUI ์ฝ๋ ํ์๊ธฐ (read-only ์์ค ๋ทฐ์ด):
- ๐ฒ **์ `CODE EXPLORER` ํญ** โ ํ๋ก์ ํธ ์์ค ํธ๋ฆฌ๋ฅผ ํด๋ ๋จ์๋ก ํ์(1๋จ๊ณ ๊ธฐ๋ณธ ํผ์นจ, ๊ฒ์ ์ ์๋ ํผ์นจ)ํ๊ณ ์ ํ ํ์ผ์ ๋ผ์ธ ๋ฒํธยท์ธ์ดยท์ค์ยท๋ฐ์ดํธ์ ํจ๊ป read-only ๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ. ๊ฒ์์ ๊ฒฝ๋กยท์นดํ
๊ณ ๋ฆฌยทimport ๋งค์นญ. DocsViewer ์ ๋ถ๋ฆฌ๋ ๋๋ฉ์ธ์ผ๋ก page/layout/tree/viewer/toolbar/line ์ปดํฌ๋ํธ๋ฅผ ๋๋ `App.tsx` ๋ ํญ ์ฐ๊ฒฐ๋ง ๋ด๋น.
- ๐ **Rust `read_code_file` command + `code_access.rs` ๊ฐ๋** โ ๋ฃจํธ ๋ฐ ํ์ถ(`..`, ์ ๋๊ฒฝ๋ก, Windows UNC/๋๋ผ์ด๋ธ, symlink) ๊ฑฐ๋ถ, hidden/generated ๋๋ ํฐ๋ฆฌ(`.git`, `node_modules`, `target`โฆ) ์ ์ธ, Windows ์์ฝ ๋๋ฐ์ด์ค๋ช
(`NUL`, `CON`, `COM1`โฆ) ์ฐจ๋จ, ํ์ฅ์ allowlist, ๋ฐ์ด๋๋ฆฌ/๋น-UTF-8 ๊ฑฐ๋ถ, ํฌ๊ธฐ ์บก(์ฝ๋ 1MB / ๋ฐ์ดํฐ 5MB). BOM strip + CRLF ์ ๊ทํ + SHA-256 ํด์.
- ๐งฉ **Diff ํ์ฅ seam (`CodeDiffViewer`)** โ red/green diff ์ปดํฌ๋ํธ ๋ฏธ๋ฆฌ ๋ถ๋ฆฌ, ์ค์ diff ์์ค๊ฐ ๋ถ๊ธฐ ์ v1 ์์๋ ๋นํ์ฑ(๋ฏธ๋ง์ดํธ).
**v2.2.18** โ ๊ธฐํ ๋ฌธ์ ์ฝ๋ ๋๊ธฐํ + GUI tsconfig ํ
์คํธ ์ ์ธ:
- ๐ **superpowers plan/spec ๋ฌธ์ 5๊ฐ์ "ํ์ฌ ๊ตฌํ ๋์กฐ ๋ฉ๋ชจ (2026-05-14)" ์ถ๊ฐ** โ `mcp-host-llm-pivot-plan`, `๊ท์น์์ ์-3`, `์ํด๋ฆญ์ค์น-๊ธฐํ์_์ด์`, `์ง์์ ์ฅ๊ณ -๊ธฐํ์`, `mcp-host-llm-pivot-eval-runbook` ์ ํค๋์ "์ง๊ธ ์ฝ๋์ ์ค์ ๊ฒฉ์ฐจ" ๋ฅผ ๋ช
์. MCP primitive 2๊ฐ mainlined ์ฌ์ค, `vib knowledge` ๋ฏธ๊ตฌํ ์ฌ์ค, `claude doctor` v1 ์ฑ๊ณต ๊ธฐ์ค ์ ์ธ ์ฌ์ค ๋ฑ์ด ๋ฌธ์ ์๋จ์์ ๋ฐ๋ก ๋ณด์. ๋ฏธ๋ ๋น์ ๊ณผ v1 ํ์ค์ ๋ถ๋ฆฌํด ์ฝ๋๋ก.
- ๐งน **`vibelign-gui/tsconfig.json` ์์ ํ
์คํธ ํ์ผ ์ ์ธ** โ `src/**/__tests__/**`, `*.test.{ts,tsx}`, `src/test/**` ๊ฐ `tsc && vite build` ์ ๋๋ ค ๋ค์ด๊ฐ ๊ฐ์ง type error ๋ฅผ ๋ฟ๋ ๋
ธ์ด์ฆ ์ ๋ฆฌ. `exclude` ํญ๋ชฉ ์ถ๊ฐ๋ก production ๋น๋๋ง ๊นจ๋ํด์ง๊ณ vitest ์คํ์๋ ์ํฅ ์์.
**v2.2.17** โ PyPI publish ํ ์ ์ฒด ํด์ (macos-13 โ macos-latest):
- โก **macOS wheel runner ๋ฅผ Apple Silicon ์ผ๋ก ๊ต์ฒด** โ `macos-13` (Intel x86_64) runner pool ์ด GitHub Actions ์์ ๋ง์ฑ ํ ์ ์ฒด. v2.2.12 ๋ถํฐ PyPI publish ๊ฐ ์๊ฐ ๋จ์๋ก ๋ฌถ์์. `macos-latest` (Apple Silicon arm64) ๋ ์ด ๋จ์๋ก ์กํ. ํธ๋ ์ด๋์คํ: Intel Mac ์ฌ์ฉ์๋ PyPI binary wheel ๋์ sdist ๋ก ์ค์น (Rust ํด์ฒด์ธ ํ์).
**v2.2.16** โ Phase 9 CI ๊ทธ๋ฆฐ์
(MCP checkpoint handler ํ
์คํธ):
- ๐ข **`test_handle_checkpoint_create_*` 2๊ฑด ์คํจ fix** โ Rust ์์ง migration ์์ฌ. `handle_checkpoint_create` ๊ฐ `file_count == 0` ๋ `summary is None` ๊ณผ ๋์ผํ๊ฒ "blocked" ๋ก audit. list-checkpoints ํ
์คํธ๊ฐ `router.list_checkpoints` ์ฌ์ฉํด์ Rust ์์ง SQLite ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋๋ก. v2.2.11 ๋ถํฐ ๋นจ๊ฐ๋ Phase 9 cross-platform CI green.
**v2.2.15** โ post-commit hook v5: v3 ๋ถ๊ธฐ ์์ ๋ณต์:
- ๐ **์๋ ๋ฐฑ์
fallback ์์ v3 ์ผ๋ก ๋๋๋ฆผ** โ v4 ์ "์ ๋๊ฒฝ๋ก ๋จผ์ " ๊ตฌ์กฐ๊ฐ OpenCode + GPT-5.5 ๊ฐ์ ์ผ๋ถ LLM commit tool ์์ ์๋ ๋ฐฑ์
์ ์ ๋ถ ๋๋ฝ์ํด (์ฌ์ฉ์ ์ ๊ณ ๋ก ์ฌํ). v5 ๋ v3 ์ ๋์ผํ๊ฒ PATH ๋ถ๊ธฐ๋ฅผ ์์ ๋๊ณ , ์ ๋๊ฒฝ๋ก ๋ถ๊ธฐ๋ ๋ง์ง๋ง fallback ์ผ๋ก ๊ฐ๋ฑ โ PATH ๊ฐ ๋น์ฝํ GUI commit tool ์ผ์ด์ค๋ง ์ปค๋ฒ. marker v5 ๋ก bump, v1-v4 hook ๋ค์ `vib start` ์์ ์๋ ๊ต์ฒด.
**v2.2.14** โ `RUST_ENGINE_INTEGRITY_FAILED` runtime self-heal:
- ๐ **๋ฒ๋ค ์์ง integrity ๊ฐ macOS ์์ ์๋ ํ๋ณต** โ v2.2.13 ์ CI codesign step ๋ง ๋ณด๊ฐํด์, ์ฌ์ฉ์๊ฐ ๋ก์ปฌ์์ `npm run tauri build` (Intel/ARM Mac) ๋ก ์ง์ ๋น๋ํ GUI ์์ integrity check ๊ฐ ๊ทธ๋๋ก ํญ๋ฐ. ๋ฐํ์์์ `codesign --verify --strict` ๊ฐ ํต๊ณผํ๋ binary ๋ฉด `.sha256` manifest ๋ฅผ ์๋ ๊ฐฑ์ ํด ํ๋ณตํ๋ค. Windows/Linux ๋ codesign ์ ๋ขฐ ์ ํธ๊ฐ ์์ด tamper ๊ฒ์ฌ ๊ทธ๋๋ก ์ ์ง.
**v2.2.13** โ ์๋ ๋ฐฑ์
์ ํฉ์ฑ hotfix (GUI + GUI commit tool):
- ๐ฉน **macOS GUI ์ `RUST_ENGINE_INTEGRITY_FAILED` ํด์** โ `codesign --deep` ๊ฐ bundled `vibelign-engine` binary ์ ์๋ช
blob ์ ์ถ๊ฐํ ํ `.sha256` manifest ๊ฐ ์ฌ์์ฑ๋์ง ์์ ๋ชจ๋ Rust ์์ง ํธ์ถ (history, BACKUPS) ์ด integrity check ๋ก ํญ๋ฐํ๋ ํ๊ท. CI ์์ codesign ์งํ manifest ๋ฅผ ์ฌ์์ฑํ๋๋ก step ๋ณด๊ฐ.
- ๐ **post-commit ์๋ ๋ฐฑ์
์ด `vib` PATH ์ ์์กดํ์ง ์์** โ Sourcetree / VS Code / Tower ์ commit ์ launchd PATH ๋ง ์์ํด `~/.local/bin` ์ด ๋น ์ง๋ ๊ฒฝ์ฐ๊ฐ ํํจ. ๋ชจ๋ `command -v vib` fallback ์ด false โ ์๋ ๋ฐฑ์
๋๋ฝ์ด๋ ํ๊ท. install ์์ ์ `vib` / `vibelign` / `python -m vibelign.cli.vib_cli` ์ ๋ ๊ฒฝ๋ก๋ฅผ ์บก์ฒํด PATH ๋ถ๊ธฐ๋ณด๋ค ๋จผ์ ์๋. marker v4 ๋ก bump, v1-v3 hook ๋ค์ `vib start` ์์ ์๋ ๊ต์ฒด.
- ๐ง **CI ์์ Linux ๋น๋ ์ ์ธ** โ wheel publish + Python smoke build ๊ฐ Ubuntu ์์ ๋น ์ง. ํ๊ฒ์ macOS + Windows.
**v2.2.12** โ pre-commit hook ์ ์ฐํ (guard advisory + skip env):
- ๐ข **`vib guard --strict` ๊ฐ commit ์ ๋ง์ง ์์** โ guard ์คํจ๋ stderr ์ ํ ์ค ์๋ฆผ๋ง ์ถ๋ ฅํ๊ณ commit ํต๊ณผ. `vib secrets --staged` ๋ ๊ทธ๋๋ก ์ฐจ๋จ (์ํฌ๋ฆฟ ๋์ถ์ ๋น๊ฐ์ญ, ๊ตฌ์กฐ drift ๋ ๊ฐ์ญ์ด๋ผ ๋น๋์นญ). guard ๊ฐ ์ก๋ drift ๋ `vib doctor` / ๋ค์ ์์
์์ ๊ณ์ ์กํ.
- ๐ช **`VIBELIGN_SKIP_HOOK=1 git commit ...`** โ 1ํ์ฉ ์ฐํ (`--no-verify` ์๋-๋ช
ํ ๋ฒ์ , vib ์์ฒด๊ฐ ์คํ๋์ง ์์).
- ๐ **`VIBELIGN_STRICT_GUARD=1`** โ strict ํ์ฉ opt-in. ์ ์ฐจ๋จ ๋์ ๋ณต๊ท.
- โป๏ธ **๊ธฐ์กด hook ์๋ ์ฌ์ค์น** โ `secrets-pre-commit v1` / `pre-commit-enforcement v1`/`v2` ์ด๋ marker ๋ ๋ค์ `vib start` ์์ v3 ๋ก ์๋ ๊ต์ฒด. ์๋ ์ ๋ฆฌ ๋ถํ์.
**v2.2.11** โ GUI Patch ์นด๋ ๋
ธ์ถ ์ ๊ฑฐ (์ ํ๋ ๊ธฐ๋ฐ deprecation):
- ๐ซ **Patch ์นด๋ ๊ธฐ๋ณธ ๋
ธ์ถ์์ ์ ๊ฑฐ** โ v2.2.10 ์ธก์ ์์ `vib patch` ์์ฐ ๋ถํฌ ์ ํ๋๊ฐ ์ฌ์ฉ์ ์ค ์์ฒญ 7๊ฑด ์ค 0๊ฑด์ด์์ (ํค์๋ ํจ์ : `--json` โ ๋ฌด๊ดํ Python docs ๋ช
๋ น ํ์ผ, `--preview` โ ๋ฌด๊ดํ backup-restore ํ์ผ). ์ฌ์ฉ์๊ฐ ์ถ๋ ฅ์ ๋ฌด๋นํ์ ์ผ๋ก ๋ฐ๋ฅผ ๊ฒฝ์ฐ ๋ฌด๊ด ํ์ผ์ด ์๋ชป ์์ ๋ ์ํ์ด ๊ฐ์ฅ ํฐ surface ์์. ์ ๊ท/๊ธฐ์กด ์ฌ์ฉ์ ๋ชจ๋ Home ์นด๋ ๋ชฉ๋ก์์ ๋ ์ด์ ๋ณด์ด์ง ์์. CLI `vib patch` ๋ ๊ทธ๋๋ก ์ ์ง. ์์ฐ์ด ํจ์น๋ Claude Code / Cursor ์์ ์ง์ (vibelign-mcp ๋ `vib start` ์ ์๋ ๋ฑ๋ก).
**v2.2.10** โ MCP host-LLM pivot PoC + BACKUPS ํ์ด์ง๋ค์ด์
+ Explain ์นด๋ ์ต์
์ ๋ฆฌ:
- ๐ง **์ ๊ท MCP ๋๊ตฌ** โ `anchor_read_content` (์ต์ปค ๊ฒฝ๊ณ ์ ํ
์คํธ read, path traversal ๋ฐฉ์ง, `_START`/`_END` ์ ๋ฏธ์ฌ ์๋ ์ ๊ทํ) + `project_map_get` (ํ๋ก์ ํธ ์นดํ
๊ณ ๋ฆฌ/ํ์ผ/์ต์ปค ์ธ๋ฑ์ค ์ผ๊ด ๋ฐํ). host LLM(Claude Code/Cursor)์ด ์ฌ์ฉ์ ์์ฐ์ด ์์ฒญ โ ์ ํํ `file:anchor` ๋งคํ์ ์ง์ ์ํ. ์ฌ์ฉ์ ์ค ์์ฒญ 6๊ฑด์์ baseline `vib patch` 0/6 vs host LLM 6/6 ์ธก์ .
- ๐ **BACKUPS ํ์ผ ๊ธฐ๋ก + DB Viewer rows ํ์ด์ง๋ค์ด์
** โ ํ์ด์ง๋น 10๊ฐ, "โ ์ด์ / X / Y ํ์ด์ง ยท MโN / TOTAL / ๋ค์ โ" ํธํฐ. ๋ฆฌ์คํธ๊ฐ ๋์ ๋์ด๋ ์์ ํญ๋ชฉ ๋ค์ ๋ณผ ์ ์์. ๊ฒ์์ด ๋ณ๊ฒฝ ์ 1ํ์ด์ง ๋ฆฌ์
, ์ ํ ํญ๋ชฉ์ด ๋ค๋ฅธ ํ์ด์ง์ ์์ผ๋ฉด ์๋ ์ ํ.
- ๐งน **Explain ์นด๋ `--write-report` / `--json` ์ต์
์ ๊ฑฐ** โ GUI ์นด๋ flags ์์๋ง ์ ๊ฑฐ (CLI ์ ๋์ผ ํ๋๊ทธ๋ ๊ทธ๋๋ก ์ง์, ๋ค๋ฅธ ๋ช
๋ น์ ์ํฅ ์์).
- ๐ ๋๊ทธํธ๋ฉ ์ฆ๊ฑฐ: `vib patch "gui ์ต์คํ๋ ์ธ ์นด๋์์ --write-report --json ์ต์
์ ์ ๊ฑฐํด์ค"` โ `vib_docs_build_cmd.py` ๋ผ๋ ์์ ์๋ฑํ ํ์ผ์ ์ง์ (JSON ํค์๋ ํจ์ ). ์ ๊ท MCP ๋๊ตฌ๋ก ์์
ํ๋ host LLM ์ ์ ๋ต `commandData.ts` ์ฆ์ ์ง์. PR #5 description ๋ถ๋ก ์ฐธ์กฐ.
**v2.2.9** โ v2.2.8 scroll-to-top ๋ฒํผ์ด ์ ๋ณด์ด๋ ํจ์น:
- ๐ง **scroll-to-top ์ด ์ค์ scroll container ์ธ์** โ v2.2.8 ์ listener ๊ฐ `window.scrollY` ๋ง ๋ณด์ mac/Windows ์์ชฝ์์ ๋ฒํผ์ด ์ ๋ณด์ด๋ issue. brutalism ๋ ์ด์์์ด `.page-content` (inner flex child) ์์ scroll ํ๋ฏ๋ก, v2.2.9 ๊ฐ document ์ capture-phase scroll listener + `.page-content.scrollTop` ์ง์ ์ฝ์. ํด๋ฆญ๋ inner container ์ scrollTo ํธ์ถ.
**v2.2.8** โ GUI UX ์์ ๋ ๊ฑด + scroll-to-top ๋ฒํผ:
- ๐ง **๋ณต๊ตฌ ํ๋ณด ์ถ์ฒ โ ํ๋ณด๋ณ AI ์ค๋ช
ํ์** โ LLM ์ candidate-specific `reason` ํ๋๊ฐ rule-based ๊ทผ๊ฑฐ ์๋ ๋ณ๋๋ก ํ์๋๋๋ก ๋ณ๊ฒฝ. 3 ํ๋ณด๊ฐ ๋์ผํ "๊ทผ๊ฑฐ" ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ด๋ issue ํด๊ฒฐ. rule-based 5 ํญ๋ชฉ ๋ฌธ๊ตฌ๋ ์นํํ (์: "์ปค๋ฐ ์งํ ์ ์ฅ" โ "์ฝ๋ ์ ์ฅ ์งํ ๋ง๋ ๋ฐฑ์
").
- ๐ง **CANVAS / RAW HTML ํ๋ฉด โ iframe ์ธ๋ก๊ฐ content/์ฑ UI ์ ๋ง์ถฐ์ง** โ `CanvasViewPane` ์ `RawHtmlCanvasPane` ๋ ๋ค ํด๋ฆฌ์คํฑ ์ถ์ fixed-height ์์ `onLoad` content ์ธก์ + `minHeight: calc(100vh - 200px)` ๋ก ๋ณ๊ฒฝ (sandbox ๋ scripts/forms ์ฌ์ ํ disabled, `allow-same-origin` ๋ง ์ถ๊ฐ). ์งง์ ๋ฌธ์๋ ์ฑ viewport ๋งํผ ์ฐจ์ง, ๊ธด ๋ฌธ์๋ ์ผ์ชฝ ์ฌ์ด๋์ฒ๋ผ page natural scroll. iframe ์ ๋ณ๋ ์คํฌ๋กค๋ฐ ์์.
- โฌ๏ธ **scroll-to-top floating ๋ฒํผ** โ ํ์ด์ง ์คํฌ๋กค์ด 300px ๋์ผ๋ฉด ์ฐํ๋จ์ โ ๋ฒํผ ํ์, ํด๋ฆญ ์ ๋ถ๋๋ฝ๊ฒ ์ต์๋จ์ผ๋ก ์ด๋. ๋ชจ๋ ํ์ด์ง ๊ณตํต.
**v2.2.7** โ ๋ณต๊ตฌ ํ๋ณด ์ถ์ฒ ์ง์ฐ ~46% ๋จ์ถ:
- ๐ **Recovery ํจ๋ ๊ฐ์** โ "๋ณต๊ตฌ ํ๋ณด ์ถ์ฒ ๋ณด๊ธฐ" (Gemini AI ์ถ์ฒ) ์ฒซ ํธ์ถ wall ์ด ~25s โ ~13.6s ๋ก ๋จ์ถ. LLM prompt ์ commit_message ๋ณธ๋ฌธ์ด prompt 28KB ์ 49% ๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ subject ์ฒซ ์ค (200์ cap) ๋ง ๋ณด๋ด๋๋ก ๋ณ๊ฒฝ. ์ถ์ฒ quality ๋ ๋ณด์กด (LLM ๊ฒฐ์ ์ source/created_at/evidence_score/commit_boundary ๊ฐ์ metadata ์ ์์กด, verbose commit body ๋ unused).
- ๐ฆ **`score_path.rs` dormant library** โ `meaningful_overlap` Rust port + 5 parity tests + ipc variant ๊ฐ dormant library ๋ก ์ถ๊ฐ. score_path ์ ์ฒด ํธ๋์ skip-rate ์ธก์ ๊ฒฐ๊ณผ leaf-port batch ROI ~0 ์ผ๋ก ยง9 retraction ๋์ง๋ง artifact ๋ ๋ณด์กด (๋ฏธ๋ ์ฌ์ฉ + Python alias drift ์๋ ๊ฐ์ง).
- โ
์ธก์ -์ฃผ๋ lessons (stub-patch wall diff > cProfile cumtime, skip-rate trap, apples-to-apples harness) ์ด ๋ณธ ๋ฆด๋ฆฌ์ฆ์ prerequisite โ `docs/superpowers/plans/2026-05-13-*-plan.md` ยง9 ์ฐธ์กฐ.
**v2.2.6** โ GUI ๋ฉ๋ชจ๋ฆฌ ์์ฝ ๊ฐ์ + tokenizer Rust ํ ๋:
- ๐ **Phase 3 PoC consumer #13** โ `SessionMemoryCard` ๋ง์ดํธ๊ฐ Python sidecar ํธ์ถ ๋์ in-process Rust (`callEngineDirect({command:"memory_summary_read"})`) ๋ก ์ ํ๋์ด ๋ง์ดํธ ์ ~80 ms ์ง์ฐ์ด ์ฌ๋ผ์ก์ต๋๋ค. audit ๋ก๊ทธ parity ๋ ์์ ํ ๋ณด์กด๋ฉ๋๋ค.
- ๐ฆ **tokenizer Rust leaf port** โ `vibelign-core/src/tokenizer.rs` ๊ฐ `patch_suggester.py` ์ 6 ํ๊ตญ์ด ํ ํฐ leaf ํจ์๋ฅผ dormant library ๋ก ํฌํ
ํ์ต๋๋ค. `tests/fixtures/tokenizer_goldens/` (102 case ร 6 ํจ์ = 612 byte-equal parity record) ๋ก ๊ฒ์ฆํฉ๋๋ค.
- โก **`_normalize_korean_token` pre-sort** โ ๋งค ํธ์ถ `sorted()` ๋ฅผ module-level ์์๋ก ์ฎ๊ฒผ์ต๋๋ค. direct 1M iter 27% ๊ฐ์, recover preview wall ์ noise (caller-side set ์ฒ๋ฆฌ๊ฐ wall dominate).
- โ
**ํฌ๋ก์คํ๋ซํผ pre-flight** โ Windows GNU cross-compile ์ด vibelign-core ์ vibelign-gui/src-tauri ์์ชฝ์์ ํต๊ณผํฉ๋๋ค.
**v2.2.5** โ ๋ฐ์คํฌํฑ ๋ฆด๋ฆฌ์ฆ lockfile ์์ :
- ๐ฆ **npm lockfile ๋ณต๊ตฌ** โ GUI package lock ์ ์ ์ ์ฌ์์ฑํด `npm ci` ๊ฐ ์กด์ฌํ์ง ์๋ `json5-2.2.4.tgz` ๋์ ์ค์ `json5@2.2.3` dependency ๋ฅผ ์ค์นํ๋๋ก ํ์ต๋๋ค.
- โ
**๋ฆด๋ฆฌ์ฆ ๋น๋ ์ฌ์๋** โ ์คํจํ v2.2.4 ๋ฐ์คํฌํฑ GUI ๋ฆด๋ฆฌ์ฆ ์๋๋ฅผ v2.2.5 ๊ฐ ๋์ฒดํฉ๋๋ค.
**v2.2.4** โ ๋ฐ์คํฌํฑ ๋ฆด๋ฆฌ์ฆ ํธํ์ฑ ์์ :
- ๐ ๏ธ **Backup bridge ํธํ์ฑ** โ domain-module bridge ๋ฆฌํฉํ ๋ง ์ดํ์๋ ๊ธฐ์กด GUI ํ๋ฉด์ด build ๋๋๋ก legacy `backupCreate` export ๋ฅผ ๋ณต๊ตฌํ์ต๋๋ค.
- โ
**๋ฆด๋ฆฌ์ฆ ๋น๋ ์ฌ์๋** โ ์คํจํ v2.2.3 ๋ฐ์คํฌํฑ GUI ๋ฆด๋ฆฌ์ฆ ์๋๋ฅผ v2.2.4 ๊ฐ ๋์ฒดํ๋ฉฐ, ๋์ผํ bridge ๋ชจ๋ํ ์์
์ ํฌํจํฉ๋๋ค.
**v2.2.3** โ GUI bridge ๋ชจ๋ํ + ๊ฐ๋ฐ ๋ก๊ทธ ์ ๋ฆฌ:
- ๐งฉ **GUI vib bridge ๋ชจ๋ํ** โ ๊ฑฐ๋ํ `src/lib/vib.ts` command bridge ๋ฅผ domain module ๋ก ๋๋๋ฉด์ ๊ธฐ์กด `src/lib/vib` import ๊ฒฝ๋ก๋ ์ ์งํ์ต๋๋ค.
- ๐ก๏ธ **๊ณ์ฝ ๋ณด์กด ๋ฆฌํฉํ ๋ง** โ Tauri command string, payload shape, Windows onboarding/env ๋์, backup cache singleton ๋์์ ์ ์งํ์ต๋๋ค.
- ๐งน **Tauri dev ๋ก๊ทธ ์ ๋ฆฌ** โ `npm run tauri dev` ๋ ๋ณด์ด๋ Rust warning 2๊ฐ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.
**v2.2.2** โ DocsViewer HTML Canvas + Windows ์์ ํ:
- ๐งญ **Document Control Map Canvas** โ ์๋ฌธ ์์ Outline, Flow, Decisions, Actions, Risks, Glossary ๋ฅผ ์๊ฐ์ ์ผ๋ก ์ฌ๊ตฌ์ฑํ๊ณ bullet ์ค์ฌ ์น์
preview ๋๋ฝ์ `body_preview` ๋ก ๋ณด๊ฐ.
- ๐งพ **Raw HTML artifact mode** โ ์ ํ ๋ฌธ์๋ฅผ sandboxed iframe ์ ์ฝ๊ธฐ ์ฌ์ด article-style HTML ๋ก ๋ ๋๋ง.
- ๐ช **Split ํญ UX** โ ์ฐฝ ํญ๊ณผ ์๊ด์์ด Split ํญ์ ํญ์ ํ์ํ๊ณ , ์ข์ ์ฐฝ์์๋ ๋ด๋ถ ๋ ์ด์์๋ง 1์ด๋ก ๋ฐ์.
- โจ **์ ํ ํญ ํ์ด๋ผ์ดํธ** โ Source/Easy/Canvas/Raw HTML/Split ์ค ํ์ฌ ํญ์ ๊ฒ์ ๋ฐฐ๊ฒฝ + ์ค๋ ์ง ๊ทธ๋ฆผ์๋ก ๊ฐ์กฐ.
- ๐ ๏ธ **Windows ๊ฒฝ๋ก ์์ ** โ `C:\Repo` vs `c:\repo\...` ๊ฐ์ ๋์๋ฌธ์ ์ฐจ์ด์๋ ์ถ๊ฐ ๋ฌธ์ ์์ค ํด๋ ์ ํ์ด ์ ์ ๋์.
**v2.2.0** โ GUI ๋ค์ด๋ ํธ ๋ธ๋ฆฌ์ง + ํตํฉ ์๋ฌ ๋ก๊ทธ + ์๋ ๋ฐฑ์
๊ฐ์์ฑ:
- ๐ **Tauri โ vibelign-core ๋ค์ด๋ ํธ ๋ธ๋ฆฌ์ง** โ GUI ๊ฐ Python `vib` ์๋ธํ๋ก์ธ์ค ์์ด in-process Rust ์์ง์ ์ง์ ํธ์ถ. 6๊ฐ GUI consumer ์ trivial ๋ช
๋ น wall time ์ด ~80ms โ <5ms ๋ก ๋จ์ถ.
- ๐ **GUI ํตํฉ ์๋ฌ ๋ก๊ทธ ๋ทฐ** โ CLI/GUI ์๋ฌ๋ฅผ ํ ํญ์ ํตํฉ, GitHub ์ด์๋ก ๋จ์ผ/๋ค์ค ๋ณด๊ณ , ์์ ์๋ฃ๋ ์๋ฌ๋ฅผ ์ฆ์ ์ ๋ฆฌํ๋ ๋ฒํผ.
- ๐ **์๋ ๋ฐฑ์
์คํจ ๊ฐ์ํ** โ post-commit hook ์ด ๋ ์ด์ silent skip ํ์ง ์์. ํตํฉ ์๋ฌ ๋ก๊ทธ์ ์๋ ๊ธฐ๋ก + git terminal ์ stderr ๋
ธ์ถ.
- ๐ **Rust secret_scan parity** โ `VIBELIGN_SECRET_SCAN_RUST=1` ์ตํธ์ธ ์ Rust ๊ตฌํ ์ฌ์ฉ (10๊ฐ ๊ณจ๋ fixture ๋ก Python ๊ณผ 1:1 parity ๋ณด์ฅ).
- ๐ ๏ธ ๋ค์์ silent regression fix โ `vib memory show` race, `vib doctor | head` BrokenPipeError, integrity manifest ์๋ ์ฌ์์ฑ, GUI listener cleanup, ํ ์นด๋ ๊ทธ๋ฆฌ๋ 1fr 1fr ๋ถ๊ท ํ ์์ .
**Rust/SQLite ์ฒดํฌํฌ์ธํธ ์์ง** (v2.1 ์๋ฆฌ์ฆ):
- `vib checkpoint`, `vib history`, `vib undo`๊ฐ Rust/SQLite ์ฒดํฌํฌ์ธํธ ์์ง์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ฒ๋ค ์์ง์ ์คํํ ์ ์์ผ๋ฉด Python fallback์ด ์ฌ์ฉ์์๊ฒ ํ์๋ฉ๋๋ค.
- ๊ธฐ์กด JSON ์ฒดํฌํฌ์ธํธ(`.vibelign/checkpoints/`)๋ ๋์คํฌ์ ๋ณด์กดํ์ง๋ง ์ SQLite ๊ธฐ๋ฐ ์ด๋ ฅ์ ์๋ import/๋ณํฉํ์ง ์์ต๋๋ค. ์ค๋๋ ์ค๋
์ท์ด ํ์ํ๋ฉด ์
๊ทธ๋ ์ด๋ ์ ์ `.vibelign/checkpoints/`๋ฅผ ๋ฐฑ์
ํด๋์ธ์.
**v2.0.0** โ ๋ฐ์คํฌํฑ GUI + MCP/Patch ๋ชจ๋ํ + AI ์ตํธ์ธ:
- ๐ฅ๏ธ **VibeLign GUI (macOS / Windows)** โ Tauri ๊ธฐ๋ฐ ๋ฐ์คํฌํฑ ์ฑ
- Doctor ํ์ด์ง: ์ํด๋ฆญ ์ง๋จ + ์๋ ์ ์ฉ
- ์ต์ปค์นด๋: ์ต์ปค ์ฝ์
+ intent/aliases ์ฌ์์ฑ (์ฝ๋ ๊ธฐ๋ฐ / AI ๊ธฐ๋ฐ, `--force` ๋ก ๊ธฐ์กด AI ๊ฒฐ๊ณผ ๋ฎ์ด์ฐ๊ธฐ)
- DocsViewer: ๋ฌธ์๋ณ AI ์์ฝ
- Settings: API ํค ๊ด๋ฆฌ, AI ์ตํธ์ธ ์ ์ญ ํ ๊ธ
- ๐ **MCP ์๋ฒ ์ฌ๊ตฌ์ฑ** โ `vibelign/mcp/` ์๋ dispatch/handlers/tool_specs ๋ถ๋ฆฌ
- ๐งฉ **Patch ๋ชจ๋ ๋ถ๋ฆฌ** โ `vibelign/patch/` (builder ยท handoff ยท preview ยท targeting ยท โฆ)
- ๐ค **AI ์ตํธ์ธ** โ consent UI ์ ๊ฑฐ, Settings ์ ์ญ ํ ๊ธ ํ๋๋ก ํตํฉ. Anthropic / OpenAI / Gemini ์๋ ์ ํ
- โก **onedir ๋ฐํ์** โ PyInstaller `onefile โ onedir` ์ ํ์ผ๋ก GUI ์ฝ๋์คํํธ(1~3์ด) ์ ๊ฑฐ
- ๐ท๏ธ **์ต์ปค `_source` ํ๋** โ `anchor_meta.json` ์ `code / ai / manual / ai_failed` ๊ตฌ๋ถ ๋์
ํด AI/์๋ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ๊ธฐ๋ฐ ์ฌ์์ฑ์ผ๋ก๋ถํฐ ๋ณดํธ (`--force` ๋ก ๋ฎ์ด์ฐ๊ธฐ ๊ฐ๋ฅ)
- โ ๏ธ **Breaking**: `vibelign.vib_cli` โ `vibelign.cli.vib_cli`; `vibelign.mcp_server` โ `vibelign.mcp.mcp_server`
- ์์ธํ ๋ด์ฉ์ [CHANGELOG.md](https://github.com/yesonsys03-web/VibeLign/blob/main/CHANGELOG.md) ยท [MIGRATION_v1_to_v2.md](https://github.com/yesonsys03-web/VibeLign/blob/main/MIGRATION_v1_to_v2.md)
**v1.6.0** โ MCP ์๋ฒ + AI ๊ฐ๋ฐ ๊ท์น ์์คํ
:
- `vib mcp` โ MCP(Model Context Protocol) ์๋ฒ ์คํ (Claude Desktop ์ฐ๋)
- `vib start` โ Claude Code์ Cursor์ VibeLign MCP ์๋ ๋ฑ๋ก (๊ธฐ์กด Cursor MCP ์๋ฒ๋ ์ ์ง)
- `vib rules` โ AI ๊ฐ๋ฐ ๊ท์น ์ ์ฒด๋ฅผ CLI์์ ๋ฐ๋ก ํ์ธ
- `vib manual rules` โ ๊ฐ๋ฐ ๊ท์น ์์ธ ๋งค๋ด์ผ
- Anchor intent system โ ์ต์ปค์ ์๋(intent) ์ ๋ณด ์ ์ฅ
- ํ๊ตญ์ด ํ ํฌ๋์ด์ โ patch ์์ฒญ์ ํ๊ตญ์ด๋ก๋ ์ ํํ๊ฒ ํด์
- AI_DEV_SYSTEM โ ์ ์ง๋ณด์์ฑ/ํจ์ ๋์์ธ ๊ท์น ์ถ๊ฐ (Section 6-1, 14)
- `vib scan` ๋ฒ๊ทธ ์์ โ set_intent ์์ฑ ๋๋ฝ ํด๊ฒฐ
**v1.5.32** โ ์ฒดํฌํฌ์ธํธ/๋๋๋ฆฌ๊ธฐ UX ๊ฐํธ + AI ์ค์ ํ์ผ ๋ณดํธ:
- `vib checkpoint` โ ๋ฉ์์ง ์
๋ ฅ ํ๋กฌํํธ ์ง์
- `vib undo` โ ๋ฒํธ ์ ํ + ์ทจ์ ์ต์
`[0]`
- `vib history` โ ์ด ๋จ์ ํ์์คํฌํ ํ์
- `vib start` โ ์ด๋ณด์ ์จ๋ณด๋ฉ + ์ฒซ ์ฒดํฌํฌ์ธํธ ์๋ ์ ์ฅ
- `vib export` โ AGENTS.md, CLAUDE.md, OPENCODE.md, .cursorrules ๋ณดํธ
**v1.5.0** โ ๋ฉํฐ AI ํด ์ค์ ๋ด๋ณด๋ด๊ธฐ:
- `vib export claude` โ Claude Code์ฉ CLAUDE.md ์์ฑ
- `vib export cursor` โ Cursor์ฉ .cursorrules ์์ฑ
- `vib export opencode` โ OpenCode์ฉ OPENCODE.md ์์ฑ
- `vib export antigravity` โ Codex/์์ด์ ํธ์ฉ AGENTS.md ์์ฑ
- ๋ด๋ณด๋ธ ํ์ผ์ VibeLign ๋ง์ปค ์ถ๊ฐ (๋ฎ์ด์ฐ๊ธฐ ๋ฐฉ์ง)
**v1.1.0** โ ์ฝ์๋ชป์ ์ํ ํต์ฌ ๊ธฐ๋ฅ ์ถ๊ฐ:
- `vib init` โ VibeLign ์ด๊ธฐํ/๋ฆฌ์
- `vib start` โ ์ฒ์ ์ฌ์ฉ์ ๊ฐ์ด๋
- `vib checkpoint` / `vib undo` โ Git ์์ด ์ธ์ด๋ธ & ๋๋๋ฆฌ๊ธฐ
- `vib protect` โ ์ค์ ํ์ผ ์ ๊ธ
- `vib ask` โ ํ์ผ ์ค๋ช
AI ํ๋กฌํํธ ์์ฑ
- `vib history` โ ์ฒดํฌํฌ์ธํธ ์ด๋ ฅ ๋ณด๊ธฐ
---
# ๋ผ์ด์ ์ค
MIT