4회차실습 1980–105분

로그 읽기와 논의 정리

주간 회의 안건에는 끝난 일만 들어가지 않는다. 지난 2주 동안 어떤 논의가 열렸고, 무엇이 정해졌고, 어떤 질문이 답 없이 남았는지도 안건이다. 이 기록은 이슈 타임라인, 토론(Discussions), PR 리뷰에 나뉘어 있다. 이 실습은 업무 하나의 타임라인을 읽고, 결정 전 논의를 토론으로 열고, 기간 안의 논의를 한 문서로 모아 운영 이슈에 남긴다.

진행
설명 5분, 실습 20분
결과
토론 1건, 논의 정리 문서(운영 이슈 댓글)
명령
gh api …/timeline, gh repo edit --enable-discussions, gh discussion create · list · view, discussion-digest.sh
cd ~/gh-pm-lab
source pm-lab/env.sh

1업무 하나의 타임라인

이슈 타임라인(timeline)은 라벨, 담당자, 참조, 닫힘과 다시 열림을 시각과 함께 남긴다. 아래는 LP-03(#3)의 타임라인이다. GitHub는 시각을 UTC로 주므로 32,400초(9시간)를 더해 한국 시각으로 바꿨다.

event뜻LP-03에서
labeled · unlabeled라벨을 붙이거나 뗐다. 넷째 열이 라벨 이름이다10-14 blocked, 10-16 해소
blocked_by_added의존 관계(Blocked by)를 연결했다10-14, LP-01에 막힘
commented댓글을 남겼다10-26 결정 기록, 11-05 QA 결과
cross-referenced다른 이슈나 PR이 이 업무를 언급했다. 넷째 열이 그 번호다PR #20, #22
closed · reopened닫거나 다시 열었다11-02 닫힘, 11-05 다시 열림, 11-06 닫힘

이 타임라인에는 PR의 커밋, 리뷰, 병합과 Project의 Status 변경이 없다. 커밋과 리뷰는 PR 쪽(gh pr view --json commits,reviews)에, Status는 실습 18의 스냅숏에 있다. 실습 20의 event-log.sh가 세 곳을 합친다.

2저장소 전체의 로그

로그명령참고
기본 브랜치 커밋gh api "repos/$PM_REPO/commits?since=2026-10-25T15:00:00Z" --jq '.[] | [.commit.author.date, .commit.message] | @tsv'since는 UTC다. 한국 시각 10-26 0시는 10-25 15시 UTC다
저장소 이벤트gh api "repos/$PM_REPO/events" --jq '.[] | [.created_at, .type, .actor.login] | @tsv'최근 90일, 최대 300건. 위키 수정은 GollumEvent로 나온다
Actions 실행gh run list -R "$PM_REPO" --workflow pm-snapshot.yml --limit 5실습 18의 스냅숏이 빠진 날을 찾는다
PR 리뷰gh pr view 9 -R "$PM_REPO" --json reviews --jq '.reviews[] | [.submittedAt, .author.login, .state] | @tsv'변경 요청(CHANGES_REQUESTED)과 승인(APPROVED)

3결정 전의 논의를 토론으로 열기

이슈 댓글은 업무 하나에 붙고, 결정이 나기 전의 의견 수렴에는 맞지 않는다. 토론은 저장소 단위로 열리고, Q&A 형식 분류에서는 답 하나를 채택해 “정해졌다”를 표시할 수 있다. gh 2.101.0은 gh discussion 명령을 미리 보기(preview) 기능으로 제공한다. 옵션이 바뀔 수 있으므로 실행 전에 gh discussion create --help로 확인한다.

gh repo edit "$PM_REPO" --enable-discussions
gh discussion create -R "$PM_REPO" --category "Q&A" \
  --title "베타 초대 메일 발송 도구 선택" --body-file - <<'EOF'
**결정 제안**
- 배경: LP-06 베타 초대 메일 200건을 11-13 전에 보낸다
- 선택지: (1) 사내 메일 도구 (2) 외부 발송 서비스
- 확인할 것: 수신 거부 처리, 발송 기록 보관
- 결정 기한: 11-09(월)
- 결정자: gildong
EOF

토론을 켜면 GitHub가 Announcements, General, Ideas, Polls, Q&A, Show and tell 분류를 만든다. 시나리오의 Launchpad는 Q&A 형식으로 “결정 제안” 분류를 웹에서 새로 만들어 썼다. 실습에서는 기본 Q&A 분류를 쓴다. 답 채택은 웹 화면에서 한다. gh 2.101.0의 토론 명령에는 답을 채택하는 옵션이 없다.

gh discussion view 19 -R "$PM_REPO" --comments --order oldest

4기간 안의 논의를 한 문서로

discussion-digest.sh는 기간 안의 결정 기록 댓글, 활동이 있던 토론과 참여자, 답 없이 멈춘 토론, PR 리뷰의 변경 요청을 모은다. Sprint 2(10월 26일~11월 6일)를 정리한다.

정리한 문서를 Sprint 2 운영 이슈에 댓글로 남긴다. 다음 주 위키 갱신 때 결정 기록 표에도 들어간다.

gh issue comment "$PM_SPRINT_URL" --body-file pm-lab/digest-sprint-2.md

“응답이 멈춘 토론”의 #19는 실습 18의 spike/email-provider 브랜치와 같은 주제다. 브랜치는 10월 21일부터, 토론은 10월 28일부터 멈춰 있다. 기록 두 개가 같은 안건을 가리키므로, 회의에서는 “발송 도구를 11월 9일까지 누가 정하는가” 한 가지만 묻는다.

5긴 토론을 요약할 때

댓글이 수십 개인 토론은 원문을 파일로 저장해 요약 도구에 넣을 수 있다. 요약을 맡길 때는 질문을 고정해 두고, 원문에 없는 내용은 쓰지 않게 한다. 결정은 요약이 아니라 사람이 결정 기록 양식으로 남긴다.

gh discussion view 19 -R "$PM_REPO" --comments --order oldest --limit 100 > pm-lab/thread-19.txt
아래 토론 원문을 읽고 세 가지만 적어라.
1. 나온 선택지와 각 선택지를 지지한 사람, 그 근거
2. 아직 답이 없는 질문
3. 결정에 필요한데 원문에 없는 정보
원문에 없는 내용은 추측하지 마라.
막히면
메시지원인과 조치
unknown command "discussion"gh가 오래되었다. gh --version이 2.101.0 이상인지 확인한다.
분류를 찾을 수 없다는 메시지토론이 꺼져 있거나 분류 이름이 다르다. gh repo edit --enable-discussions를 실행하고 웹의 Discussions 탭에서 분류 이름을 확인한다.
타임라인 명령의 fromdateiso8601 오류시각 문자열에 소수점 초가 있다. .created_at[0:19] + "Z"로 잘라서 넣는다.
  • 업무 하나의 타임라인을 한국 시각으로 읽고, 타임라인에 없는 기록 두 가지를 말할 수 있다.
  • 결정 제안 양식으로 토론을 하나 열었다.
  • discussion-digest.sh로 Sprint 2의 논의를 정리해 운영 이슈에 남겼다.
  • 답 없이 멈춘 토론을 회의 안건 한 줄로 바꿨다.

마치며...

논의 정리는 새 회의록을 쓰는 일이 아니라, 이미 남은 댓글과 토론과 리뷰를 기간으로 잘라 모으는 일이다. 결정 기록 양식을 지킨 댓글은 스크립트가 찾아 표로 만들고, 답 없는 토론은 경과 작업일과 함께 안건이 된다. 다음 실습에서는 이 기록들을 이벤트 로그 하나로 합쳐, 계획한 선후행 관계와 실제 시작·완료일을 비교한다.