Renewal 실행 결과를 기존 업무·안내 초안·생성 문서에 연결 - #131
Conversation
|
client 쪽에서 참고 차 확인했습니다 — 완료 상태 체크리스트 보니 'HWP/HWPX 생성 파일 저장·문서함 연결'까지 다 끝나서 남은 건 배포 환경 Smoke Test뿐이네요. CI도 통과 확인했습니다. client는 이 PR 병합 대기 상태로 issue #311/draft PR #312 걸어뒀고(fowoco/client), 병합되면 바로 이어서 붙이겠습니다. |
krestar
left a comment
There was a problem hiding this comment.
전체적으로 확인했고, 현재 이슈 #128 범위에서 merge를 막아야 할 정도의 문제는 찾지 못해 Approve 합니다.
한 가지 non-blocking으로 확인하고 싶은 부분이 있습니다.
RenewalExecutionContextReader에서는 RECONTRACT, STAY_PERIOD_EXTENSION, EMPLOYMENT_PERIOD_EXTENSION 세 TaskType을 Renewal 실행 대상으로 허용하고 있는데, Workflow 검증은 WF-STY-001로 고정되어 있습니다.
이슈 #128의 사용자 흐름이 체류연장 Candidate를 기준으로 작성되어 있어서 이번 범위에서 WF-STY-001만 실행하는 의도라면 현재 구현도 이해됩니다.
Workflow 정합성 리뷰 반영@krestar 님이 확인해 주신 문제였던 상태이 경우 Knowledge Catalog에서 변경한 기준
방어되는 사례
검증
실제 AI 연동 시 남은 확인Server는 이제 요청의 예를 들어 |
AI #33 연동 상태에 따른 체크리스트 갱신AI #33 최신 head 완료로 변경한 항목
따라서 Server와 AI 양쪽 코드 계약은 현재 다음 canonical pair로 일치합니다.
아직 완료하지 않은 항목
Server #131의 코드·CI와 AI #33의 구현은 준비됐지만, 실제 프로세스 간 호출은 아직 수행하지 않았으므로 배포 smoke 항목은 체크하지 않았습니다. AI 상세 반영: fowoco/ai#33 (comment) |
한눈에 보기
기존 Task를 AI Renewal Runtime에 연결하고, AI가 돌려준 누락 Slot·근로자 안내·생성 문서를 Server의 기존 업무와 문서함에 안전하게 반영합니다.
이번 갱신에서는 같은
EXPIRY_RENEWALIntent에 속한 Workflow를 Task type별로 정확히 고정했습니다.RECONTRACTWF-CON-001EMPLOYMENT_PERIOD_EXTENSIONWF-CON-001STAY_PERIOD_EXTENSIONWF-STY-001Closes #128
Closes #136
왜 필요한가요?
Server가 재계약·취업활동기간 연장·체류기간 연장 Task를 실제 Agent 실행 결과와 연결해야 합니다.
다만 AI 결과만으로 업무를 자동 승인하거나 발송하면 안 되므로, 기존 Task 상태·HR 검토·문서함 경계 안에서만 반영합니다.
기존 브랜치에는 Workflow 정합성 문제가 하나 있었습니다.
이 상태에서는
RECONTRACT도 체류 연장 Workflow로 AI에 전달됩니다. Knowledge Catalog에서는 재계약과 취업활동기간 연장이WF-CON-001이므로 실제 계약과 달랐습니다.변경 후 실행 흐름
자동 승인, 자동 발송, 기관 자동 제출, 자동 완료는 수행하지 않습니다.
API와 Context 구성
Client → Server
POST /api/v1/tasks/{taskId}/renewal-runexpected_version수용USER_INPUTSlot만slot_answers로 수용DOCUMENT_OCRSlot의 Client 직접 제출 차단Server → AI
POST /internal/v1/workflows/renewal/runbusiness_data_json.renewal_inputs에 저장한 뒤 다음 호출의slots에 병합Task type과 Workflow 검증
RenewalWorkflowPolicy에서 Renewal Runtime이 지원하는 canonical 쌍을 한 곳에 정의합니다.RECONTRACT → WF-CON-001EMPLOYMENT_PERIOD_EXTENSION → WF-CON-001STAY_PERIOD_EXTENSION → WF-STY-001Server는 두 단계에서 검증합니다.
task.workflowId가 맞지 않으면 AI를 호출하지 않습니다.workflowId가 요청의task.workflowId와 다르면UNEXPECTED_WORKFLOW로 거부합니다.따라서 다음 교차 조합은 통과하지 않습니다.
RECONTRACT + WF-STY-001EMPLOYMENT_PERIOD_EXTENSION + WF-STY-001STAY_PERIOD_EXTENSION + WF-CON-001scenario=out_of_scope,intent=OUT_OF_SCOPE인 정상 종료만 빈workflowId를 허용합니다.AI 응답 반영 범위
누락정보와 Case 신호
missingSlots,requestedFields,caseSignals를 계약 범위 안에서 검증ask_hr결과는 HR 입력 대기 상태로 반영ask_worker결과는 기존DocumentRequestDraft에 HR 검토용 안내 초안으로 저장languageAssistant결과도 허용된 필드와 크기 안에서만 저장생성 문서
scenario=generate일 때만generatedDocuments[]처리template_id,format,values를 문서 생성 API에 전달FileStorage,stored_file,worker_document에 연결submission_status=SUBMITTEDVERIFIED처리하지 않음values는 Task JSON·감사로그·외부 API 응답에 저장하지 않음현재 허용 템플릿은 Renewal 초안 4종입니다. HWPX 응답 계약은 수용하지만 HWPX 직접 생성·변환은 후속 범위입니다.
계약 및 보안 검증
requestId,attemptId,taskId일치0..1범위missingSlots,requestedFields,caseSignals거부관측성
Server가 직접 소유하는 다음 구간의 성공·실패·소요시간을 구조화 로그로 남깁니다.
CONTEXT_LOADRENEWAL_RUNTIME_CALLDOCUMENT_GENERATIONRESULT_APPLYTOTALServer 로그의
request_id는 AIX-Request-Id와 동일하게 사용하고, 외부 HTTP 요청 ID는http_request_id로 별도 기록합니다.자동 테스트
WF-CON-001로 전달되고 같은 값으로 응답ask_hr → slot_answers → generate재호출expected_version과 늦은 attempt 응답 차단로컬 검증
./gradlew clean test5310037skip532tests 및 executable jar build 통과AI팀 연동 조건
Renewal 요청에는 이미 확정된
task.workflowId가 들어갑니다. AI Runtime은 Renewal 내부에서 발화만 다시 분류해 이 값을 다른 Workflow로 덮어쓰면 안 됩니다.구체적으로 다음을 맞춰야 합니다.
task.workflowId=WF-CON-001이면 정상 응답도workflowId=WF-CON-001task.workflowId=WF-STY-001이면 정상 응답도workflowId=WF-STY-001task.workflowId를 constraint로 사용OUT_OF_SCOPE만 빈 Workflow 허용현재 Server 자동 테스트는 이 계약을 고정했고, AI #33 head
35d92fa에도 Task Workflow 보존 구현과 회귀 테스트가 반영됐습니다. 실제 Server ↔ AI smoke test는 AI #33 병합·배포 후 진행합니다.배포 전 Smoke Test
재계약
RECONTRACT / WF-CON-001Task 실행task.workflowId=WF-CON-001확인intent=EXPIRY_RENEWAL,workflowId=WF-CON-001확인ask_hr,ask_worker,generate중 해당 결과가 기존 Task에 반영되는지 확인체류기간 연장
STAY_PERIOD_EXTENSION / WF-STY-001Task 실행WF-STY-001인지 확인문서 생성
scenario=generate응답 수신stored_file과worker_document연결 확인완료 상태
task.workflowId보존 구현 및 회귀 테스트 반영 (head35d92fa)제외 범위
progressEvents전체 저장