Kanban Workflow Patterns — P4-Cortex归档
Drewgent kanban 시스템에서 반복적으로 나타나는 workflow 패턴을归档.
Pattern 1: Integration Workflow → Kanban Card Creation
Trigger: agent가 tool이나 skill을 추가하려고 할 때 Flow:
signal_processor.py:create_integration_workflow_task()호출task_create(): integration_workflow_id로 task 생성 (board=‘integrations’)kanban.task.createdbrain signal emit- cron dispatcher가 task를 worker에게 배정
- worker가 integration 작업 수행
kanban_complete():integration_workflow_id로 workflow 추적kanban.task.completedsignal →complete_integration_workflow_task()호출 (TODO: bidirectional hook)
DB logging:
integration_workflow_idcolumn에 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:
dispatch_once():_reclaim_stale_tasks()먼저 실행- ready tasks에서 claim 가능한 것 선택 (board, failure_limit 필터)
task_claim():claim_lock,claim_expires설정_spawn_worker_for_task(): ACP subprocess spawn,KANBAN_TASK_IDenv 전달- Worker heartbeat:
kanban_heartbeat()periodic call - 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:
kanban_create()withparent_task_ids=[parent_id]→ child는 parent 완료 전까지 ‘todo’kanban_link(parent, child)→ child가 ready인데 parent 안 끝남 → child: ready → todo- Parent 완료 →
_recompute_ready_for_children()→ 모든 parent가 완료된 child → todo → ready - 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:
- 각
created_cardsID를 DB에서 검증 (SELECT id FROM tasks WHERE id=?) - 존재하지 않으면 즉시
completion_blocked_hallucination반환 kanban.hallucination_blockedsignal →awareness.integrity- 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:
scripts/kanban_activity_logger.py: conversation 분석kanban_create(title="[draft] ...", board='content', trigger_source='activity_logger')kanban.task.createdsignal- content worker가 draft 작성
- user approval →
kanban_complete()→ SNS publishing
Board routing:
| Trigger | Board | Task title prefix |
|---|---|---|
| manual | default | 없음 |
| cron/automation | default | 없음 |
| integration workflow | integrations | 없음 |
| activity logger | content | [draft] |
Pattern 6: Bidirectional Workflow Completion (TODO)
Goal: task 완료 → integration workflow 완료 트리거 Current state: 片방향 only Needed:
task_complete()에서integration_workflow_id확인integration_workflow_id있으면complete_integration_workflow_task()호출kanban.task.completedevent handler가 workflow completion 처리
Blocker: signal_processor._on_kanban_task_completed() handler 미구현
归档: Drewgent self-review — 2026-05-20