변경사항 검토

Diff review

모델이 제안한 수정을 삭제(빨강)·추가(초록) 줄로 보여주고, 한 덩어리씩 승인하거나 거부할 수 있는 뷰.

다른 이름: Inline diffAccept/reject changesCode diff view
···
html
<div class="diff" id="diff">
  <div class="ln head">utils.ts</div>
  <div class="ln ctx">function formatPrice(n) {</div>
  <div class="ln del">&nbsp;&nbsp;return '$' + n;</div>
  <div class="ln add">&nbsp;&nbsp;return '$' + n.toFixed(2);</div>
  <div class="ln ctx">}</div>
  <div class="actions" id="acts">
    <button class="rej">거부</button>
    <button class="acc">승인</button>
  </div>
</div>
css
.diff{width:min(300px,96%);border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--surface);font-family:ui-monospace,monospace;font-size:11px}
.ln{padding:4px 12px;white-space:pre;color:var(--fg)}
.ln.head{background:var(--bg);color:var(--muted);font-family:inherit;font-weight:700;font-size:10.5px;padding:7px 12px}
.ln.del{background:color-mix(in srgb, #e5484d 16%, transparent);color:#e5484d;text-decoration:line-through;text-decoration-thickness:1px;transition:opacity .3s,max-height .3s;max-height:30px}
.ln.add{background:color-mix(in srgb, #0f9d78 16%, transparent);color:#0f9d78;transition:background .3s}
.ln.del[data-gone]{opacity:0;max-height:0;padding-top:0;padding-bottom:0}
.ln.add[data-kept]{background:transparent;color:var(--fg)}
.actions{display:flex;gap:8px;padding:9px 12px;border-top:1px solid var(--line)}
.actions button{flex:1;padding:6px 0;border-radius:7px;font-size:11px;font-weight:700;cursor:pointer;border:1px solid var(--line);font-family:inherit}
.rej{background:var(--bg);color:var(--muted)}
.acc{background:var(--accent-3);color:#fff;border-color:var(--accent-3)}
js
const diff = document.getElementById('diff'), del = diff.querySelector('.del'), add = diff.querySelector('.add'), acts = document.getElementById('acts');
function run() {
  del.removeAttribute('data-gone'); add.removeAttribute('data-kept'); acts.style.opacity = 1;
  setTimeout(() => {
    del.setAttribute('data-gone', '');
    add.setAttribute('data-kept', '');
    acts.style.opacity = .35;
  }, 2600);
}
run();
setInterval(run, 3800);

모델이 코드나 문서를 고칠 때, 최종 결과만 통째로 보여주면 무엇이 왜 바뀌었는지 사람이 처음부터 다시 읽어야 합니다. 버전관리 도구의 diff 표기(- 삭제, + 추가)를 그대로 빌려오면, 바뀐 부분만 한눈에 짚을 수 있어 검토 시간이 훨씬 줄어듭니다.

전체를 한 번에 승인/거부하기보다, 변경을 의미 단위(hunk)로 나눠 각각 승인·거부할 수 있게 하면 "이 부분은 맞는데 저 부분은 틀렸다"는 흔한 상황을 다룰 수 있습니다. 승인한 줄은 초록 배경이 옅어지며 본문에 자연스럽게 흡수되고, 거부한 줄은 원래 텍스트로 되돌아갑니다.

자동 적용(사람이 보기도 전에 반영)과 검토 후 적용은 신뢰 수준이 다른 상황입니다 — 되돌리기 쉬운 문서 편집이라면 자동 적용도 괜찮지만, 프로덕션 코드처럼 대가가 큰 변경은 검토 단계를 건너뛰지 않는 게 안전합니다.

언제 쓰나

코드 수정, 문서 편집처럼 기존 내용을 고치는 제안에 씁니다. 완전히 새로 만드는 결과물(처음 짜는 초안)에는 비교할 이전 버전이 없어 적용되지 않습니다.