node_types: - company - supplier - project - contract - contract_change - construction_task - construction_task_detail - material - material_detail - contract_settlement - contract_settlement_detail - personnel - personnel_detail - preparation - production - lar - lar_change - project_detail_data - units local_datasource: type: jsonl jsonl_dir: ${PROJECT_ROOT}/filtered_datasource/datasource/filtered read_only: false target_project_ids: - "0f9c3e22-f4bb-4803-825a-4f238eeb06d5" - "f3e02e84-e81c-4aa6-88d4-f5aa108c8227" handler_configs: {} remote_datasource: type: api api_base_url: http://localhost:8000/api/third/v2 api_uid: 6b18c681-92d5-4c7f-802c-df413b6504c8 api_secret: jTk5gSHTqDIZng1zh2z6jrT8JjVgCKsmV8_7NyESbQk api_debug: true api_rate_limit_max_requests: 30 api_rate_limit_window_seconds: 10.0 poll_max_retries: 1 poll_interval: 0.5 target_project_ids: # 请替换为实际的项目ID,至少需要一个 - "0f9c3e22-f4bb-4803-825a-4f238eeb06d5" - "f3e02e84-e81c-4aa6-88d4-f5aa108c8227" handler_configs: supplier: {} persist: backend: sqlite db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/simple_pipeline_sm.db enable: true wipe_on_start: false logging: initialize: true file_dir: ${PROJECT_ROOT}/test_results/sync_state_machine file_name_pattern: simple_pipeline_sm_{timestamp}.log level: 20 strategies: company: skip_sync: false config: auto_bind: true auto_bind_fields: - credit_code depend_fields: {} local_orphan_action: none remote_orphan_action: create_local update_direction: pull supplier: skip_sync: false config: auto_bind: true auto_bind_fields: - credit_code depend_fields: {} local_orphan_action: none remote_orphan_action: create_local update_direction: pull project: skip_sync: false config: auto_bind: false auto_bind_fields: [] pre_bind_data_id: [] depend_fields: company_id: company local_orphan_action: none remote_orphan_action: none update_direction: push contract: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - company_id - code depend_fields: project_id: project company_id: supplier local_orphan_action: create_remote remote_orphan_action: none update_direction: push contract_change: skip_sync: false config: auto_bind: true auto_bind_fields: - contract_id - change_time - title depend_fields: project_id: project contract_id: contract local_orphan_action: create_remote remote_orphan_action: none update_direction: push construction_task: skip_sync: false config: auto_bind: true auto_bind_fields: - contract_id - task_type depend_fields: contract_id: contract project_id: project local_orphan_action: create_remote remote_orphan_action: none update_direction: push construction_task_detail: skip_sync: false config: auto_bind: true auto_bind_fields: - parent_id - date depend_fields: parent_id: construction_task local_orphan_action: create_remote remote_orphan_action: none update_direction: push material: skip_sync: false config: auto_bind: true auto_bind_fields: - contract_id - material_type depend_fields: contract_id: contract project_id: project local_orphan_action: create_remote remote_orphan_action: none update_direction: push material_detail: skip_sync: false config: auto_bind: true auto_bind_fields: - parent_id - date depend_fields: parent_id: material local_orphan_action: create_remote remote_orphan_action: none update_direction: push contract_settlement: skip_sync: false config: auto_bind: true auto_bind_fields: - contract_id depend_fields: contract_id: contract project_id: project local_orphan_action: create_remote remote_orphan_action: none update_direction: push contract_settlement_detail: skip_sync: false config: auto_bind: true auto_bind_fields: - parent_id - date depend_fields: parent_id: contract_settlement local_orphan_action: create_remote remote_orphan_action: none update_direction: push personnel: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - code depend_fields: project_id: project contract_id: contract local_orphan_action: create_remote remote_orphan_action: none update_direction: push personnel_detail: skip_sync: false config: auto_bind: true auto_bind_fields: - parent_id - date depend_fields: parent_id: personnel local_orphan_action: create_remote remote_orphan_action: none update_direction: push preparation: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - code depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push production: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - code depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push lar: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push lar_change: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - change_time - title depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push project_detail_data: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - key depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push # 未在 field_direction_overrides 中列出的 key 默认 push field_direction_key: key # 以节点 data.key 字段值作为方向查表键 field_direction_overrides: ensure_production: pull # 远程 → 本地 climb_production: pull # 远程 → 本地 challenge_production: pull # 远程 → 本地 units: skip_sync: false config: auto_bind: true auto_bind_fields: - project_id - serial_number depend_fields: project_id: project local_orphan_action: none remote_orphan_action: none update_direction: push