[상류 구현] P52b 명시적 deferred launch discard 결과 #217
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
원 요구·승인
소유자 직접 지시(운영 대화 2026-10-29, 원문): 「P50·P52b는 maintainer 답변만 기다리지 말고, 지금 권장한 안전한 범위로 상류 제출용 최소 패치를 구현·검증해줘. 답변이 꼭 필요한 부분만 분리해 남기고, 운영판 반영 전에는 변경 내용과 검증 결과를 알려줘.」 승인된 권장안(P52b): 기존 task mutation/ownership 검사에 맞는 동기식 task 범위 요청으로 하고, already-clear·discarded·settlement 미완을 구분하며, 실패 시 durable record와 owner를 보존한다. 이 task는 P52b 상류 제출용 구현 단위의 단일 source writer다. 원 준비 단위(queue KANDEV-UPSTREAM-P52b-20261014-project, wrapper b0cc9e7e, 원 준비 39d8ee09 — 현재 등록 DB에 없음, 준비 flow closed)는 다시 열지 않고 입력으로만 쓴다.
입력
할 일 (원자 변경 1개)
경계
운영판 반영·교체·재시작 0, 운영 DB write 0, 실운영 endpoint 호출 0, 공개 PR/issue/comment/push 0. 새 권한·역할·DB schema·비밀·설정 잠금 우회 0. 모델·동적 순서·한도 변경 0. P50 구현 단위와 같은 통합 파일·Git ref를 동시에 쓰지 않는다(겹치면 8e에 경로를 알린다).
8e 수락(상류 제출 후보, 운영 root 단일 writer 마무리): 사본 kandev-upstream-p52b_1oa6vl1y HEAD fc28e64521c2 clean, base da9ff6332863, commit 4개(460ace9 feat, 2af99df, 0c850fa, fc28e64 root 정상 commit), 14 files +932/-69, 새 test 파일 0. 8e 재확인: validateCoverage covered(14 files), CALL-20261030-f4d4e89d9a3a completed APPROVE findings 0(artifact 261030_p52b-explicit-discard-review.md가 fc28e645 기재). 실검증 근거(root 원출력): HTTP/auth 7 cases(43309), SQLite trigger rollback·재요청 9 cases(ed24cae9), Triggered 정산 owner 해제 RED16325->GREEN85306. PG 실DB·운영 API·Windows 전체 suite PASS 주장 0. 사고: 원 SID 9ee489b6가 18:48:37Z golangci-lint 이름 기준 일괄 종료 → root가 정식 stop·auto_run false, 그 SID 재개 0. maintainer 미결: API path/verb/응답 필드(POST /api/v1/tasks/:id/deferred-launch/discard, 200 outcome/reason)와 전용 operator 권한 여부(#4508 답 0). 상류 중복 PR 없음. 다음: 93이 게시 방식 결정(독립 새 PR 제안형, #4508 Refs) → 5d. 운영판 반영 0.
검토 지적(clear 실패 시 owner 소실)을 원자 경계로 수정했습니다.
0c850fa1ca4/ baseda9ff633286, 14 files+930/-69,_test.go변경 0, push·PR·병합 없음ClearTaskDeferredLaunchAndReleaseOwnershipIfUnchanged: deferred-launch CAS와 automation-start owner 조건부 해제를 한 task 트랜잭션에서 적용. 한쪽 실패 시 양쪽 롤백되므로 "record는 남고 owner만 사라짐"과 그 반대가 모두 불가능. 다른/bound run의 marker는 그대로 두고 clear를 실패시키지 않음. owner/session 조회 불가는 변경 전retained/ownership_incomplete.TaskRepository인터페이스·기존 fake는 건드리지 않고RemoveTaskMetadataKeyIfValue방식의 repository type assertion으로만 연결했습니다.BEFORE UPDATEtrigger overlay에서 clear가 함께 롤백되어 record·owner 둘 다 보존, trigger 제거 후 재시도에서 둘 다 제거. already-clear/성공/settlement/소유권 조회 불가/다른 owner/claim 경쟁/successor/live claim/비간섭도 통과. build·vet·changed-delta lint 0, 관련 package 시험·docs 검증·validateCoverage통과.검토 단계 완료 신호를 보냈고, 다음 단계에서 8e로 결과 1회 인계가 남아 있습니다.