|
@@ -6,92 +6,6 @@
|
|
|
"status": "active",
|
|
"status": "active",
|
|
|
"source_of_truth": "product_documents/抖音游走策略/douyin_walk_strategy.v1.json",
|
|
"source_of_truth": "product_documents/抖音游走策略/douyin_walk_strategy.v1.json",
|
|
|
"notes": "P6 runtime source of truth. Excel is the human-maintained source. The current schema and DB validator use the 21-table runtime contract.",
|
|
"notes": "P6 runtime source of truth. Excel is the human-maintained source. The current schema and DB validator use the 21-table runtime contract.",
|
|
|
- "walk_strategy_meta": [
|
|
|
|
|
- {
|
|
|
|
|
- "strategy_id": "douyin_walk_strategy_v1",
|
|
|
|
|
- "strategy_version": "V1.0",
|
|
|
|
|
- "platform": "douyin",
|
|
|
|
|
- "status": "active",
|
|
|
|
|
- "owner": "ContentFindAgent",
|
|
|
|
|
- "source_json_path": "product_documents/抖音游走策略/douyin_walk_strategy.v1.json",
|
|
|
|
|
- "description": "P6 walk strategy for bounded query pagination, author edge and hashtag edge.",
|
|
|
|
|
- "notes": "P9 and P10 are merged into P6. This strategy is active for the current V1 runtime."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_node_catalog": [
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "pattern_seed",
|
|
|
|
|
- "node_label": "Pattern seed",
|
|
|
|
|
- "node_category": "input",
|
|
|
|
|
- "id_field": "policy_run_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": false,
|
|
|
|
|
- "notes": "P2 starts from seed terms."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "query",
|
|
|
|
|
- "node_label": "Search query",
|
|
|
|
|
- "node_category": "action_input",
|
|
|
|
|
- "id_field": "search_query_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": false,
|
|
|
|
|
- "notes": "Initial item query or tag query."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "search_page",
|
|
|
|
|
- "node_label": "Search page",
|
|
|
|
|
- "node_category": "platform_result",
|
|
|
|
|
- "id_field": "search_page_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": true,
|
|
|
|
|
- "notes": "Carries has_more and next_cursor."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "video",
|
|
|
|
|
- "node_label": "Douyin video",
|
|
|
|
|
- "node_category": "content",
|
|
|
|
|
- "id_field": "platform_content_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": false,
|
|
|
|
|
- "notes": "Video is the core V1 content object."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "author",
|
|
|
|
|
- "node_label": "Douyin author",
|
|
|
|
|
- "node_category": "entity",
|
|
|
|
|
- "id_field": "platform_author_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": false,
|
|
|
|
|
- "notes": "Author comes from discovered videos in this run."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "author_works_page",
|
|
|
|
|
- "node_label": "Author works page",
|
|
|
|
|
- "node_category": "platform_result",
|
|
|
|
|
- "id_field": "author_works_page_id",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": true,
|
|
|
|
|
- "notes": "Author作品列表页."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "hashtag",
|
|
|
|
|
- "node_label": "Hashtag",
|
|
|
|
|
- "node_category": "signal",
|
|
|
|
|
- "id_field": "hashtag",
|
|
|
|
|
- "can_expand": true,
|
|
|
|
|
- "is_signal_node": true,
|
|
|
|
|
- "notes": "Only strong relevant tags may expand."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "node_type": "asset",
|
|
|
|
|
- "node_label": "Final asset",
|
|
|
|
|
- "node_category": "asset",
|
|
|
|
|
- "id_field": "asset_id",
|
|
|
|
|
- "can_expand": false,
|
|
|
|
|
- "is_signal_node": false,
|
|
|
|
|
- "notes": "Final output object."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
"walk_edge_catalog": [
|
|
"walk_edge_catalog": [
|
|
|
{
|
|
{
|
|
|
"edge_id": "query_next_page",
|
|
"edge_id": "query_next_page",
|
|
@@ -224,63 +138,6 @@
|
|
|
"notes": "Lower budget tier."
|
|
"notes": "Lower budget tier."
|
|
|
}
|
|
}
|
|
|
],
|
|
],
|
|
|
- "walk_edge_trigger_rules": [
|
|
|
|
|
- {
|
|
|
|
|
- "trigger_id": "tr_query_next_page_success",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "input_level": "query",
|
|
|
|
|
- "field_path": "search_query_effect_status",
|
|
|
|
|
- "operator": "equals",
|
|
|
|
|
- "expected_value": "success",
|
|
|
|
|
- "required": true,
|
|
|
|
|
- "failure_policy": "skip_edge",
|
|
|
|
|
- "notes": "Only effective query may page."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "trigger_id": "tr_query_next_page_cursor",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "input_level": "query",
|
|
|
|
|
- "field_path": "raw_payload.next_cursor",
|
|
|
|
|
- "operator": "not_empty",
|
|
|
|
|
- "expected_value": true,
|
|
|
|
|
- "required": true,
|
|
|
|
|
- "failure_policy": "skip_edge",
|
|
|
|
|
- "notes": "Cursor is required."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "trigger_id": "tr_video_author_exists",
|
|
|
|
|
- "edge_id": "video_to_author",
|
|
|
|
|
- "input_level": "content",
|
|
|
|
|
- "field_path": "platform_author_id",
|
|
|
|
|
- "operator": "not_empty",
|
|
|
|
|
- "expected_value": true,
|
|
|
|
|
- "required": true,
|
|
|
|
|
- "failure_policy": "skip_edge",
|
|
|
|
|
- "notes": "No author id means no author edge."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "trigger_id": "tr_hashtag_relevant",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "input_level": "hashtag",
|
|
|
|
|
- "field_path": "hashtag_effect_status",
|
|
|
|
|
- "operator": "equals",
|
|
|
|
|
- "expected_value": "success",
|
|
|
|
|
- "required": true,
|
|
|
|
|
- "failure_policy": "skip_edge",
|
|
|
|
|
- "notes": "Only strong relevant hashtag expands."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "trigger_id": "tr_rule_blocked_stop",
|
|
|
|
|
- "edge_id": "path_stop",
|
|
|
|
|
- "input_level": "content",
|
|
|
|
|
- "field_path": "content_effect_status",
|
|
|
|
|
- "operator": "equals",
|
|
|
|
|
- "expected_value": "rule_blocked",
|
|
|
|
|
- "required": true,
|
|
|
|
|
- "failure_policy": "continue",
|
|
|
|
|
- "notes": "Rule blocked content stops expansion."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
"walk_rule_pack_binding": [
|
|
"walk_rule_pack_binding": [
|
|
|
{
|
|
{
|
|
|
"binding_id": "bind_decision_asset_content_pack",
|
|
"binding_id": "bind_decision_asset_content_pack",
|
|
@@ -293,352 +150,6 @@
|
|
|
"notes": "Asset commit is owned by the Content pack decision."
|
|
"notes": "Asset commit is owned by the Content pack decision."
|
|
|
}
|
|
}
|
|
|
],
|
|
],
|
|
|
- "walk_budget_policy": [
|
|
|
|
|
- {
|
|
|
|
|
- "budget_id": "budget_query_next_page_v1",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "max_total_actions": 30,
|
|
|
|
|
- "max_per_query": 2,
|
|
|
|
|
- "max_per_content": null,
|
|
|
|
|
- "max_pages": 3,
|
|
|
|
|
- "max_depth": 3,
|
|
|
|
|
- "max_tag_hops": null,
|
|
|
|
|
- "budget_tier": "normal",
|
|
|
|
|
- "notes": "First page plus at most two more pages."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "budget_id": "budget_video_author_v1",
|
|
|
|
|
- "edge_id": "video_to_author",
|
|
|
|
|
- "max_total_actions": 10,
|
|
|
|
|
- "max_per_query": null,
|
|
|
|
|
- "max_per_content": 1,
|
|
|
|
|
- "max_pages": null,
|
|
|
|
|
- "max_depth": 3,
|
|
|
|
|
- "max_tag_hops": null,
|
|
|
|
|
- "budget_tier": "normal",
|
|
|
|
|
- "notes": "At most 10 authors per run."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "budget_id": "budget_author_works_v1",
|
|
|
|
|
- "edge_id": "author_to_works",
|
|
|
|
|
- "max_total_actions": 10,
|
|
|
|
|
- "max_per_query": null,
|
|
|
|
|
- "max_per_content": null,
|
|
|
|
|
- "max_pages": 3,
|
|
|
|
|
- "max_depth": 3,
|
|
|
|
|
- "max_tag_hops": null,
|
|
|
|
|
- "budget_tier": "normal",
|
|
|
|
|
- "notes": "At most 20 works per author in later implementation."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "budget_id": "budget_tag_query_v1",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "max_total_actions": 10,
|
|
|
|
|
- "max_per_query": null,
|
|
|
|
|
- "max_per_content": 3,
|
|
|
|
|
- "max_pages": null,
|
|
|
|
|
- "max_depth": 3,
|
|
|
|
|
- "max_tag_hops": 10,
|
|
|
|
|
- "budget_tier": "normal",
|
|
|
|
|
- "notes": "At most 10 tag hops per run."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_stop_policy": [
|
|
|
|
|
- {
|
|
|
|
|
- "stop_policy_id": "stop_rule_blocked",
|
|
|
|
|
- "edge_id": "path_stop",
|
|
|
|
|
- "condition_label": "rule blocked",
|
|
|
|
|
- "field_path": "content_effect_status",
|
|
|
|
|
- "operator": "equals",
|
|
|
|
|
- "expected_value": "rule_blocked",
|
|
|
|
|
- "stop_action": "stop_path",
|
|
|
|
|
- "reason_code": "rule_blocked",
|
|
|
|
|
- "priority": 10,
|
|
|
|
|
- "notes": "Hard gate blocked content cannot expand."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "stop_policy_id": "stop_failed_content",
|
|
|
|
|
- "edge_id": "path_stop",
|
|
|
|
|
- "condition_label": "failed content",
|
|
|
|
|
- "field_path": "content_effect_status",
|
|
|
|
|
- "operator": "equals",
|
|
|
|
|
- "expected_value": "failed",
|
|
|
|
|
- "stop_action": "stop_path",
|
|
|
|
|
- "reason_code": "content_failed",
|
|
|
|
|
- "priority": 20,
|
|
|
|
|
- "notes": "Failed content does not expand."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "stop_policy_id": "stop_budget_exhausted",
|
|
|
|
|
- "edge_id": "budget_downgrade",
|
|
|
|
|
- "condition_label": "budget exhausted",
|
|
|
|
|
- "field_path": "budget.remaining_actions",
|
|
|
|
|
- "operator": "less_or_equal",
|
|
|
|
|
- "expected_value": 0,
|
|
|
|
|
- "stop_action": "stop_edge",
|
|
|
|
|
- "reason_code": "budget_exhausted",
|
|
|
|
|
- "priority": 30,
|
|
|
|
|
- "notes": "No budget left."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "stop_policy_id": "stop_tag_hop_limit",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "condition_label": "tag hop limit",
|
|
|
|
|
- "field_path": "walk_context.tag_hop_count",
|
|
|
|
|
- "operator": "greater_or_equal",
|
|
|
|
|
- "expected_value": 10,
|
|
|
|
|
- "stop_action": "stop_edge",
|
|
|
|
|
- "reason_code": "tag_hop_limit",
|
|
|
|
|
- "priority": 40,
|
|
|
|
|
- "notes": "Max tag expansion reached."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_retry_policy": [
|
|
|
|
|
- {
|
|
|
|
|
- "retry_policy_id": "retry_query_next_page",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "operation": "douyin_keyword_search",
|
|
|
|
|
- "max_retries": 0,
|
|
|
|
|
- "retry_interval_seconds": 0,
|
|
|
|
|
- "on_final_failure": "mark_edge_failed",
|
|
|
|
|
- "notes": "Single query/page failure should not fail whole run."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "retry_policy_id": "retry_author_works",
|
|
|
|
|
- "edge_id": "author_to_works",
|
|
|
|
|
- "operation": "douyin_author_works",
|
|
|
|
|
- "max_retries": 1,
|
|
|
|
|
- "retry_interval_seconds": 2,
|
|
|
|
|
- "on_final_failure": "mark_edge_failed",
|
|
|
|
|
- "notes": "Author edge may retry once."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "retry_policy_id": "retry_hashtag_query",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "operation": "tag_query_generation",
|
|
|
|
|
- "max_retries": 0,
|
|
|
|
|
- "retry_interval_seconds": 0,
|
|
|
|
|
- "on_final_failure": "skip_edge",
|
|
|
|
|
- "notes": "Tag query generation should be deterministic."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_action_catalog": [
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "fetch_next_page",
|
|
|
|
|
- "action_label": "拉下一页",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "runtime_effect": "creates_search_page",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Uses next_cursor."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "extract_content",
|
|
|
|
|
- "action_label": "拆出视频",
|
|
|
|
|
- "edge_id": "search_page_to_content",
|
|
|
|
|
- "runtime_effect": "creates_video",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Search page to videos."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "expand_author",
|
|
|
|
|
- "action_label": "扩作者",
|
|
|
|
|
- "edge_id": "video_to_author",
|
|
|
|
|
- "runtime_effect": "creates_author",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Author id from video."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "fetch_author_works",
|
|
|
|
|
- "action_label": "拉作者作品",
|
|
|
|
|
- "edge_id": "author_to_works",
|
|
|
|
|
- "runtime_effect": "creates_author_works_page",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Author works page."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "convert_author_work",
|
|
|
|
|
- "action_label": "作者作品入视频判断",
|
|
|
|
|
- "edge_id": "author_work_to_content",
|
|
|
|
|
- "runtime_effect": "creates_video",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Works become discovered content."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "extract_hashtag",
|
|
|
|
|
- "action_label": "提取 tag",
|
|
|
|
|
- "edge_id": "video_to_hashtag",
|
|
|
|
|
- "runtime_effect": "creates_hashtag",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Extract from tags/text_extra/cha_list."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "create_tag_query",
|
|
|
|
|
- "action_label": "生成 tag query",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "runtime_effect": "creates_query",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Writes tag query."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "commit_asset",
|
|
|
|
|
- "action_label": "沉淀资产",
|
|
|
|
|
- "edge_id": "decision_to_asset",
|
|
|
|
|
- "runtime_effect": "creates_asset",
|
|
|
|
|
- "is_terminal": true,
|
|
|
|
|
- "writes_next_hop": true,
|
|
|
|
|
- "notes": "Final output."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "stop_path",
|
|
|
|
|
- "action_label": "停止路径",
|
|
|
|
|
- "edge_id": "path_stop",
|
|
|
|
|
- "runtime_effect": "stops_path",
|
|
|
|
|
- "is_terminal": true,
|
|
|
|
|
- "writes_next_hop": false,
|
|
|
|
|
- "notes": "No more expansion."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "walk_action": "downgrade_budget",
|
|
|
|
|
- "action_label": "降预算",
|
|
|
|
|
- "edge_id": "budget_downgrade",
|
|
|
|
|
- "runtime_effect": "lowers_budget",
|
|
|
|
|
- "is_terminal": false,
|
|
|
|
|
- "writes_next_hop": false,
|
|
|
|
|
- "notes": "Continue with lower budget."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_source_path_mapping": [
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_query_next_page",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "source_path_type": "query_to_search_page",
|
|
|
|
|
- "from_node_type": "query",
|
|
|
|
|
- "to_node_type": "search_page",
|
|
|
|
|
- "origin_path_template": "query:{search_query_id}",
|
|
|
|
|
- "source_evidence_ref_template": "search_queries:{search_query_id}",
|
|
|
|
|
- "notes": "Pagination source path."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_search_page_content",
|
|
|
|
|
- "edge_id": "search_page_to_content",
|
|
|
|
|
- "source_path_type": "search_query_to_content",
|
|
|
|
|
- "from_node_type": "search_page",
|
|
|
|
|
- "to_node_type": "video",
|
|
|
|
|
- "origin_path_template": "query:{search_query_id}/page:{page_cursor}",
|
|
|
|
|
- "source_evidence_ref_template": "discovered_content:{content_discovery_id}",
|
|
|
|
|
- "notes": "Search result content path."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_video_author",
|
|
|
|
|
- "edge_id": "video_to_author",
|
|
|
|
|
- "source_path_type": "video_to_author",
|
|
|
|
|
- "from_node_type": "video",
|
|
|
|
|
- "to_node_type": "author",
|
|
|
|
|
- "origin_path_template": "video:{platform_content_id}",
|
|
|
|
|
- "source_evidence_ref_template": "author:{platform_author_id}",
|
|
|
|
|
- "notes": "Author clue from video."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_author_works",
|
|
|
|
|
- "edge_id": "author_to_works",
|
|
|
|
|
- "source_path_type": "author_to_works",
|
|
|
|
|
- "from_node_type": "author",
|
|
|
|
|
- "to_node_type": "author_works_page",
|
|
|
|
|
- "origin_path_template": "author:{platform_author_id}",
|
|
|
|
|
- "source_evidence_ref_template": "author_works:{author_works_page_id}",
|
|
|
|
|
- "notes": "Author works page path."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_author_work_content",
|
|
|
|
|
- "edge_id": "author_work_to_content",
|
|
|
|
|
- "source_path_type": "author_work_to_content",
|
|
|
|
|
- "from_node_type": "author_works_page",
|
|
|
|
|
- "to_node_type": "video",
|
|
|
|
|
- "origin_path_template": "author:{platform_author_id}/works_page:{page_cursor}",
|
|
|
|
|
- "source_evidence_ref_template": "discovered_content:{content_discovery_id}",
|
|
|
|
|
- "notes": "Author work content path."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_video_hashtag",
|
|
|
|
|
- "edge_id": "video_to_hashtag",
|
|
|
|
|
- "source_path_type": "video_to_hashtag",
|
|
|
|
|
- "from_node_type": "video",
|
|
|
|
|
- "to_node_type": "hashtag",
|
|
|
|
|
- "origin_path_template": "video:{platform_content_id}",
|
|
|
|
|
- "source_evidence_ref_template": "hashtag:{hashtag}",
|
|
|
|
|
- "notes": "Hashtag from video."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "sp_hashtag_query",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "source_path_type": "hashtag_to_query",
|
|
|
|
|
- "from_node_type": "hashtag",
|
|
|
|
|
- "to_node_type": "query",
|
|
|
|
|
- "origin_path_template": "hashtag:{hashtag}",
|
|
|
|
|
- "source_evidence_ref_template": "search_queries:{search_query_id}",
|
|
|
|
|
- "notes": "Tag creates query."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_event_mapping": [
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "evt_query_next_page",
|
|
|
|
|
- "edge_id": "query_next_page",
|
|
|
|
|
- "event_type": "walk.query_next_page",
|
|
|
|
|
- "success_status": "success",
|
|
|
|
|
- "failure_status": "failed",
|
|
|
|
|
- "input_ref_template": "query:{search_query_id}",
|
|
|
|
|
- "output_ref_template": "search_page:{search_page_id}",
|
|
|
|
|
- "notes": "Pagination event."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "evt_author_works",
|
|
|
|
|
- "edge_id": "author_to_works",
|
|
|
|
|
- "event_type": "walk.author_works",
|
|
|
|
|
- "success_status": "success",
|
|
|
|
|
- "failure_status": "failed",
|
|
|
|
|
- "input_ref_template": "author:{platform_author_id}",
|
|
|
|
|
- "output_ref_template": "author_works:{author_works_page_id}",
|
|
|
|
|
- "notes": "Author works event."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "evt_hashtag_query",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "event_type": "walk.hashtag_query",
|
|
|
|
|
- "success_status": "success",
|
|
|
|
|
- "failure_status": "skipped",
|
|
|
|
|
- "input_ref_template": "hashtag:{hashtag}",
|
|
|
|
|
- "output_ref_template": "query:{search_query_id}",
|
|
|
|
|
- "notes": "Hashtag query event."
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- "mapping_id": "evt_path_stop",
|
|
|
|
|
- "edge_id": "path_stop",
|
|
|
|
|
- "event_type": "walk.path_stop",
|
|
|
|
|
- "success_status": "skipped",
|
|
|
|
|
- "failure_status": "failed",
|
|
|
|
|
- "input_ref_template": "node:{from_node_id}",
|
|
|
|
|
- "output_ref_template": "none",
|
|
|
|
|
- "notes": "Stop path event."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
- "walk_query_generation_policy": [
|
|
|
|
|
- {
|
|
|
|
|
- "policy_id": "tag_query_v1",
|
|
|
|
|
- "edge_id": "hashtag_to_query",
|
|
|
|
|
- "query_generation_method": "tag_query",
|
|
|
|
|
- "source_field": "hashtag",
|
|
|
|
|
- "dedup_policy": "normalize_exact_and_recent_run",
|
|
|
|
|
- "max_queries": 10,
|
|
|
|
|
- "notes": "Tag query does not pollute initial P2 item queries."
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
"walk_fact_contract": [
|
|
"walk_fact_contract": [
|
|
|
{
|
|
{
|
|
|
"runtime_file": "walk_actions.jsonl",
|
|
"runtime_file": "walk_actions.jsonl",
|