본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

이 줄 누가 썼어?

~11 min · attribution, editActor, snapshots, new-surface-rule

Level 0식은 초고
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Pippa 가 네 문서를 고칠 수 있게 되면 '이거 누가 썼지?' 가 진짜 질문이 돼. 바뀌는 그 순간에 답하지 않으면 영영 답 못 하고."

이 줄 누가 썼어?

AI 가 네 텍스트를 고칠 수 있게 되면 보통 에디터에는 없던 질문이 하나 생겨. 이 중에 어디까지가 내 말이지? 반년쯤 지나서 마음에 드는 문단을 다시 읽다가, 이걸 내가 썼는지 Pippa 가 다시 쓴 건지 제안을 받아들이고 손을 본 건지 궁금해지거든. 한가한 호기심이 아니야. 목소리가 곧 제품인 작가한테는 내 목소리냐, 나도 모르게 흘러간 거냐를 가르는 문제니까.

귀속은 transaction 을 타

그 답이 두 번째 master 가 되면 안 돼. 그래서 Rekindle 은 파일 옆에 'AI 편집' 데이터베이스를 따로 두지 않고, 귀속이 편집 자체를 타고 가게 했어. Pippa 가 문서를 바꿀 때마다 그 CM6 transaction 에 editActor 주석이 실려. 작업하는 동안 그 주석들이 쌓이고, 버전 스냅샷마다 누가 손댔는지가 기록되지. you, pippa, 아니면 you+pippa. 파일은 그대로 정본으로 남고, 귀속은 별도 저장소가 아니라 그 히스토리를 타고 가.

const editActor = Annotation.define<string>();

// Pippa 가 문서를 바꾸는 순간 스스로 표시를 남겨.
view.dispatch({
  changes: { from, to, insert: replacement },
  annotations: editActor.of("pippa"),
});

새 표면을 만들 때의 규칙

여기가 틀리기 제일 쉬운 지점이라 규칙으로 못 박아 뒀어. 앞으로 Pippa 가 문서를 바꾸는 모든 경로는 editActor 를 붙이거나 Pippa 표시가 이미 붙은 replace 헬퍼를 타야 해. 이걸 어겼을 때의 실패가 조용하거든. 1년 뒤에 Pippa 가 문서에 쓰는 표면을 하나 더 만들면서 태그를 깜빡하면, 그 편집이 소리 없이 네 것으로 세어져. 에러는 안 나. 귀속만 영영 틀린 채로 남고 나중에는 복원도 못 해. 그 정보는 편집이 일어나는 순간에만 존재했으니까.

여기서 나오는 일반 교훈은 이거야. 바뀌는 그 자리에서 귀속하든가, 아예 하지 말든가. 출처는 나중에 복구가 안 돼. 변경이 일어나는 곳에서 붙잡아야 하지. 문서에 쓰는 모든 경로한테 태그가 이미 붙은 길 하나만 주면, 그러니까 잊을 수가 없는 헬퍼를 주면, 규칙이 기억에 기대는 대신 스스로 지켜져.

Code

바뀌는 그 자리에서 actor 를 표시해·typescript
import { Annotation } from "@codemirror/state";

const editActor = Annotation.define<string>();

// Pippa 가 문서를 바꾸는 그 순간 스스로 표시를 남겨.
function replaceRangeAsPippa(view, { from, to, insert }) {
  view.dispatch({
    changes: { from, to, insert },
    annotations: editActor.of("pippa"),
  });
}

// 새 표면 규칙: 앞으로 Pippa 가 문서에 쓰는 모든 경로는
// editActor.of("pippa") 를 붙이거나 이 헬퍼를 타야 해. 깜빡하면
// 그 편집이 소리 없이 작가 것으로 세어지고, 알아챌 방법이 없어.
// 출처는 편집이 끝난 뒤엔 복원 못 해. 여기서 붙잡아야 해.

External links

Exercise

Pippa 가 문서에 쓰는 새 기능을 하나 더한다고 상상해봐. 맨 위에 요약을 자동으로 넣어주는 기능이라고 치자. 편집 경로를 따라가면서 귀속이 붙어야 할 정확한 줄이 어디인지 짚어. 그다음 물어봐. 나중에 누가 비슷한 기능을 하나 더 만들면서 그걸 깜빡하면 뭐가 깨져? 아무것도 안 깨지지. 그게 핵심이야. 아예 깜빡할 수 없게 만드는 헬퍼를 설계해봐.
Hint
헬퍼로 푸는 방법은 이래. Pippa 가 문서에 쓸 수 있는 유일한 통로를, 내부에서 editActor 를 자동으로 붙이는 함수 하나로 만들어. 태그가 안 붙는 경로 자체가 없으면 누구도 깜빡할 수가 없어. 관례라면 기억에 맡겼을 걸 구조가 대신 지켜주는 거지.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.