ó
    2ÃÍjQ  ã                   ó\   • S r SSKrSSKrSSKrSSKJrJrJr  S rS r	\
S:X  a  \	" 5         gg)aŸ  Regenerate RULEFOLDER/CHANGELOG.md from RULEFOLDER/changes/*.md.

CHANGELOG.md is a build artifact. Never edit it by hand; edit the fragment.

Usage:
  python RULEFOLDER/tools/build_changelog.py            # rewrite CHANGELOG.md
  python RULEFOLDER/tools/build_changelog.py --check    # exit 1 if CHANGELOG.md is stale
  python RULEFOLDER/tools/build_changelog.py --csv out.csv   # flat export for Excel / Power BI
é    N)Ú	CHANGELOGÚload_fragmentsÚas_listc                 ó(	  • SSSSS[        U 5       S3SSSSS/n[        U S	5       GH  u  p#US
   nSR                  [        UR	                  S5      5      5      nU(       d  UR	                  S5      (       a  SOSnUR                  SU SUR	                  SS5       SUR	                  SS5       SUR	                  SS5       SUR	                  SS5       SSR                  [        UR	                  S5      5      5       SUR	                  SS5       SUR	                  SS5      =(       d    S SU S35        GM     U/ SQ-  nU  GH'  nUS
   nUR                  SUR	                  SS5       SUR	                  SS5       35        UR                  SUR	                  SS5       S35        UR                  S UR	                  SS5       S35        UR                  S!UR	                  SS5       S35        UR                  S"SR                  [        UR	                  S5      5      5       S35        [        UR	                  S#5      5      (       a<  UR                  S$SR                  [        UR	                  S#5      5      5       S35        [        UR	                  S%5      5      (       aE  UR                  S&SR                  S' [        UR	                  S%5      5       5       5      -   S-   5        [        UR	                  S(5      5      (       a<  UR                  S)SR                  [        UR	                  S(5      5      5       S35        [        UR	                  S5      5      (       a<  UR                  S*SR                  [        UR	                  S5      5      5       S35        UR	                  S5      (       a$  UR                  S+UR	                  S5       S35        UR                  S,UR	                  SS5      =(       d    S S35        UR	                  S-5      S.L a  UR                  S/5        UR                  S5        UR                  US0   R                  5       5        U/ SQ-  nGM*     S1R                  U5      R                  5       S1-   $ )2Nu   # CHANGELOG â€” TikTok ManagerÚ zY> **Generated file.** Source of truth is `RULEFOLDER/changes/*.md` (one file per change).zQ> Rebuild with `python RULEFOLDER/tools/build_changelog.py`. Do not edit by hand.zs changes. Newest last. IDs: legacy `CHG-NNN` (before 2026-09-24) and `CHG-YYYYMMDD-DEV-NN` (see `CONTRIBUTING.md`).z## IndexzB| # | ID | Date | Author | Type | Scope | Title | Security | API |zB|---|----|------|--------|------|-------|-------|----------|-----|é   Úmetaz, Úapi_endpointsÚparity_exceptionzn/au   â€”z| z | ÚidÚ?ÚdateÚauthorÚtypeÚscopeÚtitleÚsecurity_impactz |)r   z---r   z## u    â€” z
**Date:** z  z**Author:** z
**Type:** z**Scope:** Úpatternsz**Design Patterns:** Úfilesz**Files:** c              3   ó.   #   • U  H  nS U S 3v •  M     g7f)Ú`N© ©Ú.0Úxs     ÚRF:\Solutions\Thinkera\Publishers\TikTokManager\RULEFOLDER\tools\build_changelog.pyÚ	<genexpr>Úrender.<locals>.<genexpr>6   s   é € Ð2]ÒE\À°Q°q°c¸µ8ÒE\ùs   ‚Ú
gui_routesz	**GUI:** z	**API:** z**Parity exception:** z**Security impact:** ÚbreakingTz**BREAKING CHANGE**  ÚbodyÚ
)ÚlenÚ	enumerateÚjoinr   ÚgetÚappendÚstripÚrstrip)ÚfragsÚlinesÚiÚfÚmÚapis         r   Úrenderr0      s÷  € à(Ø
ØcØ[Ø
Üˆu‹:ˆ,ð =ð 	=à
ØØ
ØLØLð€Eô ˜% ×#‰ˆØˆf‰IˆØ�i‰iœ §¡ oÓ 6Ó7Ó8ˆÞØŸ5™5Ð!3×4Ñ4‘%¸%ˆCØ�‰Ø���3�q—u‘u˜T 3Ó'Ð(¨¨A¯E©E°&¸"Ó,=Ð+>¸cÀ!Ç%Á%ÈÐRTÓBUÐAVÐVYÐZ[×Z_ÑZ_Ð`fÐhjÓZkÐYlÐloØ�y‰yœ §¡ w£Ó0Ó1Ð2°#°a·e±e¸GÀRÓ6HÐ5IÈØ�u‰uÐ&¨Ó+×4¨uÐ5°S¸¸¸RðA÷	
ñ $ð 
Š_Ñ€EÜˆØˆf‰IˆØ�‰�s˜1Ÿ5™5  sÓ+Ð,¨E°!·%±%¸ÀÓ2DÐ1EÐFÔGØ�‰�z !§%¡%¨°Ó"3Ð!4°BÐ7Ô8Ø�‰�| A§E¡E¨(°BÓ$7Ð#8¸Ð;Ô<Ø�‰�z !§%¡%¨°Ó"3Ð!4°BÐ7Ô8Ø�‰�{ 4§9¡9¬W°Q·U±U¸7³^Ó-DÓ#EÐ"FÀbÐIÔJÜ�1—5‘5˜Ó$×%Ñ%Ø�L‰LÐ0°·±¼7À1Ç5Á5ÈÓCTÓ;UÓ1VÐ0WÐWYÐZÔ[Ü�1—5‘5˜“>×"Ñ"Ø�L‰L˜¨¯©Ñ2]ÄWÈQÏUÉUÐSZË^ÔE\Ó2]Ó)]Ñ]Ð`dÑdÔeÜ�1—5‘5˜Ó&×'Ñ'Ø�L‰L˜9 T§Y¡Y¬w°q·u±u¸\Ó7JÓ/KÓ%LÐ$MÈRÐPÔQÜ�1—5‘5˜Ó)×*Ñ*Ø�L‰L˜9 T§Y¡Y¬w°q·u±u¸_Ó7MÓ/NÓ%OÐ$PÐPRÐSÔTØ�5‰5Ð#×$Ñ$Ø�L‰LÐ1°!·%±%Ð8JÓ2KÐ1LÈBÐOÔPØ�‰Ð,¨Q¯U©UÐ3DÀbÓ-I×-RÈUÐ,SÐSUÐVÔWØ�5‰5�Ó Ò$Ø�L‰LÐ0Ô1Ø�‰�RÔØ�‰�Q�v‘Y—_‘_Ó&Ô'Ø’Ñ ‹ñ- ð. �9‰9�UÓ×"Ñ"Ó$ tÑ+Ð+ó    c            	      óô  • [         R                  " 5       n U R                  SSS9  U R                  S5        U R                  5       n[	        5       n[        U5      nUR                  (       aÚ  / SQn[        UR                  SSSS	9 n[        R                  " U5      nUR                  U5        U Ht  nUS
   n/ n	U HS  n
UR                  U
S5      nU	R                  [        U[        5      (       a  SR                  S U 5       5      OU5        MU     UR                  U	5        Mv     S S S 5        [        SUR                  5        UR                   (       ab  ["        R$                  " 5       (       a  ["        R&                  " SS9OSnXÃ:w  a!  [        S5        [(        R*                  " S5        [        S5        g ["        R,                  " USSS9  [        S[/        U5       S35        g ! , (       d  f       NÆ= f)Nz--checkÚ
store_true)Úactionz--csv)r   r   r   r   r   r   Ústatusr    r   r   r   r
   r   Úapi_doc_updatedr   ÚtestsÚwr   z	utf-8-sig)ÚnewlineÚencodingr	   z; c              3   ó8   #   • U  H  n[        U5      v •  M     g 7f)N)Ústrr   s     r   r   Úmain.<locals>.<genexpr>[   s   é € Ð(;º°A¬¨Q¯¨ºùs   ‚zCSV written:zutf-8)r:   zFCHANGELOG.md is stale. Run: python RULEFOLDER/tools/build_changelog.pyr   zCHANGELOG.md is up to date.r"   )r:   r9   zCHANGELOG.md rebuilt from z fragments.)ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr   r0   ÚcsvÚopenÚwriterÚwriterowr&   r'   Ú
isinstanceÚlistr%   ÚprintÚcheckr   ÚexistsÚ	read_textÚsysÚexitÚ
write_textr#   )ÚapÚargsr*   ÚtextÚcolsÚfhr8   r-   r.   ÚrowÚcÚvÚcurrents                r   ÚmainrX   F   s‚  € Ü	×	 Ò	 Ó	"€BØ‡O�O�I l€OÑ3Ø‡O�O�GÔØ�=‰=‹?€DäÓ€EÜ�%‹=€Dà‡x‡xò,ˆô �$—(‘(˜C¨°kÒBÀbÜ—
’
˜2“ˆAØ�J‰J�tÔÛ�Ø�f‘I�Ø�Û�AØŸ™˜a ›�AØ—J‘J¼zÈ!ÌT×?RÑ?R˜tŸy™yÑ(;¹Ó(;Ô;ÐXYÖZñ ð —
‘
˜3–ñ ÷ Cô 	ˆn˜dŸh™hÔ'à‡z‡zÜ;D×;KÒ;K×;MÑ;M”)×%Ò%¨wÒ7ÐSUˆØ‹?ÜÐZÔ[Ü�HŠH�QŒKÜÐ+Ô,Øä×Ò˜¨¸Ò>Ü	Ð&¤s¨5£z l°+Ð
>Õ?÷+ CÕBús   ÂB"G)Ç)
G7Ú__main__)Ú__doc__r>   rB   rL   Ú
_fragmentsr   r   r   r0   rX   Ú__name__r   r1   r   Ú<module>r]      s<   ðñó Û 
Û 
ç 9Ñ 9ò1,òh"@ðJ ˆzÓÙ…Fð r1   