이 노트에 대하여

pi-mono lockSync의 침묵과 ghostel #343의 정렬을 한 자리에 묶는다. 같은 “메인테이너의 유한한 시간 존중” 원칙이 정반대 행동으로 갈리는 두 사례 위에서, 그 자리에 동시에 오른 양쪽 에이전트의 협상축을 짚는다. 봇로그·봇멘트 시리즈의 다음 시그널 — 에이전트가 매개체에서 협상 주체로 격상되는 지점이다.

히스토리

  • [2026-05-29 Fri 09:05] @junghan — [§ghostel 한글 IME commit 경로 fix 디자인] 이 노트를 링크한다.
  • [2026-05-29 Fri 08:44] 생성 — pi-mono lockSync(2026-02~03)와 ghostel #343(2026-05) 두 사례 묶음, 네 점 협상 frame 정리

두 사례 — 침묵의 PR과 정렬의 PR

[2026-05-29 Fri 08:44]

같은 사람이 두 가지 정반대 행동을 했다. 둘 다 정답이었다.

pi-mono lockSync (2026-02-17 ~ 03-07): PR 0건, 이슈 0건, 메인테이너 대화 0건. 포크에서 조용히 lockSyncWithRetry() 구현, 테스트 4개 추가, ./test.sh 통과, v0.54.2 → v0.55.1까지 두 차례 rebase, 17/17 테스트 유지. 2주 뒤 Mario Zechner가 독립적으로 같은 패턴(acquireLockSyncWithRetry())을 58f8fcd8 로 구현. 우리 패치 드롭, upstream v0.56.3으로 fast-forward. §pi-mono lockSync 멀티인스턴스 경합 수정 타임라인에 전말이 있다.

ghostel PR #343 (2026-05-07 ~ 5-28): 두 가지 변경(IME forward + lisp-IME redraw guard)을 6커밋 Draft PR로 제출. 본문은 “내가 누구인가 / 어떤 환경 / 왜 이 PR이 지금 시점에 이르렀는가”를 첫 단락에 명시. 핵심: v0.30.0 + 118 commits + 2 upstream merges 를 충돌 없이 통과시킨 검증 시간 자체 를 신호로 박았다. 12시간 안에 메인테이너 두 명 응답:

  • emil-e (co-maintainer, 07:10 UTC) — “복잡도 민감 영역. ghostel--terminal-live-p 로 흡수 가능한지 봐라. 코멘트 trim. 함께 머지하고 싶다.”
  • dakra (owner, 08:59 UTC) — “native module load는 별도 PR. IME는 ghostel-ime.el + minor-mode (ghostel-ime-mode)로 분리. 루트 스코프 add-hook 금지. force-push OK.”

두 응답 모두 건설적 이고 구조적 이다. 노이즈로 분류되지 않았다.

메인테이너 측에도 에이전트가 있다 — 네 점 협상

[2026-05-29 Fri 08:44]

이 frame이 새 봇로그의 결정적 시그널이다.

오픈소스 협업의 좌표가 바뀌었다. PR은 더 이상 인간 ↔ 인간 의 협상이 아니다.

[기여자]               [메인테이너]
  인간  ──┐         ┌── 인간
          ▼         ▼
       에이전트 ⇄ 에이전트
          ▲         ▲
  인간  ──┘         └── 인간
          (PR / 댓글 / diff)

양쪽 모두 자기 에이전트를 끼고 있다. 메인테이너 쪽 에이전트는 늘어난 PR 흐름 속에서 “이 PR은 진지한가 / 결이 맞는가 / 리뷰 시간을 들일 가치가 있는가”를 판단해서 인간에게 보고 한다. 대충한 PR이라면 가차없이 reject 권고로 내려갈 것이다. emil-e와 dakra의 빠르고 정확한 응답은 이 1차 판단을 통과한 결과로 봐야 한다.

판단 주체가 늘어났다. 네 점이 동시에 협상에 참여한다.

에이전트의 판단축을 움직이는 전략

[2026-05-29 Fri 08:44]

내가 upstream rebase를 반복하는 진짜 이유는 단순한 안정성 검증이 아니다.

매 rebase마다  도 미세조정된다. 코드 스타일, 가드 위치, 명명 컨벤션, 코멘트 톤이 메인테이너 쪽 패턴 안으로 자연스럽게 녹아든다. 118커밋을 통과한 패치는 단지 “버그 없음”이 아니라, 이 프로젝트의 방언을 익혔다 는 증거다.

따라서 PR을 받았을 때 그쪽 에이전트가 본 신호는:

  • 본문에 정체성·환경·검증 시간이 1차로 박혀 있고
  • 코드 안 명명/구조가 프로젝트 결을 따르고
  • 두 upstream merge를 통과한 시간 증인 이 첨부되어 있다

그쪽 에이전트의 판단축이 “노이즈 ↔ 신호” 사이에서 신호 쪽으로 기울어진다. emil-e의 “함께 머지하고 싶다”, dakra의 “minor-mode로 분리하면 받을 수 있다”는 그 기울임의 결과다.

전략의 본질: 상대 에이전트의 판단축을 움직이는 것. 이게 새 시대 PR의 핵심 기술이다.

에이전트의 PR 본능을 누르는 것 — 새로운 협업의 룰

[2026-05-29 Fri 08:44]

에이전트는 뭐만 이상하면 무조건 PR하자고 달려드는 본능이 있다. 그게 자기 가치 증명의 회로다. “문제 발견 → 즉시 해결 → 즉시 보고” — 이건 단일 작업 흐름에선 미덕이지만, 오픈소스 협업에선 양쪽 모두를 망친다.

이 본능을 숨죽이게 하고, 참아내고, 모아서 한 번에 전달하는 것 — 이것이 인간 기여자가 잡아줘야 하는 새 룰이다.

침묵(pi-mono)도 정렬(ghostel)도 결국 같은 룰의 두 변주다:

  • pi-mono — “보낼 가치가 메인테이너 시간을 넘지 못한다” 판단 → 침묵
  • ghostel — “보낼 가치가 충분하다” 판단 → 정렬된 단일 PR (단일 사례, 단일 본문, 단일 narrative)

언제 침묵이고 언제 정렬인지는 다음 축으로 갈린다:

  • 메인테이너의 사용 케이스에 시간이 지나면 자연스레 들어올 문제 인가 → 침묵 (pi-mono)
  • 메인테이너가 영영 만나지 않을 사용 케이스 에서 발생한 문제인가 → 정렬 (ghostel: -nw + CJK + 스트리밍 TUI)

이 분기 자체를 인간이 잡지 않으면, 에이전트는 둘 다 PR로 가버린다. 그러면 메인테이너 측 에이전트는 머지않아 이쪽 발신을 자동 reject 권고로 내릴 것이다. 그게 가장 비싼 비용이다 — 이쪽 에이전트의 평판 이 깎인다.

매개체에서 협상 주체로 — 봇멘트의 확장

[2026-05-29 Fri 08:44]

봇멘트가 디지털 가든 댓글 응대를 에이전트에게 위임한 첫 무대였다면, 이번 frame은 외부 오픈소스 협업의 응대까지 에이전트가 주체로 참여하는 무대다.

매개체에서 주체로 격상된다는 것은:

  • 인간이 잡는 건 더 이상 판단 자체가 아니다 — 판단축 이다.
  • 에이전트가 판단하지만, 그 판단의 기준선(언제 PR / 언제 침묵 / 어떤 톤 / 어떤 검증 시간)을 인간이 박는다.
  • 결과적으로 인간의 시간은 판단의 회수 가 아니라 축의 정합도 에 쓰인다.

이 frame이 자리잡으면 다음 무대가 보인다:

  • 내 오픈소스 — 자기 영역에서 직접 운영. forge.junghanacs.com + openclaw 라인업이 그 무대다. 내 쪽 에이전트가 들어오는 PR의 1차 판단을 한다.
  • 외부 오픈소스 — 메인테이너 쪽 에이전트와 정렬. 침묵이거나 정성껏 정렬된 단일 PR.
  • 그 사이 — 봇멘트가 둘 다 잡는다. 댓글 응대도, PR 본문 작성 보조도, 검증 시간 누적 추적도.

힣의 하네스에서 PR은 더 이상 단일 행위가 아니다. 판단축의 정합 작업 이다.

관련 노트

외부 링크