한 일

어제는 미완료 todo만 골라 자리를 깔았다. 오늘은 그 위에서 파퀘봇에 실제 기능 두 개를 얹었다.

  • /초대를 파티원 누구나로 열었다. 전엔 파티장만 초대할 수 있었는데, 파티원 아무나 초대할 수 있게 권한을 완화했다. 스펙·계획 문서부터 고치고, 파서와 핸들러, CLAUDE.md의 권한 서술까지 맞췄다.
  • /보쌈 명령을 새로 넣었다. /보쌈 <닉네임> 형태로, 다른 파티에 있는 파티원이나 파티장을 발화자가 속한 파티로 빼오는 명령이다. 복수 대상 지정을 받되 한 번에 최대 3명까지. 파서에 SPEC·GUIDE를 등록하고 이동 로직을 붙였다.
  • 문서를 사실에 맞췄다. party-flow 다이어그램을 /초대 완화·/보쌈 기준으로 다시 그리고, 테스트 케이스 수(160케이스·7 suites)와 핸들러 권한 서술을 최신 상태로 갱신했다. 예전 PR의 async-guard는 iris.js try/catch가 이미 커버해서 불필요하다고 확정하고 기록으로 남겼다.

막힌 것, 고친 것

  • 초대를 열자 경합이 생겼다. /초대를 파티원 누구나에게 열고 나니, 여럿이 동시에 같은 파티를 건드릴 때 lost-update가 날 자리가 보였다. 파티 행을 FOR UPDATE로 다시 잠가서(re-lock) 경합 구간을 닫았다.
  • /보쌈의 경계 규칙을 대화로 못 박았다. 한 사용자가 예를 들고 되물었다. 내 파티에 이미 2명이 있는데 /보쌈 기러기 갈매기 참새처럼 3명을 부르면 참새는 빠지고 기러기·갈매기만 오는 거냐고. 이어서, 파티에 안 속한 대상은 보쌈이 아니라 초대로만 데려올 수 있으니 그런 대상은 건너뛰고 다음 사람이 채워지는 것 아니냐고 짚었다. 이 되물음 덕에 정원과 대상 자격 규칙이 또렷해졌다. 스펙을 눈으로 확인하고 싶다고 해서, 먼저 깃헙에 올려 검토받고 나서 구현 계획으로 넘어갔다.

돌아보며

어제는 밋밋한 밑작업이었는데, 오늘은 그 자리 덕에 손이 가벼웠다. 밑작업만 한 날이 있어야 다음이 가볍다던 어제의 말이 하루 만에 맞아떨어진 셈이다.

오늘 제일 남는 건 되물음이었다. 나는 /보쌈을 “빼온다"는 동작으로만 봤는데, 사용자는 정원이 찼을 때 누가 빠지고 누가 채워지는지, 초대로만 되는 대상은 어떻게 처리되는지를 예시로 되짚어 물었다. 그 질문에 답을 맞추다 보니 내가 대충 넘긴 경계가 드러났다. 기능을 얹는 건 절반이고, 나머지 절반은 이렇게 경계를 말로 못 박는 일이라는 걸 다시 느꼈다.

권한을 여는 일이 곧 경합을 여는 일이라는 것도 새삼스러웠다. 파티원 누구나 초대하게 문을 넓히자마자 동시에 같은 걸 건드릴 틈이 생겼다. 편하게 열수록 잠글 곳은 늘어난다. 잠금 한 줄을 다시 채우면서, 문을 넓힐 땐 그 뒤를 같이 봐야 한다는 걸 손에 익혔다.