PMFlow/docs/architecture/DATAFLOW.md

1.8 KiB

DATAFLOW

Signal Planner Flow (Post-Commit Async)

  1. AIPMOKernelService creates signal (signal.create) in transaction.
  2. Transaction commits.
  3. Background task triggers SignalPlannerService.analyze(signal_id, tenant_id, ...).
  4. Planner service opens isolated AsyncSessionLocal and loads context:
    • signal content/project context
    • project members (user_projects -> users -> user_workloads -> user_skill_bindings -> skill_tags)
  5. Planner calls llm_service.generate_structured_object(function_name="signal_planner_analyze") with hard wait timeout (25s).
  6. Structured success:
    • SignalStrategicAnalysisService.merge_and_save(...)
    • update signals.planner_status=completed
    • write planner payload into strategic_analysis.ai_planner
  7. Structured invalid / timeout fallback:
    • build degraded planner payload (fallback_mode=true)
    • still merge_and_save(...) and mark signals.planner_status=completed
  8. Hard failure (DB write / unexpected exception):
    • SignalStrategicAnalysisService.mark_failed(...)
    • update signals.planner_status=failed
    • try enqueue compensate reply via FeishuOutboxService.enqueue(...)

Model Routing Flow

  1. Frontend ModelRoutingConfigPage reads current mapping via /model-routing/functions/{function_name}.
  2. Manager updates mapping via PUT API.
  3. Backend persists override into integrations(type='model_routing').
  4. LLMService resolves function-level override at runtime before default control-plane rules.

Task Brief Flow

  1. Frontend chooses template / trigger generate.
  2. Backend task_brief_service stores template and run records in integrations(type='task_briefs').
  3. Generation run writes summary + artifact path.
  4. /task-briefs/center aggregates latest generated cards for sidebar center.