
    NiG              	          d Z ddlZddlZddlZddlZddlmZ  eej                  j                  dd            Z	 eej                  j                  d e
 ej                         dz  dz  d	z  d
z                    Ze	d
z  dz  Zedz  Z ej                  d      Z ej                  d      Zdee
   fdZde
defdZde
dee   defdZdefdZedk(  r ej4                   e              yy)uH  pre-commit hook: feedback_*.md 신규 작성 시 MEMORY.md ★ 마커 등록 검증.

사용:
  python3 scripts/hooks/pre-commit-memory-check.py
  SKIP_MEMORY_CHECK=1 python3 scripts/hooks/pre-commit-memory-check.py  # 우회

종료 코드:
  0: 검사 통과 (또는 SKIP_MEMORY_CHECK=1)
  1: 미등록 feedback 파일 발견
    N)PathWORKSPACE_ROOTz/home/jay/workspaceMEMORY_CHECK_FEEDBACK_DIRz.claudeprojectsz%-home-jay--cokacdir-workspace-autosetmemoryz	MEMORY.mdz"^(feedback|bug)_[A-Za-z0-9_]+\.md$z^(feedback|bug)_test_returnc            	         	 t        j                  g ddddt        t                    } | j                  j                         D cg c]#  }|j                         s|j                         % c}S c c}w # t        $ r g cY S w xY w)uF   git diff --cached로 ACM (added/copied/modified) 파일 목록 반환.)gitdiffz--cachedz--name-onlyz--diff-filter=ACMT)capture_outputtextcheckcwd)
subprocessrunstr	WORKSPACEstdout
splitlinesstrip	Exception)resultfs     V/home/jay/workspace/.worktrees/task-2467-dev6/scripts/hooks/pre-commit-memory-check.pyget_staged_filesr      sj    Kd$C	N
 $*==#;#;#=Ka	KKK 	s*   AA7 A2A2/A7 2A7 7BBfilepathc                     t         j                  j                  |       }t        j	                  |      ryt        t        j	                  |            S )u:   feedback_*.md 또는 bug_*.md 패턴 매칭 (test 제외).F)ospathbasenameTEST_EXCLUDE_PATTERNmatchboolFEEDBACK_PATTERN)r   names     r   is_feedback_filer&   *   s>    77H%D!!$' &&t,--    filenamememory_pathsc                 b   t         j                  j                  |       j                  dd      }|D ]l  }|j	                         s	 |j                  d      }|j                         D ]3  }d|vr||v s&| |v s"t         j                  j                  |       |v s2  y n y# t        $ r Y {w xY w)u   파일명이 MEMORY.md 중 하나에 ★ 마커가 있는 라인에 등록됐는지 확인.

    파일명 stem (확장자 제외) 또는 전체 파일명이 ★ 라인에 포함되면 등록된 것으로 간주.
    z.md zutf-8)encodingu   ★TF)r   r   r    replaceexists	read_textr   r   )r(   r)   stemmem_pathcontentlines         r   is_registered_in_memoryr4   2   s    
 77H%--eR8D   	(('(:G**,  $4<8t#3rww7G7G7QUY7Y	    		s   AB"B"B""	B.-B.c                  2   t         j                  j                  d      dk(  ryt               } | D cg c]  }t	        |      s| }}|syt
        t        g}g }|D ]   }t        ||      r|j                  |       " |rt        dt        j                         |D ]   }t        d| t        j                         " t        dt        j                         t        dt        j                         t        d	t        j                         y
yc c}w )NSKIP_MEMORY_CHECK1r   uQ   
[memory-check] 신규/수정 feedback 파일 중 MEMORY.md ★ 마커 미등록:)filez   - u   
해결:uO     1. memory/MEMORY.md 또는 안누 MEMORY.md에 ★ 마커로 인덱싱 추가u=     2. 또는 긴급 우회: SKIP_MEMORY_CHECK=1 git commit ...   )r   environgetr   r&   	WS_MEMORY
ANU_MEMORYr4   appendprintsysstderr)stagedr   feedback_filesr)   unregistereds        r   mainrE   G   s    	zz~~)*c1F!'?A+;A+>a?N?z*LL #&q,7"# bilisist 	0AE!+CJJ/	0k

+_fifpfpqMTWT^T^_) @s   DD__main__)__doc__r   rer   r@   pathlibr   r:   r;   r   r   homeANU_MEMORY_DIRr<   r=   compiler$   r!   listr   r#   r&   r4   intrE   __name__exit r'   r   <module>rR      s#  	 
 	  
  02GHI	bjjnn			i*,/VVYaab   ;.	k)
2::CD !rzz":; 	$s) 	.s .t .c d  *c 8 zCHHTV r'   