
    i@                     D   d Z ddlZddlZddlZddlZddlZddlmZ  ed      Zedz  Z	dddd	d
dddddd
Z
g Zg ZdefdZdededefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefd Zd! Zed"k(  r ej8                   e              yy)#u   
Task ID 리넘버링 스크립트
task-9991.1~task-10000.1 → task-1183.1~task-1192.1

Usage:
    python3 renumber_task_ids.py --dry-run   # 변경 계획만 출력
    python3 renumber_task_ids.py             # 실제 변경 수행
    N)Pathz/home/jay/workspacememoryztask-1183.1ztask-1184.1ztask-1185.1ztask-1186.1ztask-1187.1ztask-1188.1ztask-1189.1ztask-1190.1ztask-1191.1ztask-1192.1)
task-9991.1task-9992.1task-9993.1ztask-9994.1ztask-9995.1ztask-9996.1ztask-9997.1ztask-9998.1ztask-9999.1ztask-10000.1msgc                     t        |        y )N)printr   s    3/home/jay/workspace/teams/dev1/renumber_task_ids.pylogr   (   s	    	#J    kindoldnewc                 \    t         j                  | ||f       t        d|  d| d|        y )Nz  [z]     → )changesappendr   )r   r   r   s      r   record_changer   ,   s0    NND#s#$#dV2cU%u%&r   c                 J    t         j                  |        t        d|         y )Nz
  [ERROR] )errorsr   r   r   s    r   record_errorr   1   s    
MM#*SEr   dry_runc                    t        d       t        dz  }t        dz  }|j                  j                  dd       |j	                         st        d|        y t        |d      }	 t        j                  |t        j                         t        |d      5 }t        j                  |      }d d d        j                  d	i       }i }d
}|j                         D ]q  \  }	}
|	t        v r_t        |	   }t        d|	|       t!        |
t"              r1|
j                  d      |	k(  rt#        |
      }
||
d<   t        d|	|       |
||<   d}m|
||	<   s |rP||d	<   | s=t        |d      5 }t        j$                  ||d
d       d d d        t        d|        nt        d       nt        d       t        j                  |t        j*                         |j-                          y # 1 sw Y   6xY w# 1 sw Y   qxY w# t        j&                  t(        f$ r}t        d|        Y d }~zd }~ww xY w# t        j                  |t        j*                         |j-                          w xY w)Nu   
[1] task-timers.json 처리ztask-timers.jsonz.task-timers.lockT)parentsexist_ok   파일 없음: wrtasksFz	timer-keytask_idztimer-field:task_id   )ensure_asciiindent     → 저장 완료: $     → [dry-run] 실제 저장 생략     → 변경 없음u    task-timers.json 처리 실패: )r   MEMORYparentmkdirexistsr   openfcntlflockLOCK_EXjsonloadgetitemsMAPPINGr   
isinstancedictdumpJSONDecodeErrorOSErrorLOCK_UNclose)r   
timer_filelock_file_path	lock_filefdatar!   	new_tasksmodifiedkeyvalnew_keyes                r   renumber_timersrH   9   s"   '(,,J11Nt<zl34^S)I&Iu}}-*c" 	 a99Q<D	  "%	 	%HCg~!#,k38c4(SWWY-?3-Fs)C%,C	N!"7gF%(	'"!$	#	% %DM*c* EaIIdAE!DE+J<89:<%' 	Iu}}-G	  	 0E E   '* =7s;<<= 	Iu}}-s[   '0G: G!-B7G: $G.>.G: !G+&G: .G73G: :H+H&!H. &H++H. .6I$c                    t        d       t        dz  }t        j                         D ci c]  \  }}|dvs|| }}}|j                         D ]  \  }}|| dz  }|| dz  }|j	                         st        d|j
                   d       @|j                         }	|	}
t        j                         D ]  \  }}|
j                  ||      }
 |
|	k7  rt        d||       t        dt        |      t        |             | s-|j                  |
       |j                          t        d	       t        d
        y c c}}w )Nu    
[2] Task 파일 처리 (tasks/)r!   r   r   r   .md	  [SKIP] 	    (없음)ztask-contentztask-rename%     → 저장 및 이름 변경 완료     → [dry-run] 생략r   r)   r5   r4   r,   name	read_textreplacer   str
write_textunlink)r   	tasks_dirkvrename_targetsold_idnew_idold_pathnew_pathcontentnew_contentoidnids                r   renumber_task_filesrc   p   s5   +, I'.}}qtq!!Cp:padqNq(..0 +&~-&~- )HMM?)45$$& 	8HC%--c37K	8'!.&&9mS]CMB,OO79(*)+ r
   D?D?c                    t        d       t        dz  }t        j                         D ci c]  \  }}|dvs|| }}}|j                         D ]  \  }}|| dz  }|| dz  }|j	                         st        d|j
                   d       @|j                         }	|	}
t        j                         D ]  \  }}|
j                  ||      }
 |
|	k7  rt        d||       t        dt        |      t        |             | s-|j                  |
       |j                          t        d	       t        d
        y c c}}w )Nu$   
[3] Report 파일 처리 (reports/)reportsrJ   rK   rL   rM   zreport-contentzreport-renamerN   rO   rP   )r   reports_dirrX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   s                r   renumber_report_filesrh      s6   /09$K'.}}qtq!!Cp:padqNq(..0 +F83/F83/ )HMM?)45$$& 	8HC%--c37K	8'!*FF;os8}c(mD,OO79(*%+ rrd   c                    t        d       t        dz  }g d}|D ]7  \  }}||z  }||z  }|j                         st        d| d       1|j                  d      r|j	                         }|}t
        j                         D ]  \  }	}
|j                  |	|
      } ||k7  rt        d||       t        dt        |      t        |             | s-|j                  |       |j                          t        d	       t        d
       t        dt        |      t        |             | s|j                  |       t        d       -t        d
       : y )Nu"   
[4] Event 파일 처리 (events/)events))ztask-9991.1.done.clearztask-1183.1.done.clear)ztask-9992.1.done.clearztask-1184.1.done.clear)ztask-9993.1.done.clearztask-1185.1.done.clear)ztask-9994.1.completion.txtztask-1186.1.completion.txt)ztask-9994.1.done.ackedztask-1186.1.done.acked)ztask-9994.1.done.notifiedztask-1186.1.done.notified)ztask-9995.1.completion.txtztask-1187.1.completion.txt)ztask-9995.1.done.ackedztask-1187.1.done.acked)ztask-9995.1.done.notifiedztask-1187.1.done.notified)ztask-9996.1.completion.txtztask-1188.1.completion.txt)ztask-9996.1.done.ackedztask-1188.1.done.acked)ztask-9996.1.done.notifiedztask-1188.1.done.notified)ztask-9997.1.completion.txtztask-1189.1.completion.txt)ztask-9997.1.done.ackedztask-1189.1.done.acked)ztask-9997.1.done.notifiedztask-1189.1.done.notified)ztask-9998.1.completion.txtztask-1190.1.completion.txt)ztask-9998.1.done.ackedztask-1190.1.done.acked)ztask-9998.1.done.notifiedztask-1190.1.done.notified)ztask-9999.1.completion.txtztask-1191.1.completion.txt)ztask-9999.1.done.ackedztask-1191.1.done.acked)ztask-9999.1.done.notifiedztask-1191.1.done.notified)ztask-10000.1.completion.txtztask-1192.1.completion.txt)ztask-10000.1.done.ackedztask-1192.1.done.acked)ztask-10000.1.done.notifiedztask-1192.1.done.notifiedrL   rM   z.completion.txtzevent-contentzevent-renamerN   rO   zevent-rename-onlyu*     → 이름 변경 완료 (내용 보존))r   r)   r,   endswithrR   r5   r4   rS   r   rT   rU   rV   rename)r   
events_direvent_renamesold_namenew_namer]   r^   r_   r`   ra   rb   s              r   renumber_event_filesrq      s>   -.("JM6 , /((( )H:Y/0./((*G!K#MMO <S)11#s;<g%oxB.#h-XG##K0!;=,. -s8}c(mL)@B,.9/r   c                    t        d       t        dz  }dg}|D ]  \  }}||z  }||z  }|j                         st        d| d       0|j                         }|}t        j                         D ]  \  }	}
|j                  |	|
      } ||k7  rt        d||       t        dt        |      t        |             | s-|j                  |       |j                          t        d       t        d	        y )
Nu,   
[5] Checkpoint 파일 처리 (checkpoints/)checkpoints)ztask-9997.1.mdztask-1189.1.mdrL   rM   zcheckpoint-contentzcheckpoint-renamerN   rO   r   r)   r,   rR   r5   r4   rS   r   rT   rU   rV   )r   checkpoints_dirrenamesro   rp   r]   r^   r_   r`   ra   rb   s              r   renumber_checkpoint_filesrw      s    78},O34G% +("X-"X- )H:Y/0$$& 	8HC%--c37K	8'!.(C)3x=#h-H,OO79(*%+r   c                    t        d       t        dz  }g d}|D ]  \  }}||z  }||z  }|j                         st        d| d       0|j                         }|}t        j                         D ]  \  }	}
|j                  |	|
      } ||k7  rt        d||       t        dt        |      t        |             | s-|j                  |       |j                          t        d       t        d	        y )
Nu&   
[6] Meeting 파일 처리 (meetings/)meetings))ztask-9997.1-cycle1.mdztask-1189.1-cycle1.md)ztask-9997.1-cycle2.mdztask-1189.1-cycle2.md)ztask-9997.1-cycle3.mdztask-1189.1-cycle3.mdrL   rM   zmeeting-contentzmeeting-renamerN   rO   rt   )r   meetings_dirrv   ro   rp   r]   r^   r_   r`   ra   rb   s              r   renumber_meeting_filesr{     s    12J&LG
 & +((*(* )H:Y/0$$& 	8HC%--c37K	8'!+Xx@&Hs8}E,OO79(*%+r   c                    t        d       t        dz  dz  }ddg}|D ]  \  }}||z  }||z  }|j                         st        d| d       0|j                         }|}t        j                         D ]  \  }	}
|j                  |	|
      } ||k7  rt        d||       t        d	t        |      t        |             | s-|j                  |       |j                          t        d
       t        d        y )Nu%   
[7] Team 파일 처리 (teams/dev1/)teamsdev1)z"task-9997.1-implementation-plan.mdz"task-1189.1-implementation-plan.md)ztask-9997.1-design.mdztask-1189.1-design.mdrL   rM   zteam-contentzteam-renamerN   rO   )r   	WORKSPACEr,   rR   r5   r4   rS   r   rT   rU   rV   )r   dev1_dirrv   ro   rp   r]   r^   r_   r`   ra   rb   s              r   renumber_team_filesr   +  s   017"V+HT:G & +(h&h& )H:Y/0$$& 	8HC%--c37K	8'!.(H=mS]CMB,OO79(*%+r   c                    t        d       t        dz  dz  }|j                         st        d|        y |j	                         }|}t
        j                         D ])  \  }}||v st        d||       |j                  ||      }+ ||k(  rt        d       y | s |j                  |       t        d|        y t        d       y )	Nu9   
[8] Daily log 파일 내용 치환 (daily/2026-03-28.md)dailyz2026-03-28.mdr   zdaily-contentr(   r&   r'   )
r   r)   r,   r   rR   r5   r4   r   rS   rU   )r   
daily_filer_   r`   ra   rb   s         r   renumber_daily_logr   J  s    DE'!O3Jzl34""$GKMMO 8S+/34%--c37K8 g!#!!+.'
|4568r   c                  X   t        j                  d      } | j                  ddd       | j                         }|j                  }|rdnd}t        d	        t        d
| d       t        d	        t        d       t        j                         D ]  \  }}t        d| d|         t        |       t        |       t        |       t        |       t        |       t        |       t        |       t        |       t        dd	        t        d       t        d	        t        dt!        t"                      t        dt!        t$                      t$        r$t        d       t$        D ]  }t        d|         |rt        d       nt        d       t$        sdS dS )Nu!   Task ID 리넘버링 스크립트)descriptionz	--dry-run
store_trueu.   변경 계획만 출력 (실제 변경 없음))actionhelpzDRY-RUNu   실행z<============================================================u#   Task ID 리넘버링 스크립트 []u   매핑:z  r   
u   결과 요약u   총 변경 항목: u   오류 수: u   
오류 목록:z  - uJ   
[dry-run 완료] 실제 변경하려면 --dry-run 없이 실행하세요.u   
[실행 완료]r      )argparseArgumentParseradd_argument
parse_argsr   r   r5   r4   rH   rc   rh   rq   rw   r{   r   r   lenr   r   )parserargsr   modera   rb   rG   s          r   mainr   f  sw   $$1TUF
L?opDllG9XD6(
-dV1566('OMMO "SbU3% !" G '"!g&7# w"VH-6(
c'l^,-,s6{m$%  	A$qc
O	YZ 1!!r   __main__)__doc__r   r.   r1   ossyspathlibr   r   r)   r5   r   r   rT   r   r   r   boolrH   rc   rh   rq   rw   r{   r   r   r   __name__exit r   r   <module>r      s!      	 
 &'		X	 !        ! 

S ' '# 'C '
c 1T 1n+ +@+4 +:</$ </D+t +8+D +@+ +>9 98%"P zCHHTV r   