Kanban Workflow Patterns — P4-Cortex归档

Drewgent kanban 시스템에서 반복적으로 나타나는 workflow 패턴을归档.

Pattern 1: Integration Workflow → Kanban Card Creation

Trigger: agent가 tool이나 skill을 추가하려고 할 때 Flow:

  1. signal_processor.py: create_integration_workflow_task() 호출
  2. task_create(): integration_workflow_id로 task 생성 (board=‘integrations’)
  3. kanban.task.created brain signal emit
  4. cron dispatcher가 task를 worker에게 배정
  5. worker가 integration 작업 수행
  6. kanban_complete(): integration_workflow_id로 workflow 추적
  7. kanban.task.completed signal → complete_integration_workflow_task() 호출 (TODO: bidirectional hook)

DB logging:

  • integration_workflow_id column에 workflow ID 저장
  • task_events에 kind=‘completed’ with metadata

Signal path:

signal_processor.create_integration_workflow_task()
  → task_create(integration_workflow_id=wf.id)
  → brain_signals.kanban_task_created()
  → event_bus.emit("kanban.task.created")
  → signal_processor._on_kanban_task_created()
  → awareness.kanban

Pattern 2: Worker Spawn → Dispatch Loop

Trigger: cron dispatcher (1분마다) Flow:

  1. dispatch_once(): _reclaim_stale_tasks() 먼저 실행
  2. ready tasks에서 claim 가능한 것 선택 (board, failure_limit 필터)
  3. task_claim(): claim_lock, claim_expires 설정
  4. _spawn_worker_for_task(): ACP subprocess spawn, KANBAN_TASK_ID env 전달
  5. Worker heartbeat: kanban_heartbeat() periodic call
  6. Worker 완료: kanban_complete() 또는 TTL 만료 → kanban.worker.reclaimed

TTL enforcement:

  • claim_expires = now + ttl_seconds (default 3600s)
  • Worker crash detection: os.kill(pid, 0) — pid가 죽었으면 reclaim
  • _reclaim_stale_tasks(): 매 dispatch tick마다 실행, expired tasks → todo

Pattern 3: Parent-Child Dependency Chain

Trigger: 복잡한 작업을 하위 task로 분할할 때 Flow:

  1. kanban_create() with parent_task_ids=[parent_id] → child는 parent 완료 전까지 ‘todo’
  2. kanban_link(parent, child) → child가 ready인데 parent 안 끝남 → child: ready → todo
  3. Parent 완료 → _recompute_ready_for_children() → 모든 parent가 완료된 child → todo → ready
  4. child promotion signal: kanban.task.completed_recompute_ready_for_children()

Cycle detection (DFS):

kanban_link(A, B)
  → DFS(A, B) で BからAへのパスがあるか?
  →  있으면: cycle detected → ValueError
  →  없으면: link 생성

Pattern 4: Hallucination Guard (P0-brainstem enforcement)

Trigger: kanban_complete(task_id, created_cards=[...]) Flow:

  1. created_cards ID를 DB에서 검증 (SELECT id FROM tasks WHERE id=?)
  2. 존재하지 않으면 즉시 completion_blocked_hallucination 반환
  3. kanban.hallucination_blocked signal → awareness.integrity
  4. Prose scan: result/summary에서 t_<hex>{12} 패턴 추출 → 미해결 ref 기록

P0 enforcement:

  • DB 검증 없이는 completion 불가
  • 가짜 ID는 fake_id 필드에 기록됨
  • awareness event로 뇌가 이를 인식함

Pattern 5: Activity Logger → Content Board

Trigger: Discord/Telegram conversation에서 새로운 주제가 탐지될 때 Flow:

  1. scripts/kanban_activity_logger.py: conversation 분석
  2. kanban_create(title="[draft] ...", board='content', trigger_source='activity_logger')
  3. kanban.task.created signal
  4. content worker가 draft 작성
  5. user approval → kanban_complete() → SNS publishing

Board routing:

TriggerBoardTask title prefix
manualdefault없음
cron/automationdefault없음
integration workflowintegrations없음
activity loggercontent[draft]

Pattern 6: Bidirectional Workflow Completion (TODO)

Goal: task 완료 → integration workflow 완료 트리거 Current state: 片방향 only Needed:

  1. task_complete()에서 integration_workflow_id 확인
  2. integration_workflow_id 있으면 complete_integration_workflow_task() 호출
  3. kanban.task.completed event handler가 workflow completion 처리

Blocker: signal_processor._on_kanban_task_completed() handler 미구현


归档: Drewgent self-review — 2026-05-20