"--force 는 네가 의도한 작업을 재실행해야지, 네 돈을 지키는 guard 를 날려버리면 안 돼."
다들 손 뻗는 탈출구
계층 identity 는 훌륭해. 시스템이 done 이라고 여기는 걸 진짜로 다시 돌리고 싶은 날이 오기 전까지는. 프롬프트를 개선했으니 새 요약이 필요하다든가. 그래서 --force 에 손을 뻗지. 안전한 도구와 footgun 을 가르는 설계 질문이 여기 있어. --force 가 실제로 뭘 해야 하지? 게으르고 위험한 답은 '모든 identity 를 무시하고 말 그대로 전부 다시 돌린다' 야. 그 '전부' 중 일부가 호출할 때마다 돈이 드는 파이프라인이라면, 그 뭉툭한 force 는 이미 transcript 가 있는 오디오까지 눈 감고 다시 결제해. 탈출구가 실수로 큰돈을 쓰는 통로가 되는 거지.
force 는 범위 지어졌지, 전면이 아냐
Recall 의 --force 는 일부러 수술처럼 좁게 만들었어. 네가 노린 계층만 정확히 무효화하고 돈 guard 는 그대로 둬.
- 새 execution identity, 그러니까 새 batch 와 job 을 만들어. 그래야 파이프라인이 'already done' 에서 끊고 나가지 않고 진짜로 다시 돌거든.
- 하류 산물을 재생성해. 요약이랑 제목. 다시 계산해도 값싸고, 보통 네가 force 를 쓰는 이유가 그거니까.
- 근데 content-addressed 유료 호출 identity 는 그대로 둬. 같은 config 아래 같은 오디오는 여전히 같은 유료 key 로 hash 되고, 완료된 ledger 행을 찾아서 저장된 응답을 재사용해. 새 POST 없고, 새 청구도 없어.
그래서 평범한 --force 는 네가 진짜 원한 걸 줘. 재실행이랑 새 파생 출력. 돈이 드는 그 하나만 안 건드리고. 같은 콘텐츠를 진짜로 유료 재실행하는 건 일반 force 플래그로는 닿을 수 없어. 별도의 명시적인 행위가 있어야 해. 진짜 설정 lineage 가 바뀌었거나(그럼 새 유료 identity 가 정당하게 생겨), 아니면 '그래, 이거 다시 결제해' 라고 말하는 명시적인 operator 승인이 있거나. 제일 좁은 force 인 title-only force 는 기존 요약에 제목 프롬프트만 다시 돌려. 영상도 안 읽고, 오디오 준비도 안 하고, 돈도 안 써.
원리: force 는 넘으면 안 되는 경계를 존중해
여기서 얻을 일반적인 교훈은 '재실행' override 를 애초에 어떻게 설계하느냐야. '모든 안전장치 무시' 를 뜻하는 force 플래그는 나쁜 쪽으로 사람을 놀라게 해. 유저가 머릿속에 그린 것보다 훨씬 많은 일을 하고, 그 놀라움에 값이 붙거든. 잘 설계된 force 는 범위가 정해져 있어. 유저가 재생성하고 싶어 하는 계층만 정확히 무효화하고, 더 시끄러운 별도 opt-in 없이는 되돌릴 수 없거나 비싼 경계를 넘기를 명시적으로 거부해. 버전 관리 시스템도 같은 걸 배웠어. 평범한 force-push 는 남의 작업을 날려버릴 수 있으니까, 안전한 변형은 예상 못 한 변화를 force 로 밀고 지나가길 거부하잖아. 정신은 똑같아. 흔히 쓰는 force 는 안전하게, 범위를 정해서. 위험한 force 는 실수로는 절대 못 고르는 별도의 명시적 선택으로. override 는 작업을 다시 돌리라고 있는 거지 guardrail 을 없애라고 있는 게 아니야.