
    Zj!                         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ZddgZdZej                  j                  d      ZdZg dZd	Zd
 Zd Zd ZdZd Zedk(  r e        yy)u  
pattern_forge.py — 장인 암묵지 패턴 추출기 [CEO 2026-07-18]

CEO 설계 사상:
  장인 = 비슷한 문제 순간을 수천 번 겪으며 패턴을 찾고, 새 작업이 와도 그 경험치로
  원인을 단숨에 파악한다. 제품이 달라도(기아 타이어↔벤츠 타이어) 기능이 같으면 핵심은 이전된다.

동작:
  1) 씨앗·공정서 전체에서 "문제 순간" 문단을 수집 (갭·변형·기공·언더컷·크랙·스패터·용락·오차…)
  2) 문제 주제별로 묶되, **서로 다른 제품 2개 이상에서 반복된 주제만** 패턴 후보로 인정
     (한 제품에서만 나온 건 아직 '경험'이지 '패턴'이 아니다)
  3) 페이블이 패턴 씨앗으로 정제: 상황 신호 → 원인 후보 순위 → 확인 순서 → 해법 → 제품별 차이 → 출처
  4) E:\VLA시스템\KNOWLEDGE\_패턴씨앗\PATTERN-주제.md 저장 → 지식서버가 자동 인덱스
     → 새 제품 질문이 와도 SHIN이 패턴부터 참조

실행: python pattern_forge.py           (기본 상한 8개 패턴/회 — 페이블 비용 절제)
      python pattern_forge.py --list    (패턴 후보 주제와 사례 수만 출력, 페이블 호출 없음)
    Nu   E:\VLA시스템u+   E:\지식정제시스템\05_KNOWLEDGE\seedsu'   E:\VLA시스템\KNOWLEDGE\_패턴씨앗z~\.local\bin\claude.exe   ))u	   갭관리u   갭|간극|틈새|벌어)u	   열변형u   변형|뒤틀|휨|수축|비틀)u   기공u    기공|블로우홀|포로시티)u	   언더컷u   언더컷|파임)u   크랙u   크랙|균열|터짐)u	   스패터u   스패터|튐)u   용락u   용락|번스루|구멍)u   용입불량u)   용입\s*불량|융합\s*불량|미용착)u   비드불량u3   비드\s*(불량|형상|처짐|불균일)|오버랩)u   취부오차uL   취부.{0,6}(오차|틀어|어긋|불량)|가접.{0,6}(오차|불량|틀어))u   치수오차u/   치수.{0,6}(오차|틀|공차)|공차\s*이탈)u   전류전압uU   전류.{0,10}(조정|낮추|올리|보정)|전압.{0,10}(조정|낮추|올리|보정))u   토치각도u3   토치\s*(각도|자세|기울)|작업각|진행각)u   이종두께u/   이종\s*두께|두께\s*차|박판.{0,8}후판)u   절단면품질u'   절단면|개선면|산화막|드로스uZ   문제|불량|원인|주의|실패|대응|해결|방지|금지|조심|팁|노하우|경험c                     | j                  dd      j                  d      }t        |      D ]7  \  }}|dv s|dz   t        |      k  sdj	                  ||dz   |dz          c S  t        |      dk\  r|d   S | S )uk   경로에서 제품(폴더) 식별 — 패턴은 서로 다른 제품 2개 이상에서 반복돼야 인정/\)seeds	KNOWLEDGE	knowledge         )replacesplit	enumeratelenjoin)pathpartsisegs       pattern_forge.py
product_ofr   0   s    LLd#))$/EE"355!a%#e*:L99U1q5Q/00 # E
a591T1    c                     t         D  ci c]  \  } }| g 
 }} }t        D ](  }t        j                  |      D ]  \  }}t	        fddD              r|D ]  }|j                  d      st        j                  j                  |      }t        |dd      j                         }t        j                  d|      D ]  }t        |      dk  st        j                  t        |      s,t         D ]N  \  }	}
t        j                  |
|      s||	   j!                  |t#        |      |j%                         d d	 d
       P    + |S c c}} w # t        $ r Y w xY w)Nc              3   &   K   | ]  }|v  
 y w)N ).0xdps     r   	<genexpr>zcollect.<locals>.<genexpr>=   s     q$pq17$ps   )
EMBEDDINGSMODELSOUTPUTFINETUNEu   _패턴씨앗u	   _QA뱅크z.mdutf-8ignore)encodingerrorsz\n\s*\n<   i  )srcproducttext)THEMES	SRC_ROOTSoswalkanyendswithr   r   openread	Exceptionrer   r   searchPROBLEM_CUEappendr   strip)k_casesrootfnsfnptxtparakeypatr   s              @r   collectrF   9   s0   %&vtq!QUvE&	''$-JB3q$pqq{{5)8GGLLR(GHEJJLS HHZ5D4y2~RYY{D-I8$*S99S$/!#J--aJqM[_[e[e[ghlil[m.no %+ 6  (  L! ' !*(*s   EE	E"	!E"	c                     t        j                  t        dddg| j                  d      dd      }|j                  j                  dd	      j                         }|j                  d
k7  s|st        d      |S )Nz-pz--modelzclaude-fable-5r%   Ti,  )inputcapture_outputtimeoutr&   )r(   r   u   fable 실패)	
subprocessrun
CLAUDE_EXEencodestdoutdecoder:   
returncodeRuntimeError)promptrouts      r   fablerV   M   si    
D)5EFfmm\cNd&*C	9A
((//'(/
3
9
9
;C||q<+G%GJr   u  너는 용접·제관 30년 장인의 암묵지를 정리하는 정제자다. 아래는 서로 다른 제품에서 반복 관찰된 "%s" 문제 순간 사례들이다. 장인이 머릿속에서 하듯 패턴으로 정제하되, **용접을 모르는 사람이 읽어도 앞뒤가 이해되는 완결된 문서**로 써라.
문서 규칙:
- 맨 위에 서문 3~5문장: 이 문서가 무엇인지, 어떤 기록 몇 건에서 뽑았는지, 현장에서 언제 꺼내 보는 문서인지.
- 도번·코드·전문용어는 반드시 쉬운 말 병기. 예: "RD202-0008(트랙서포트 부품의 가접 실패 기록)". 코드만 덜렁 쓰지 마라.
- 각 항목은 완결된 문장으로, "무엇을 왜"까지. 개조식 나열만 하지 마라.
- [CEO 지시] 모든 사례 인용은 반드시 이야기 순서로: ①어떤 제품의 어떤 부위를 ②어떤 조건/상황에서 작업하다가 ③무슨 일이 생겼고 ④그래서 어떤 결론이 나왔는지. 전후 맥락 없이 결론 문장만 던지는 것 금지. 사례 기록에 조건이 안 적혀 있으면 "기록에는 조건이 남아 있지 않다"라고 정직하게 쓰라.
- 사례에 있는 사실·수치만 사용(지어내기 금지). 사례가 상충하면 둘 다 쓰고 [CEO확인] 표시.
- 제품이 달라도 통하는 공통 핵심과, 제품마다 달라지는 부분을 구분.
출력 형식(마크다운):
# %s 문제 — 현장 패턴 노트
> (서문)
## 1. 이런 신호가 보이면 이 문제를 의심하라
## 2. 원인 — 가능성 높은 순서로
## 3. 확인 순서 — 장인이 먼저 보는 곳부터
## 4. 대응 방법
## 5. 제품마다 다른 점
## 6. 이 문서의 근거가 된 기록들

[사례들]
%sc                     dt         j                  v } t               }g }t        D ]N  \  }}||   }|D ch c]  }|d   	 }}t	        |      dk\  s,t	        |      dk\  s;|j                  |||f       P |j                  d        t        dt	        |      t	        t              fz         |D ])  \  }}}t        d|t	        |      t	        |      fz         + | ry t        j                  t        d	
       d}|D ]  \  }}}|t        k\  r nt        j                  j                  t        d|z        }	t        j                  j                  |	      rt        d|z         ii g }}
t        |d       D ]  }|
j!                  |d   d      dk\  r|
j!                  |d   d      dz   |
|d   <   |j                  d|d   dt        j                  j#                  |d         d|d          t	        |      dk\  s n 	 t%        t&        ||dj                  |      fz        }dt)        j*                  d      t	        |      t	        |      fz  }t-        |	dd      j/                  ||z          |dz  }t        d|	t	        |      fz          t        d |z         y c c}w # t0        $ r(}t        d|dt3        |      d d        Y d }~d }~ww xY w)!Nz--listr+   r   r
   c                      t        | d          S )Nr   )r   )r   s    r   <lambda>zmain.<locals>.<lambda>r   s    c!A$iZr   )rD   u7   [pattern] 패턴 후보 %d개 (전체 주제 %d개 중)u#     - %s: 사례 %d건 / 제품 %d종T)exist_okr   zPATTERN-%s.mduQ   [pattern] %s — 이미 존재, 건너뜀 (갱신은 파일 삭제 후 재실행)c                     | d   S )Nr+   r   )cs    r   rY   zmain.<locals>.<lambda>   s    1Y<r   r   (z | r*   z)
r,      z

uZ   <!-- 자동 정제: pattern_forge.py %s | 사례 %d건, 제품 %d종 | CEO 검토 전 -->
z%Y-%m-%dwr%   )r'   u#   [pattern] 생성: %s (사례 %d건)u   [pattern] 실패 z: P   uY   [pattern] 완료 — %d개 생성. 지식서버 /api/reload 하면 SHIN이 즉시 사용.)sysargvrF   r-   r   r9   sortprintr/   makedirsOUT_DIRMAX_PATTERNSr   r   existssortedgetbasenamerV   
PAT_PROMPTtimestrftimer3   writer5   str)	only_listr=   candsrD   r<   arrr\   prodsmadeout_p	seen_prodsamplemdheades                  r   mainr|   i   s   CHH$IIEEQCj'*+s!9s+s8q=SZ1_LL#sE*+	 
 
JJ'J(	
Cs5zSVW]S^F_
_` S%3sCHc%j6QQR !&KK$'D S%<Wo&;<77>>% ehkklnv6	!78A}}Qy\1-2H&/mmAiL!&Dq&HIa	l#MMQy\277;K;KAeH;UWXY_W`ab6{b %	 9
	BzS#v{{6/B$CCDBq}}Z0#c(CJGHDg.44TBY?AID75#c(:KKL% !* 

ehl
lm? ,:  	BsCF3BK@AA	Bs   J(BJ--	K6KK__main__)__doc__r/   r6   jsonra   rK   rm   r.   rf   r   
expanduserrM   rg   r-   r8   r   rF   rV   rl   r|   __name__r   r   r   <module>r      s   $ + * *!OP	
4WW :;

" l2(C
$%nP zF r   