diff --git a/.claude/hooks/guardBash.mjs b/.claude/hooks/guardBash.mjs index 4bcd07bf7..14037b99c 100644 --- a/.claude/hooks/guardBash.mjs +++ b/.claude/hooks/guardBash.mjs @@ -31,10 +31,10 @@ const BLOCKED = [ { pattern: /\bgit\s+checkout\s+(\.|--\s*\.\s*$)/, reason: 'git checkout . 금지 — git checkout -- [파일명]으로 개별 파일만 원복하세요' }, { pattern: /\bgit\s+restore\s+\.\s*$/, reason: 'git restore . 금지 — git restore [파일명]으로 개별 파일만 원복하세요' }, { pattern: /\bgit\s+clean\s+-[a-zA-Z]*f/, reason: 'git clean -f 금지 — rm [파일명]으로 개별 삭제하세요' }, - { pattern: /\bgit\s+reset\s+--hard\b/, reason: 'git reset --hard 금지 — git reset --soft 또는 git revert [커밋]을 사용하세요' }, - { pattern: /\bgit\s+push\s+[^|]*--force\b/, reason: 'git push --force 금지 — git push --force-with-lease를 사용하세요 (그래도 위험, 확인 필요)' }, - { pattern: /\bgit\s+push\s+[^|]*-f\b/, reason: 'git push -f 금지 — git push --force-with-lease를 사용하세요 (그래도 위험, 확인 필요)' }, - { pattern: /\bgit\s+branch\s+-D\b/, reason: 'git branch -D 금지 — git branch -d (소문자)를 사용하세요' }, + { pattern: /\bgit\s+reset\s+--hard\b/, reason: 'git reset --hard 금지 (main 브랜치) — feature branch에서는 허용', onlyMain: true }, + { pattern: /\bgit\s+push\s+[^|]*--force(?!-with-lease)\b/, reason: 'git push --force 금지 — git push --force-with-lease를 사용하세요' }, + { pattern: /\bgit\s+push\s+[^|]*\s-f\b/, reason: 'git push -f 금지 — git push --force-with-lease를 사용하세요' }, + { pattern: /\bgit\s+branch\s+-D\b/, reason: 'git branch -D 금지 (main 브랜치) — feature branch에서는 허용', onlyMain: true }, ] for (const { pattern, reason, onlyMain } of BLOCKED) { diff --git a/src/interactive-os/layout/nodes/split.tsx b/src/interactive-os/layout/nodes/split.tsx index 3dd00c0eb..0cb04bfed 100644 --- a/src/interactive-os/layout/nodes/split.tsx +++ b/src/interactive-os/layout/nodes/split.tsx @@ -54,7 +54,7 @@ defineLayoutNode('split', { return ( -
+
{childIds.map((childId) => renderNode(childId, 'split'))}