
    =R4jl                        d Z ddlZddlZddlZddlZddlZdadad Zd Z	d Z
g dZd Zd	 Z	 	 dd
Zedk(  r ej                   d      Zej%                  ddd       ej%                  ddd       ej'                         Z eej*                  ej,                         Z e ej2                  edd             yy)u  
migrate_capability_matrix_v213.py — ANU v2.13 capability matrix 마이그레이션
(순수 함수, stdlib only)

기존 matrix 의 capabilities 각 항목에 v2.13 권장 lowercase 필드를
누락 시에만 추가함. 기존 값 절대 파괴 금지.

★ main() 에서 write=True 시 파일을 덮어쓸 수 있으나,
  이 task 에서는 함수 정의만이 목적이며 실행은 하지 않음 (main 자동 실행 금지).
    NFc                  N   t         rt        S 	 t        j                  j	                  t        j                  j                  t                    } t        j                  g d| dd      j                  j                         }|xs d ada t        S # t        $ r d aY da t        S w xY w)N)gitz	rev-parsez--show-toplevelT)cwdcapture_outputtext)_GIT_TOPLEVEL_RESOLVED_GIT_TOPLEVEL_CACHEospathdirnameabspath__file__
subprocessrunstdoutstrip	Exception)heretops     =/home/jay/workspace/scripts/migrate_capability_matrix_v213.py_git_toplevelr      s    ""#wwrwwx89nn3T
 & 	 "kT "  #"!#s   A9B B$#B$c                      t         j                  j                  d      } | r| S t               }|r|S t        j                         S )NANU_WORKSPACE)r
   environgetr   getcwd)envr   s     r   _resolve_rootr   /   s7    
**..
)C


/C

99;    c                  V    t         j                  j                  t               ddd      S )uE   automation_capability_matrix.json 의 기본 경로 (동적 resolve).memorystatez!automation_capability_matrix.json)r
   r   joinr    r   r   default_matrix_pathr%   9   s#    77<<7,O r   )	implementedverifiedwiredactivepolicyrollback_costtrust_roots_touchedsemantic_residuebudget_scopec                    t        j                  |       }d|vrt        |j                  dd            |d<   d|vrt        |j                  dd            |d<   d|vr7|j                  d      dv rd	|d<   n|j                  d
      dvrd|d<   nd|d<   d|vr|j                  d      dv rd	|d<   nd|d<   d|vrd|d<   d|vrd|d<   d|vrg |d<   d|vrd|d<   d|vrd|d<   |S )u   
    단일 capability entry 를 deepcopy 후 누락된 v2.13 필드만 추가.
    기존 키는 절대 변경하지 않음.

    Parameters
    ----------
    entry : dict

    Returns
    -------
    dict
    r&   IMPLEMENTEDFr'   VERIFIEDr(   ACTIVE)Tfullr3   WIRED)NF r   canarynoner)   r*   POLICY_REQUIRES_CHAIRr+   MEDIUMr,   r-   r.   chair_approved_goal_id)copydeepcopyboolr   )entryes     r   migrate_entryr@   S   s5    	eA AmU ;<- QUU:u56* a55?n,AgJUU7^#77!AgJAgJ q55?n, AhK AhK q-( a%/ A%#%
  " %
 Q4.Hr   c           	         t        j                  |       }t        |t              s|S |j	                  d      }t        |t              rD|j                         D ci c]#  \  }}|t        |t              rt        |      n|% c}}|d<   |S t        |t              r.|D cg c]  }t        |t              rt        |      n|! c}|d<   |S c c}}w c c}w )u  
    matrix dict 전체를 deepcopy 후 capabilities 각 항목에 migrate_entry 적용.
    다른 최상위 키는 보존.

    capabilities 는 두 형태를 모두 지원한다:
    - dict 형태(실제 automation_capability_matrix.json): {name: entry, ...}
      → 각 value(entry) 에만 migrate_entry 적용, 키(name) 보존.
    - list 형태: [entry, ...] → 각 item 에 migrate_entry 적용.
    그 외 타입은 그대로 보존.

    Parameters
    ----------
    matrix : dict

    Returns
    -------
    dict
    capabilities)r;   r<   
isinstancedictr   itemsr@   list)matrixmrB   namer>   s        r   migrate_matrixrJ      s    & 	fA a55(L,%  ,113
e :eT+B='M
. H 
L$	' &
 &0t%<]5!%G
. H


s   (C!$Cc                 ,   | 
t               } t        | dd      5 }t        j                  |      }ddd       t	              }|rt
        j                  j                  |       }|rt        j                  |d       | dz   }t        |dd      5 }t        j                  ||d	d
       |j                          t        j                  |j                                ddd       t        j                  ||        |S # 1 sw Y   xY w# 1 sw Y   -xY w)u1  
    Parameters
    ----------
    path : str | None — matrix JSON 파일 경로. None 이면 default_matrix_path() 동적 resolve.
    write : bool — True 면 마이그레이션 결과를 같은 경로에 atomic 저장 (HIGH 10)

    Returns
    -------
    dict — 마이그레이션된 matrix
    Nrzutf-8)encodingT)exist_okz.tmpwF   ensure_asciiindent)r%   openjsonloadrJ   r
   r   r   makedirsdumpflushfsyncfilenoreplace)r   writefrG   migrateddirpathtmp_paths          r   mainrb      s     |"$	dC'	* a1 f%H''//$'KK$/&=(C'2 	!aIIha@GGIHHQXXZ 	! 	

8T"O# 	! 	!s   C>AD
>D
D__main__z%ANU v2.13 capability matrix migration)descriptionz--pathuZ   matrix JSON 파일 경로 (미지정 시 ANU_WORKSPACE/git toplevel 기준 동적 resolve))defaulthelpz	--dry-run
store_trueu(   파일을 쓰지 않고 결과만 출력)actionrf   )r   r]   rP   rQ   )NT)__doc__rU   r;   argparser
   r   r	   r   r   r   r%   V213_FIELDSr@   rJ   rb   __name__ArgumentParserparseradd_argument
parse_argsargsr   dry_runresultprintdumpsr$   r   r   <module>rv      s   	    	    "
 ;B#T 

!H z$X$$;F i  
 7  
 DtyyDLL(89F	*$**V%
:;! r   