feat(issue-tracker): 보드 노드 상세에 GitHub 연동 PR 표시 (v7.4.0) - #4
Merged
Conversation
배포된 HTML 보드에서 티켓을 클릭하면 이슈번호·created·updated는 보이지만
연동된 PR은 안 보였다. 렌더러는 PR 행을 그릴 수 있었으나, 그 값은 티켓을
in-review로 옮길 때 이슈 본문에 수동으로 쓴 `pr:` 메타에서만 왔다. 그래서
PR 머지("Closes #N") 자동닫힘으로 done된 티켓은 pr 메타가 없어 PR이 안 떴고,
단일 pr 값은 PR 여러 개를 표현할 수도 없었다.
이제 GitHub에 이미 있는 연동 정보를 직접 읽는다:
- _board.py snapshot: closedByPullRequestsReferences(이슈를 닫는 PR — 머지
자동닫힘 갭을 메움) + CROSS_REFERENCED_EVENT(이슈를 언급하는 PR)를 가져와
번호로 중복 제거한 per-ticket `prs` 리스트 생성. closes/ref 관계 중 강한
closes를 유지.
- board-map.template.html 상세 패널: prs를 "PRs" 섹션으로 렌더 — PR당 한 줄,
링크 + 상태 칩(merged/open/closed/draft, GitHub 팔레트 색) + closing PR엔
"· closes" 표시. PR 여러 개 네이티브 지원. 기존 단일 pr: 메타는 GitHub이
연동을 보고하지 않을 때의 폴백으로 유지.
의존성 추가 없음, 렌더/배포 방식 불변(GitHub Pages·Cloudflare 두 템플릿 모두
동일한 board-map.sh --write).
검증: mock gh로 board-map.sh 실렌더 → #42가 [obra#58 merged/closes, obra#61 open/ref]
payload 확인; 인라인 JS node --check 통과; DOM 심으로 prList/detailRow 렌더
결과(.prlist>.prline>a+.prchip) 확정.
Codex 리뷰(PR #4)가 찾은 두 가지를 수정: 1. board-map.sh: BOARD.md/stdout 폴백 표가 단일 pr: 메타만 써서, 머지 자동닫힘으로 done된 티켓은 MD 아티팩트에선 여전히 PR이 안 보이던 갭. HTML 패널과 동일하게 native prs 리스트를 우선 표시(폴백은 pr: 메타). 2. tests/issue-tracker/mock-gh/gh: snapshot 응답에 새 쿼리 필드 (closedByPullRequestsReferences, timelineItems)가 빠져 있어 _board.py가 무조건 인덱싱하면 KeyError로 기존 테스트가 크래시했다. mock이 쿼리 계약을 그대로 반환하도록 두 필드 추가(이슈 생성 시 closesPRs/xrefPRs 빈 리스트 시드). + test-board-scripts.sh: native 연동 PR(closes + xref)이 pr: 메타 없이도 MD 표와 HTML payload 양쪽에 뜨는지 검증하는 회귀 테스트 추가. 검증: test-board-scripts.sh 전체 통과(신규 PR 검증 포함); GraphQL 쿼리를 실제 GitHub(obra/superpowers)에 날려 필드명·응답 형태 라이브 확인.
SSFSKIM
marked this pull request as ready for review
July 7, 2026 06:47
SSFSKIM
added a commit
that referenced
this pull request
Jul 10, 2026
Two-tier trust (review #1, human design call): developer feedback — the server-resolved role snapshot in TRIAGE_TRUSTED_ROLES (default admin), or a stripped .env #TRIAGE_DEV_CODE body prefix — is read as instruction (R1/R4 waived: dev ideas can be born ready-for-agent, labeled source:dev-feedback); user feedback keeps the conservative gate, residual risk explicitly accepted in the Decision Log. The dev code is stripped before the body reaches the prompt or ticket so it never leaks into a public issue. The rest of the review, all fixed: - #2 R2 requires a REAL file citation (path-shaped after :line strip; unknown:12 no longer counts) - #3 R3 scans risk SYMBOLS (assertStudentAccess, supabaseAdmin, RLS, generate-plan layout fns, past_exam_problems, SUPABASE_SERVICE_ROLE_KEY) in addition to paths - #4 claim issues a lease token; writeback is lease-conditional (late writeback after reclaim throws instead of clobbering); reclaim window validated at config load; second idempotency check right before registerTicket - #5 findExisting fails closed on gh search errors - #6 ticket body temp files: mkdtemp dir, mode 0600, removed in finally - #7 TRIAGE_ENABLED checked before config parsing - #8 spec drift fixed (feedback-dispatch.ts references, two-kill-switches) p86 DDL note gains triage_lease UUID. New src/trust.ts. 91 tests green, tsc clean.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
문제
배포된 HTML 보드에서 티켓 노드를 클릭하면 이슈번호·created·updated는 보이지만 연동된 PR이 안 보였다. 렌더러는 PR 행을 그릴 능력이 있었으나, 값이 티켓을
in-review로 옮길 때 이슈 본문에 수동으로 쓰는pr:메타에서만 왔다. 그 결과 (1) PR 머지(Closes #N) 자동닫힘으로done된 티켓은pr:메타가 없어 PR 미표시, (2) 단일pr:값은 여러 PR 표현 불가.변경
GitHub에 이미 있는 연동 정보를 직접 읽는다.
_board.pysnapshot:closedByPullRequestsReferences(이슈를 닫는 PR — 머지 자동닫힘 갭) +timelineItems(CROSS_REFERENCED_EVENT)(이슈 언급 PR) 추가 → 번호로 중복 제거한 per-ticketprs리스트, closes/ref 중closes우선.board-map.sh:prs를 노드 payload로 통과.board-map.template.html: 상세 패널PRs섹션 — PR당 한 줄(링크 + 상태 칩 merged/open/closed/draft, closing PR엔· closes). 여러 PR 네이티브 지원. 단일pr:메타는 연동 없을 때 폴백.의존성 추가 없음, 렌더/배포 방식 불변(두 템플릿 모두 동일
board-map.sh --write).검증
gh로 실렌더 → superpower degradation since Anthropic Skills release ... obra/superpowers#42=[58 MERGED/closes, 61 OPEN/ref], README out of date (claude code 2.0.22, superpowers 3.1.0) obra/superpowers#43=[].node --check통과.prList/detailRow실행 →.prlist>.prline>a+.prchip구조 확정.환경
모델/하네스: Claude Opus 4.8, Claude Code (background job). 개인 포크 내부 PR, 소비자
ida-solution.