Skip to content

feat(issue-tracker): PR 랜딩 시점 잔여 작업의 티켓화 정책 (FOLLOW-UPS 슬롯) - #5

Merged
SSFSKIM merged 1 commit into
mainfrom
worktree-issue-tracker-followup-policy
Jul 7, 2026
Merged

feat(issue-tracker): PR 랜딩 시점 잔여 작업의 티켓화 정책 (FOLLOW-UPS 슬롯)#5
SSFSKIM merged 1 commit into
mainfrom
worktree-issue-tracker-followup-policy

Conversation

@SSFSKIM

@SSFSKIM SSFSKIM commented Jul 7, 2026

Copy link
Copy Markdown
Owner

문제

issue-tracker 정책에는 설계 시점 스코프-아웃의 티켓화 규칙(deferral rule)과 머지-시-닫힘(Closes #N) 규정은 있었지만, PR이 이슈를 부분적으로만 해결하거나 non-blocking 후속 작업을 남기는 랜딩 시점은 사각지대였다. 베이스라인 테스트(sonnet 워커 시뮬레이션 3회)에서 워커들이 후속 작업을 표면화는 하지만 정의된 운반 수단이 없어 3가지 서로 다른 즉흥 JSON 형식(상태 전이용 proposal 스키마를 "ticket":"new"로 오용)을 발명하는 것을 확인 — 실제 환경이라면 reconcile 파싱이 깨지고 후속 작업이 증발하는 경로다.

변경 (skills/issue-tracker/SKILL.md만, +29/−7)

  1. Worker Protocol: PR을 여는 턴 종료 메시지에 FOLLOW-UPS 섹션 필수 — 잔여 작업 각 1줄 + 잘린 이유, 없으면 명시적 FOLLOW-UPS: none (Hard Gate의 'silence is not N/A' 관용구와 일치). JSON proposal 블록은 상태 변경 전용임을 명시.
  2. Deferral rule: 트리거 목록에 'a worker's FOLLOW-UPS list at PR time' 추가 + 새 문단 — 부분 해결 PR도 티켓을 닫고(done = landed), 잔여분은 --spawned-by <n> 새 티켓으로 이관, outcome 코멘트가 후속 티켓을 명기.
  3. Dispatch loop 6단계: finalize 시퀀스에 FOLLOW-UPS 등록 단계 삽입 (등록 → outcome 코멘트, 기각은 가능하되 기록 필수).

검증 (writing-skills RED→GREEN)

  • RED: 워커 3/3 즉흥 형식 발명 (분산 높음 = 문안 비바인딩); 오케스트레이터 3/3은 deferral rule을 랜딩 시점으로 자발적 일반화 (누락 실패 없음 — 이쪽은 명문화 성격)
  • GREEN: 개정 문안으로 워커 3/3이 동일 FOLLOW-UPS 형식으로 수렴, 오케스트레이터 2/2가 finalize→--spawned-by 등록→코멘트 순서 준수
  • tests/issue-tracker/test-board-scripts.sh 전부 통과 (스크립트 무변경)

부분 해결 PR이 이슈를 닫을 때 잔여/후속 작업이 조용히 증발하는 사각지대를
막는다. 베이스라인 테스트에서 워커 3/3이 후속 작업을 표면화는 했지만 정의된
운반 수단이 없어 각기 다른 즉흥 JSON(proposal 스키마 오용)을 발명했음을 확인.

- Worker Protocol: PR을 여는 턴 종료 메시지에 FOLLOW-UPS 섹션 필수
  (잔여 작업 각 1줄 + 잘린 이유, 없으면 명시적 "FOLLOW-UPS: none")
- Deferral rule: 트리거에 PR 랜딩 시점 추가 + 부분 해결 PR도 티켓을 닫고
  (done = landed) 잔여분은 --spawned-by <n> 새 티켓으로 이관함을 명문화
- Dispatch loop 6단계: finalize 시 FOLLOW-UPS 항목 등록 → outcome 코멘트에
  후속 티켓 번호 명기 순서 규정

검증: 개정 문안으로 워커 3/3이 동일한 FOLLOW-UPS 형식으로 수렴, 오케스트레이터
2/2가 finalize→등록→코멘트 순서 준수. tests/issue-tracker 전부 통과.
@SSFSKIM
SSFSKIM marked this pull request as ready for review July 7, 2026 10:08
@SSFSKIM
SSFSKIM merged commit 47e8957 into main Jul 7, 2026
@SSFSKIM
SSFSKIM deleted the worktree-issue-tracker-followup-policy branch July 7, 2026 10:08
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant