fix(gateway): 결재 텔레그램 직통 봇 폴백 — 폴러 callback_query 공용 처리로 죽은 버튼 사유 해소 - #307
Merged
Conversation
- 크루 직통 봇 폴러(startAgentTelegram)가 callback_query를 처리한다 — 회사
게이트웨이와 공용 handleApprovalCallback(단일 원천, 페어링 사장·페어링 채팅만)
- 결재 푸시 목적지를 브리핑과 같은 telegramBriefingDest 판정으로 합류 —
게이트웨이 우선, 못 보내면 담당 크루(item.slug)의 직통 봇 폴백. 음소거 존중
- 폴백 카드의 봇 귀속(tg.botSlug)을 setApprovalMeta로 저장 — 해소 편집
(approval_resolved)·후속 배달(approval_followup)이 같은 봇 토큰을 쓴다
(approvalCardToken 단일 판정, 게이트웨이 카드의 enabled 게이트 LOW-4 유지)
- 직통 봇 텍스트 결재("승인 ap-xxx")는 큐 미경유 즉시 처리 — 결재 대기 턴이
워커 슬롯을 점유해도 승인이 뚫린다(슬랙 approval 분기와 같은 위상)
- 행동 테스트 5건(카드 폴백·콜백 인가·폴러 구동·해소 귀속) + 변이 4종 red 실측
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- handleApprovalCallback: chatId·cq.message.chat 명시 요구 — 미페어링 cfg + 메시지 없는 콜백에서 String(undefined) 동등으로 게이트가 열리고 예외가 폴러 offset을 영구 오염시키던 fail-open 차단(검수 MEDIUM-1 실측) - 콜백 테스트: 페어링 채팅 밖·미페어링 fail-open 케이스 추가(MEDIUM-2) - 폴러 텍스트 결재 행동 테스트: 큐 미경유 즉시 확정 + 잡 미적재(MEDIUM-3) - 후속 배달 행동 테스트: botSlug 봇 토큰·enabled 게이트(LOW-4) — 소스 앵커 대체(MEDIUM-4) - 무음 실패 로그 2건(후속 미배달·결재 회신 발송 실패, LOW-1·LOW-2) - 검수가 GREEN으로 실측한 변이 3종(채팅 게이트 제거·텍스트 분기 무력화·enabled 게이트 제거) 재실행 — 전부 red 전환 확인 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Owner
Author
|
분리 검수(별도 컨텍스트 code-reviewer) 1차 CHANGES REQUESTED → 반영 커밋 push 완료.
전체 스위트 963 pass / 0 fail · next build 통과. 재검수 회신 대기 중. |
beyondworks
added a commit
that referenced
this pull request
Aug 27, 2026
… 봇 slug 정렬 폴백 (재검수 LOW-2) (#312) * fix(gateway,connectors): 결재 유령 slug 사각 해소 — 기본 크루 최종 폴백 + 등록 시 실크루 귀속 (PR #307 분리 검수 LOW-3) - pushEvent approval: 담당 slug의 봇이 없으면 defaultCrew 정본으로 최종 폴백(inbox 폴백과 같은 계열, 음소거는 telegramBriefingDest 안 channelSends가 그대로 존중) - callConnectorTool 결재 등록: slug 부재 시 유령 'crew' 대신 기본 크루로 귀속 - 행동 테스트 3건: 유령 slug 폴백 발송·음소거 계약·등록 귀속 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test,perf(gateway): 분리 검수 반영 — 음소거 테스트 자체 시드(MEDIUM-1)·defaultCrew 정본 잠금(LOW-1)·listAgents 가드(LOW-3)·인덱스 의존 제거(LOW-5) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(gateway): 결재 최종 폴백 확장 — 기본 크루도 봇이 없으면 페어링 봇 중 slug 정렬 첫 번째로 (재검수 LOW-2) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.
배경
PR #305가 브리핑 3종(routine/job/crewmail)에 직통 봇 폴백을 도입하면서 결재는 의도적으로 제외했습니다 — 직통 봇 폴러가
callback_query를 처리하지 않아 인라인 버튼이 죽은 버튼이 되기 때문(분리 검수 LOW-2). 이 PR이 그 사유 자체를 제거하고 결재를 같은 폴백 계열에 합류시킵니다.변경
handleApprovalCallback공용 함수로 추출해 두 폴러가 같은 원천을 씁니다(한쪽만 고쳐지는 드리프트 방지). 인가는 페어링 채팅(ownerChat) + 페어링 사장(ownerId) 본인만.pushEvent의 approval 분기가 브리핑과 같은telegramBriefingDest판정을 지납니다(게이트웨이 우선 → 담당 크루item.slug의 직통 봇, 음소거 존중). 폴백 반환에botSlug를 실어setApprovalMeta로 카드 귀속을 저장하고, 해소 편집(approval_resolved)·후속 배달(approval_followup)이 그 봇 토큰으로 같은 카드를 다룹니다(approvalCardToken단일 판정, 게이트웨이 카드의 enabled 게이트 LOW-4는 유지).runAgentTurn머리에서 처리는 됐지만 큐 경유라, 결재 대기(권한 게이트) 턴들이 워커 슬롯(동시 2)을 점유하면 승인이 큐에 갇히는 교착이 가능했습니다 — 슬랙 approval 분기·인라인 버튼과 같은 위상으로 격상.검증
null &&"·인가 무력화·봇 귀속 무력화·폴러 분기 제거) 각각 정확히 해당 테스트 1건 red 실측 후 복원next build통과. 라이브 텔레그램 미검증 — 실봇 클릭 검증은 상주 반영 후(정직 표기)PR #306 처리 권고
#306(결재 비대칭 정직 표기)은 이 PR이 비대칭 자체를 없애므로 머지하지 않고 닫는 것을 권고합니다. 안내문 문구("직통 봇으로는 결재 요청이 오지 않습니다")가 이 PR 이후 모든 상태에서 거짓이 됩니다. 담당 크루에 직통 봇이 없는 경우 결재가 텔레그램에 못 가는 잔여 상태는 브리핑 3종과 동일한 조건이라 별도 안내 없이 대칭입니다.
🤖 Generated with Claude Code