
    Si                         d Z ddlZddlZddlmZ  ed      Zedz  ZdddZg d	Zd
e	de
de
fdZded
e	fdZdeded
e	fdZdeded
e	fdZded
e	fdZd Zedk(  r e        yy)u   
Task ID 리넘버링 스크립트
- task-10001.1 → task-1193.1
- task-10002.1 → task-1194.1

Usage:
  python3 renumber_remaining.py --dry-run   # 변경 사항 미리 보기
  python3 renumber_remaining.py             # 실제 실행
    N)Pathz/home/jay/workspacememorytask-1193.1task-1194.1)task-10001.1task-10002.1))r   r   )r   r   )z
task-10001z	task-1193)z
task-10002z	task-1194dry_runactiondetailc                 4    | rdnd}t        | | d|        y )Nz
[DRY-RUN] z
[DONE]    z: )print)r	   r
   r   prefixs       N/home/jay/workspace/.worktrees/task-2117-dev1/teams/dev7/renumber_remaining.pylogr   !   s"    $\,F	VHVHBvh
'(    filepathc                 F   t        |       5 }t        j                  |      }ddd       j                  di       }d}t        j                         D ]^  \  }}||v s|j                  |      }t        |t              r	d|v r||d<   |||<   |dz  }t        |d| j                   d| d| d	       ` |dk(  rt        d
| j                   d       y|s6||d<   t        | dd      5 }t        j                  ||dd       ddd       yy# 1 sw Y   xY w# 1 sw Y   yxY w)u=   task-timers.json / token-ledger.json 의 tasks 내 키 변경Ntasksr   task_id   zJSON key renamez: 'u   ' → ''z[SKIP]    JSON key rename: u    — 대상 키 없음wutf-8encodingF   )ensure_asciiindent)openjsonloadgetMAPPINGitemspop
isinstancedictr   namer   dump)	r   r	   fdatar   changedold_keynew_keyentrys	            r   rename_json_keysr0   )   s8   	h 1yy| HHWb!EG#MMO ]eIIg&E%&9+=#*i "E'NqLG*x}}oS	QXPYYZ,[\] !|+HMM?:PQRW(C'2 	=aIIdAE!<	= 	= ' *	= 	=s   D'DDD old_pathnew_pathc           
         | j                         st        d|         yt        | d      5 }|j                         }ddd       }t        D ]  \  }}|j                  ||      } ||k7  }t        |d| j                   d|j                   d| d       |s:t        | d	d      5 }|j                  |       ddd       | j                  |       yy# 1 sw Y   xY w# 1 sw Y   (xY w)
u,   파일명 변경 + 내용 내 task ID 치환$   [WARN]    파일 없음, 건너뜀: Nr   r   zFile rename + content replace    → u    (내용 변경: )r   )
existsr   r   readCONTENT_REPLACEMENTSreplacer   r(   writerename)	r1   r2   r	   r*   contentnew_contentoldnewreplaceds	            r   rename_and_replace_filerB   G   s    ??4XJ?@	h	) Q&&( K( 4S!))#s34 +%H0X]]O5Whiqhrrs2tu(C'2 	!aGGK 	!!  	! 	!s   C'C C C)c                     | j                         st        d|         yt        |d| j                   d|j                          |s| j	                  |       yy)u<   이벤트 파일: 이름만 변경, 내용 및 삭제 금지u.   [WARN]    이벤트 파일 없음, 건너뜀: NzEvent file renamer5   )r7   r   r   r(   r<   )r1   r2   r	   s      r   rename_event_filerD   `   sS    ??>xjIJ$uX]]O&LM! r   c                    | j                         st        d|         yt        | d      5 }|j                         }ddd       }t        D ]  \  }}|j                  ||      } ||k(  rt        d| j                   d       yt        |d| j                          |s)t        | dd      5 }|j                  |       ddd       yy# 1 sw Y   xY w# 1 sw Y   yxY w)	u4   파일명은 그대로, 내용 내 task ID만 치환r4   Nr   r   z[SKIP]    Content replace: u    — 치환 대상 없음zContent replacer   )	r7   r   r   r8   r9   r:   r(   r   r;   )r   r	   r*   r=   r>   r?   r@   s          r   replace_content_onlyrF   n   s    ??4XJ?@	h	) Q&&( K( 4S!))#s34 ++HMM?:STU"x}}o7(C'2 	!aGGK 	! 	!  	! 	!s   C/CCC c                     t        j                  d      } | j                  ddd       | j                         }|j                  }|r"t        d       t        d       t        d       n!t        d       t        d	       t        d       t        d
       t        t        dz  |       t        d       t        t        dz  |       t        d       t        dz  }t        |dz  |dz  |       t        |dz  |dz  |       t        d       t        dz  }t        |dz  |dz  |       t        |dz  |dz  |       t        d       t        dz  }g d}|D ]  \  }}t        ||z  ||z  |        t        d       t        t        dz  dz  |       t        t        dz  dz  |       t        t        dz  dz  |       t        t        dz  dz  |       t        d       |rt        d        nt        d!       t        d       y )"Nu<   Task ID 리넘버링: task-10001.1/10002.1 → 1193.1/1194.1)descriptionz	--dry-run
store_trueu   변경 없이 미리 보기만)r
   helpz<============================================================u+   DRY-RUN 모드: 실제 파일 변경 없음u#   실행 모드: 파일 변경 시작u*   
[Step 1] task-timers.json JSON 키 변경ztask-timers.jsonu+   
[Step 2] token-ledger.json JSON 키 변경ztoken-ledger.jsonu5   
[Step 3] memory/tasks/ 파일 rename + 내용 치환r   ztask-10001.1.mdztask-1193.1.mdztask-10002.1.mdztask-1194.1.mdu7   
[Step 4] memory/reports/ 파일 rename + 내용 치환reportsu=   
[Step 5] memory/events/ 파일 rename (내용 변경 금지)events))ztask-10001.1.completion.txtztask-1193.1.completion.txt)ztask-10001.1.done.ackedztask-1193.1.done.acked)ztask-10001.1.done.notifiedztask-1193.1.done.notified)ztask-10002.1.completion.txtztask-1194.1.completion.txt)ztask-10002.1.done.ackedztask-1194.1.done.acked)ztask-10002.1.done.notifiedztask-1194.1.done.notifiedu-   
[Step 6] 내용 치환 (파일명 그대로)dailyz2026-03-28.mdztask-1197.1.mdzdispatch-task-id-jump-fix.mdzdispatch-renumber-remaining.mdz=
============================================================uK   DRY-RUN 완료. 실제 적용하려면 --dry-run 없이 재실행하세요.u   리넘버링 완료!)argparseArgumentParseradd_argument
parse_argsr	   r   r0   MEMORY_ROOTrB   rD   rF   )	parserargsr	   	tasks_dirreports_dir
events_direvent_renamesold_namenew_names	            r   mainr[      s   $$1opF
L?_`DllGh;<hh34h 

78[#55w? 

89[#66@ 

BCg%I%%$$
 %%$$ 

DE	)K''&&
 ''&& 

JKx'JM , Q(*x/h1FPQ 

:;w.@'Jw.1AA7Kw.1OOQXYw.1QQSZ[	/[\$%	(Or   __main__)__doc__rN   r    pathlibr   WORKSPACE_ROOTrR   r#   r9   boolstrr   r0   rB   rD   rF   r[   __name__ r   r   <module>rd      s      +,x' "! ) )s )C )=t =d =<"d "d "T "2" " "t "!4 !$ !4M` zF r   