Skip to content

[Task Workflow] 업무카드·체크리스트·상태 전이 구현 #6

Closed

Description

@hywznn

한 줄 목표

수동 입력으로 실제 Task를 만들고, Server의 명시적 command와 guard를 통과할 때만 업무 상태가 바뀌도록 구현합니다.

초보자용 구분

  • Knowledge Workflow Catalog: 업무에 필요한 slot, checklist template, 공식 근거, evidence requirement를 정의한 버전 고정 설명서입니다.
  • AI Agent Pipeline: Catalog를 읽어 workflow_id와 후보를 제안합니다.
  • Server Task Workflow: 실제 Task의 상태, 권한, 승인 revision과 업무 기록을 실행합니다.

GET /api/v1/workflow-catalogs는 Server가 제공하지만 정의 원본은 fowoco/knowledge release입니다. Server는 Catalog YAML을 독자적으로 수정하지 않고 검증된 read-only projection만 읽습니다.

Task 상태

상태 의미
DRAFT 작성 중인 초안
NEEDS_INFO 필수정보가 부족함
READY_FOR_REVIEW 필수조건과 승인 요청 snapshot을 갖춰 검토 가능
APPROVED 현재 Task revision을 HR이 승인함
WAITING_WORKER 근로자 응답·문서를 기다림
WAITING_EXTERNAL 외부기관 처리 결과를 기다림
COMPLETED 완료 조건과 증빙을 충족함
CANCELLED 사유와 actor를 남기고 종료함

기술 장애는 Task FAILED로 섞지 않고 AiRun/Event 오류와 Audit로 관리합니다. COMPLETED, CANCELLED는 terminal입니다.

소유 API

  • GET /api/v1/workflow-catalogs
  • GET /api/v1/tasks
  • POST /api/v1/tasks
  • GET /api/v1/tasks/{taskId}
  • PATCH /api/v1/tasks/{taskId}
  • PATCH /api/v1/tasks/{taskId}/checklist-items/{itemId}
  • POST /api/v1/tasks/{taskId}/cancel

승인·반려·외부 제출·증빙·완료·활동 이력은 #11, Worker Link 전이는 #7, AI candidate 채택은 #24가 소유합니다.

구현 체크리스트

  • Task, checklist, transition history와 Flyway schema
  • TaskType, TaskStatus, TaskSource, 기능별 Error Code
  • TaskWorkflowService command/guard와 transaction
  • 수동 생성, 내용 수정, checklist 재평가, 취소 전이
  • company_id, role, required slot, 승인 무효화 guard
  • Entity setter/Controller의 임의 상태 변경 차단
  • @Version과 request expected_version 충돌 처리
  • Knowledge bundle의 workflow_catalog_version, workflow_id, checklist snapshot 저장
  • #25가 이어받을 PostgreSQL durable publication 경계를 ADR-0003에 정의
  • AI candidate ACCEPT/DISCARD와 Task 중복 방지 — #24에서 구현
  • 승인된 Task의 Worker Link 발급·폐기 전이 — #7에서 구현
  • Domain Event의 실제 durable publication adapter — #25에서 구현

완료 기준

  • 허용·금지 상태 전이를 parameterized test로 검증
  • required slot·필수 checklist 없이 승인 요청 불가
  • 중요값 변경 시 기존 승인 재사용 불가
  • 조건이 충분한 승인 후 수정은 기존 승인 무효화 + 새 snapshot + READY_FOR_REVIEW
  • 조건이 부족한 승인 후 수정은 기존 승인 무효화 + NEEDS_INFO
  • 필수 evidence 없이 COMPLETED 불가 — [Approval & Audit] 승인·반려·외부제출·증빙·완료·감사 로그 구현 #11 통합 test
  • 동시 수정 중 하나만 성공하고 타 사업장 접근은 404
  • OpenAPI에 상태, expected_version, 409/422, snake_case 계약 반영
  • ./gradlew clean test 통과

#5와의 경계

PR #37의 V3 Worker core와 #39의 WorkerTaskContextReader는 Task FK와 업무 가능 여부 확인에 필요한 최소 기반입니다. Worker CRUD·상세 DTO·Document metadata는 #5 담당 범위이며 이 Issue에서 대신 구현하지 않습니다.

배포 주의

  • local/test: 저장소의 Knowledge 0.2.0 DRAFT 개발 projection 사용
  • prod: WORKFLOW_CATALOG_LOCATION에 RELEASED projection 필수
  • 운영에서 DRAFT bundle이면 Server 시작 거부

검증·PR

경계 밖

관계

Activity

  1. added
    area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외
    priority:P0MVP 진행을 막는 최우선 핵심 작업
    status:blocked선행 작업이나 외부 조건 때문에 현재 진행할 수 없는 작업
    type:feature사용자 또는 Agent가 사용하는 기능 개발
    on Jul 21, 2026
  2. changed the title [-][Workflow] 업무카드와 상태 전이 규칙 구현[/-] [+][Workflow] 업무카드 CRUD·체크리스트·상태 전이 구현[/+] on Jul 21, 2026
  3. changed the title [-][Workflow] 업무카드 CRUD·체크리스트·상태 전이 구현[/-] [+][Task Workflow] 업무카드·체크리스트·상태 전이 구현[/+] on Jul 22, 2026
  4. self-assigned this
    on Jul 22, 2026
  5. added
    status:in-progress담당자가 현재 구현 중인 작업
    and removed
    status:blocked선행 작업이나 외부 조건 때문에 현재 진행할 수 없는 작업
    on Jul 23, 2026
  6. hywznn commented on Jul 23, 2026

    @hywznn
    MemberAuthor

    2026-07-23 작업 시작

    #11 구현과 PostgreSQL 17 CI가 완료되어 PR #37의 head에서 agent/6-task-workflow 브랜치를 시작합니다.

    • #37은 팀원 필수 리뷰 대기 중이며 보호 규칙을 우회해 병합하지 않습니다.
    • [Task Workflow] 업무카드·체크리스트·상태 전이 구현 #6 코드는 feat: 승인·감사 워크플로우 구현 #37 위에서 준비하되, 최종 PR·병합은 #37이 main에 들어간 뒤 기준 branch를 정리합니다.
    • #5는 완료로 가정하지 않고 PR #37의 최소 Worker core만 사용합니다. Worker CRUD·Document metadata는 #5를 침범하지 않습니다.
    • Knowledge Catalog 원본은 fowoco/knowledge가 소유합니다. Server에는 Catalog를 독자 정의하지 않고 versioned projection을 읽는 Port·검증 경계만 둡니다.
  7. added
    status:in-review구현을 마치고 리뷰 또는 병합을 기다리는 작업
    and removed
    status:in-progress담당자가 현재 구현 중인 작업
    on Jul 23, 2026
  8. hywznn commented on Jul 23, 2026

    @hywznn
    MemberAuthor

    구현 PR #39을 열었습니다. 현재는 #11 PR #37 위에 쌓은 stacked PR이라 Draft로 두었습니다.

    • 전체 ./gradlew clean test 통과
    • 소유 API 7개와 OpenAPI contract 구현
    • #5는 Worker 최소 read 경계만 사용하고 CRUD·Document metadata는 건드리지 않음
    • ADR-0003에 맞춰 승인 후 중요값 수정 시 기존 승인 무효화와 새 검토 snapshot을 같은 transaction에서 처리
    • Wiki·README 동기화 완료

    #37 승인·병합 후 #39 base를 main으로 변경하고 최종 리뷰·Squash Merge하면 #6을 닫을 수 있습니다. #7·#24·#25 소유 범위는 별도 Issue에서 이어갑니다.

  9. added
    security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업
    on Jul 23, 2026
  10. removed
    status:in-review구현을 마치고 리뷰 또는 병합을 기다리는 작업
    on Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외priority:P0MVP 진행을 막는 최우선 핵심 작업security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업type:feature사용자 또는 Agent가 사용하는 기능 개발

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions