Skip to content

fix(tracing): exclude called tool internals from external exports - #42823

Merged
laipz8200 merged 8 commits into
mainfrom
laipz8200/graphon-workflow-tool-trace-exports
Oct 21, 2026
Merged

laipz8200 merged 8 commits into
mainfrom
laipz8200/graphon-workflow-tool-trace-exports

Conversation

@laipz8200

@laipz8200 laipz8200 commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

Summary

Background trace exports have no viewer identity with which to authorize access to a called Workflow Tool's source app. Keep external exports limited to the calling app's execution records, including the outer Tool inputs and outputs. Exclude called tools' internal node data, including recursive calls to the same app.

Apply the same boundary to MLflow's separate execution query. Console trace drilldown continues to check source-app access through the preceding trace API layer.

Depends on #42822 in the Graphon stack, whose final target is main.

@github-actions github-actions Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Sep 23, 2026
@laipz8200
laipz8200 added this pull request to stack #42825 September 23, 2026 08:31
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Pyrefly Type Coverage

Metric Base PR Delta
Type coverage 76.36% 76.36% -0.00%
Strict coverage 76.04% 76.04% -0.00%
Typed symbols 64,808 64,812 +4
Untyped symbols 20,146 20,150 +4
Modules 3850 3851 +1

@laipz8200
laipz8200 removed this pull request from stack #42825 September 23, 2026 11:26
@laipz8200
laipz8200 added this pull request to stack #42841 September 23, 2026 11:26
@codecov

codecov Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 58.09%. Comparing base (19537aa) to head (4aa9c41).

❌ Your project check has failed because the head coverage (58.09%) is below the adjusted base coverage (87.86%). You can increase the head coverage or adjust the Removed Code Behavior.

Additional details and impacted files
@@                              Coverage Diff                              @@
##           laipz8200/graphon-workflow-tool-trace-ui   #42823       +/-   ##
=============================================================================
- Coverage                                     88.86%   58.09%   -30.77%     
=============================================================================
  Files                                          5567     5567               
  Lines                                        333667   333675        +8     
  Branches                                      66782    66783        +1     
=============================================================================
- Hits                                         296518   193863   -102655     
- Misses                                        31974   134637   +102663     
  Partials                                       5175     5175               
Flag Coverage Δ
api 88.94% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 0c1f322 to 2b90b9d Compare September 23, 2026 11:39
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-10-20 16:12:06.045545497 +0000
+++ /tmp/pyrefly_pr.txt	2026-10-20 16:11:55.217451937 +0000
@@ -1069,103 +1069,101 @@
 ERROR `None` is not subscriptable [unsupported-operation]
    --> tests/test_containers_integration_tests/services/tools/test_tools_transform_service.py:805:16
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:109:38
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:108:38
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:113:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:112:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:188:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:187:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:208:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:207:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:223:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:222:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:257:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:256:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:273:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:272:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:290:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:289:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:323:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:322:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:340:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:339:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:369:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:368:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:395:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:394:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:425:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:424:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:442:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:441:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:459:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:458:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:494:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:493:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:510:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:509:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:553:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:545:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:567:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:558:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:599:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:591:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:613:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:605:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:631:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:623:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:632:30
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:624:30
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:685:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:670:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:697:51
-ERROR Object of class `NoneType` has no attribute `name` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:703:25
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:682:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:720:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:703:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:721:34
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:704:30
 ERROR Object of class `NoneType` has no attribute `name` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:732:16
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:714:16
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:760:27
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:742:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:777:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:759:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:807:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:789:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:821:51
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:803:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:830:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:812:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:831:30
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:813:30
 ERROR Object of class `NoneType` has no attribute `name` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:844:16
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:826:16
 ERROR Object of class `NoneType` has no attribute `updated_at` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:845:16
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:827:16
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:909:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:891:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:987:23
+   --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:969:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1031:27
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1013:27
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1048:51
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1030:51
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1072:23
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1054:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1083:54
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1065:54
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1088:77
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1070:77
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1105:83
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1087:83
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1119:80
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1101:80
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1131:79
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1113:79
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1143:78
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1125:78
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
-    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1156:23
+    --> tests/test_containers_integration_tests/services/tools/test_workflow_tools_manage_service.py:1138:23
 ERROR Argument `Literal['active']` is not assignable to parameter `status` with type `AccountStatus | SQLCoreOperations[AccountStatus]` in function `models.account.Account.__init__` [bad-argument-type]
    --> tests/test_containers_integration_tests/services/workflow/test_workflow_converter.py:107:20
 ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `SQLCoreOperations[TenantStatus] | TenantStatus` in function `models.account.Tenant.__init__` [bad-argument-type]
@@ -1545,7 +1543,7 @@
 ERROR Argument `str | None` is not assignable to parameter `s` with type `bytearray | bytes | str` in function `json.loads` [bad-argument-type]
    --> tests/unit_tests/controllers/console/app/test_model_config_api.py:895:36
 ERROR Object of class `WorkflowRun` has no attribute `retry_index` [missing-attribute]
-  --> tests/unit_tests/controllers/console/app/test_workflow_run_api.py:97:5
+   --> tests/unit_tests/controllers/console/app/test_workflow_run_api.py:110:5
 ERROR Missing argument `app_model` in function `handler` [missing-argument]
   --> tests/unit_tests/controllers/console/app/test_wraps.py:41:19
 ERROR Unexpected keyword argument `app_id` in function `handler` [unexpected-keyword]
@@ -1621,9 +1619,9 @@
 ERROR Generator function should return `Generator` [bad-return]
   --> tests/unit_tests/controllers/console/tag/test_tags.py:66:23
 ERROR Argument `SimpleNamespace` is not assignable to parameter `form` with type `Form` in function `controllers.console.human_input_form._jsonify_form_definition` [bad-argument-type]
-  --> tests/unit_tests/controllers/console/test_human_input_form.py:85:41
+  --> tests/unit_tests/controllers/console/test_human_input_form.py:92:41
 ERROR Argument `SimpleNamespace` is not assignable to parameter `form` with type `Form` in function `controllers.console.human_input_form.ConsoleHumanInputFormApi._ensure_console_access` [bad-argument-type]
-  --> tests/unit_tests/controllers/console/test_human_input_form.py:96:57
+   --> tests/unit_tests/controllers/console/test_human_input_form.py:103:57
 ERROR Type `Response` is not iterable [not-iterable]
    --> tests/unit_tests/controllers/console/test_wraps.py:305:17
 ERROR Argument value `Literal[0]` violates Pydantic `ge` constraint `Literal[1]` for field `page` [bad-argument-type]
@@ -2943,61 +2941,71 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `node` with type `Node[Unknown]` in function `core.app.workflow.layers.observability.ObservabilityLayer.node_run_context` [bad-argument-type]
   --> tests/unit_tests/core/app/workflow/test_observability_layer_extra.py:50:37
 ERROR Argument `_RepoRecorder | Unknown` is not assignable to parameter `workflow_execution_repository` with type `WorkflowExecutionRepository` in function `services.workflow_persistence.WorkflowPersistenceLayer.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:109:39
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:145:39
 ERROR Argument `_RepoRecorder | Unknown` is not assignable to parameter `workflow_node_execution_repository` with type `WorkflowNodeExecutionRepository` in function `services.workflow_persistence.WorkflowPersistenceLayer.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:110:44
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:146:44
 ERROR Argument `object | None` is not assignable to parameter `trace_manager` with type `TraceQueueManager | None` in function `services.workflow_persistence.WorkflowPersistenceLayer.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:111:23
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:147:23
 ERROR Argument `None` is not assignable to parameter `command_channel` with type `CommandChannel` in function `graphon.engine.layer.base.Layer.initialize` [bad-argument-type]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:113:55
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:149:55
+ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:203:16
+ERROR Object of class `object` has no attribute `metadata` [missing-attribute]
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:204:16
+ERROR `Literal['loop_id']` is not assignable to dict key type `WorkflowNodeExecutionMetadataKey` [bad-assignment]
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:246:90
+ERROR `None` is not subscriptable [unsupported-operation]
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:674:20
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:221:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:783:16
 ERROR Object of class `object` has no attribute `total_tokens` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:222:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:784:16
 ERROR Object of class `object` has no attribute `total_steps` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:223:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:785:16
 ERROR `SimpleNamespace` is not assignable to attribute `_graph_execution` with type `GraphExecution` [bad-assignment]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:233:42
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:795:42
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:238:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:800:16
 ERROR Object of class `object` has no attribute `exceptions_count` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:239:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:801:16
 ERROR Object of class `object` has no attribute `total_tokens` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:240:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:802:16
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:263:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:825:16
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:330:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:892:16
 ERROR Object of class `object` has no attribute `error_message` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:331:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:893:16
 ERROR Object of class `object` has no attribute `created_at` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:349:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:911:16
 ERROR Object of class `object` has no attribute `id` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:378:17
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:940:17
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:430:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:992:16
 ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:431:16
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:993:16
 ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:432:25
+   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:994:25
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:492:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1054:16
 ERROR Object of class `object` has no attribute `error` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:493:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1055:16
 ERROR Object of class `object` has no attribute `finished_at` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:494:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1056:16
 ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:496:20
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1058:20
 ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:497:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1059:16
 ERROR Object of class `object` has no attribute `status` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:524:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1086:16
 ERROR Object of class `object` has no attribute `finished_at` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:525:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1087:16
 ERROR Object of class `object` has no attribute `process_data` [missing-attribute]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:526:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1088:16
+ERROR `None` is not subscriptable [unsupported-operation]
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1163:16
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:598:16
+    --> tests/unit_tests/core/app/workflow/test_persistence_layer.py:1164:16
 ERROR Argument `None` is not assignable to parameter `app_id` with type `str` in function `core.callback_handler.index_tool_callback_handler.DatasetIndexToolCallbackHandler.__init__` [bad-argument-type]
    --> tests/unit_tests/core/callback_handler/test_index_tool_callback_handler.py:159:20
 ERROR Argument `None` is not assignable to parameter `message_id` with type `str` in function `core.callback_handler.index_tool_callback_handler.DatasetIndexToolCallbackHandler.__init__` [bad-argument-type]
@@ -3709,27 +3717,27 @@
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `json_object` [missing-attribute]
    --> tests/unit_tests/core/tools/utils/test_tool_engine_serialization.py:434:44
 ERROR Argument `list[FromClause]` is not assignable to parameter `tables` with type `Sequence[Table] | None` in function `sqlalchemy.sql.schema.MetaData.create_all` [bad-argument-type]
-  --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:77:56
+  --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:78:56
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `variable_name` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:539:22
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:565:22
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `variable_value` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:539:49
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:565:49
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `text` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:547:23
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:573:23
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `json_object` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:552:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:578:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `text` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:589:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:615:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `json_object` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:594:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:620:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `variable_name` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:615:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:641:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `variable_value` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:616:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:642:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `stream` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:617:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:643:12
 ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `file_marker` [missing-attribute]
-   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:628:12
+   --> tests/unit_tests/core/tools/workflow_as_tool/test_tool.py:654:12
 ERROR Object of class `IExecutionContext` has no attribute `context_vars` [missing-attribute]
    --> tests/unit_tests/core/workflow/context/test_execution_context.py:320:16
 ERROR Object of class `BaseModel` has no attribute `base_url` [missing-attribute]
@@ -3781,11 +3789,11 @@
 ERROR Class member `EndBarrier.on_end` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
    --> tests/unit_tests/core/workflow/graph_engine/layers/test_observability.py:369:17
 ERROR Cannot extend final class `DifyNodeFactory` [invalid-inheritance]
-  --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:37:23
+  --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:38:23
 ERROR Class member `MockNodeFactory.create_node` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:86:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:104:9
 ERROR Cannot set item in `dict[str, type[MockAgentNode] | type[MockCodeNode] | type[MockDocumentExtractorNode] | type[MockHttpRequestNode] | type[MockIterationNode] | type[MockKnowledgeRetrievalNode] | type[MockLLMNode] | type[MockLoopNode] | type[MockParameterExtractorNode] | type[MockQuestionClassifierNode] | type[MockTemplateTransformNode] | type[MockToolNode]]` [unsupported-operation]
-   --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:169:44
+   --> tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py:187:44
 ERROR Unexpected keyword argument `node_id` in function `object.__init__` [unexpected-keyword]
    --> tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py:112:13
 ERROR Unexpected keyword argument `data` in function `object.__init__` [unexpected-keyword]
@@ -3883,51 +3891,51 @@
 ERROR `graph_runtime_state` is uninitialized [unbound-name]
    --> tests/unit_tests/core/workflow/graph_engine/test_table_runner.py:391:37
 ERROR Class member `FakeBindingResolver.resolve` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:145:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:154:9
 ERROR Class member `ExplodingSessionStore.save_active_snapshot` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:208:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:217:9
 ERROR Class member `FileOutputBackendClient._events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:227:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:236:9
 ERROR Class member `PlainTextOutputBackendClient._events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:247:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:256:9
 ERROR Class member `AgentMessageDeltaBackendClient._events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:265:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:274:9
 ERROR Class member `FailingStreamBackendClient.stream_events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:294:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:303:9
 ERROR Class member `FailingStreamBackendClient.cancel_run` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:305:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:314:9
 ERROR Class member `FailingStreamBackendClient.cancel_run_and_wait` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:309:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:318:9
 ERROR Class member `FailingAfterStartedStreamBackendClient.stream_events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:321:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:330:9
 ERROR Class member `TerminalWithoutSnapshotBackendClient._events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:338:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:347:9
 ERROR Class member `EmptyStreamBackendClient.stream_events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:355:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:364:9
 ERROR Class member `GenericFailingStreamBackendClient.stream_events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:368:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:377:9
 ERROR Class member `CancelFailingStreamBackendClient.cancel_run` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:381:9
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:390:9
 ERROR Argument `dict[str, str]` is not assignable to parameter `node_data` with type `DifyAgentNodeData` in function `core.workflow.nodes.agent_v2.agent_node.DifyAgentNode._extract_variable_selector_to_variable_mapping` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:482:19
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:493:19
 ERROR Class member `_UnavailableParticipantStore.load_existing_node_execution_scope` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:601:13
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:648:13
 ERROR Class member `_FailingSessionStore.load_or_create_node_execution_session` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:870:13
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:917:13
 ERROR Attribute `graph_execution` of class `RuntimeState` is a read-only property and cannot be set [read-only]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:948:5
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:995:5
 ERROR Object of class `NodeEventPayload` has no attribute `node_run_result` [missing-attribute]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1019:14
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1066:14
 ERROR Class member `RetryingBackendClient._events` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1076:13
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1123:13
 ERROR `dict[str, int | str] | dict[str, str]` is not assignable to attribute `output_payload` with type `dict[str, object]` [bad-assignment]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1077:35
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1124:35
 ERROR Object of class `NodeEventPayload` has no attribute `node_run_result` [missing-attribute]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1097:14
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1144:14
 ERROR Object of class `NodeEventPayload` has no attribute `node_run_result` [missing-attribute]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1142:14
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1189:14
 ERROR Argument `dict[str, dict[str, list[dict[str, str]] | Unknown]]` is not assignable to parameter `node_data` with type `DifyAgentNodeData` in function `core.workflow.nodes.agent_v2.agent_node.DifyAgentNode._extract_variable_selector_to_variable_mapping` [bad-argument-type]
-    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1165:19
+    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py:1212:19
 ERROR Object of class `Executable` has no attribute `compile` [missing-attribute]
    --> tests/unit_tests/core/workflow/nodes/agent_v2/test_binding_resolver.py:447:26
 ERROR Object of class `Executable` has no attribute `compile` [missing-attribute]
@@ -4307,11 +4315,11 @@
 ERROR Cannot index into `object` [bad-index]
     --> tests/unit_tests/core/workflow/nodes/agent_v2/test_runtime_request_builder.py:1701:14
 ERROR `not in` is not supported between `Literal['agent_workspace_binding_id']` and `None` [not-iterable]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:329:12
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:470:12
 ERROR Argument `dict[str, str]` is not assignable to parameter `process_data` with type `dict[str, object] | None` in function `_execution_row` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:353:69
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:494:69
 ERROR `not in` is not supported between `Literal['agent_workspace_binding_id']` and `None` [not-iterable]
-   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:362:12
+   --> tests/unit_tests/core/workflow/nodes/agent_v2/test_session_store.py:503:12
 ERROR Class member `_Version1.init_node_data` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
   --> tests/unit_tests/core/workflow/nodes/base/test_get_node_type_classes_mapping.py:40:13
 ERROR Class member `_Version1._get_error_strategy` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
@@ -4643,95 +4651,97 @@
 ERROR `SimpleNamespace` is not assignable to attribute `_dify_context` with type `DifyRunContext` [bad-assignment]
    --> tests/unit_tests/core/workflow/test_node_factory.py:409:33
 ERROR Argument `SimpleNamespace` is not assignable to parameter `node_data` with type `LLMNodeData | ParameterExtractorNodeData | QuestionClassifierNodeData` in function `core.workflow.node_factory.DifyNodeFactory._wrap_model_instance_for_node` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_factory.py:863:23
+   --> tests/unit_tests/core/workflow/test_node_factory.py:864:23
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_factory.DifyNodeFactory._wrap_model_instance_for_node` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_factory.py:864:28
+   --> tests/unit_tests/core/workflow/test_node_factory.py:865:28
 ERROR `SimpleNamespace` is not assignable to attribute `runtime_state` with type `RuntimeState` [bad-assignment]
-    --> tests/unit_tests/core/workflow/test_node_factory.py:1119:33
+    --> tests/unit_tests/core/workflow/test_node_factory.py:1120:33
 ERROR `SimpleNamespace` is not assignable to attribute `_dify_context` with type `DifyRunContext` [bad-assignment]
-    --> tests/unit_tests/core/workflow/test_node_factory.py:1249:33
-ERROR `SimpleNamespace` is not assignable to attribute `runtime_state` with type `RuntimeState` [bad-assignment]
     --> tests/unit_tests/core/workflow/test_node_factory.py:1250:33
+ERROR `SimpleNamespace` is not assignable to attribute `runtime_state` with type `RuntimeState` [bad-assignment]
+    --> tests/unit_tests/core/workflow/test_node_factory.py:1251:33
 ERROR Argument `list[FromClause]` is not assignable to parameter `tables` with type `Sequence[Table] | None` in function `sqlalchemy.sql.schema.MetaData.create_all` [bad-argument-type]
-  --> tests/unit_tests/core/workflow/test_node_runtime.py:64:56
+  --> tests/unit_tests/core/workflow/test_node_runtime.py:67:56
 ERROR `object | None` is not assignable to attribute `model_runtime` with type `LLMModelRuntime` [bad-assignment]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:127:30
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:130:30
 ERROR Object of class `ExternalRecipient` has no attribute `reference_id` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:201:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:204:12
 ERROR Argument `object` is not assignable to parameter `method` with type `EmailDeliveryMethod | InteractiveSurfaceDeliveryMethod` in function `core.workflow.node_runtime.apply_dify_debug_email_recipient` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:216:45
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:219:45
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:239:32
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:242:32
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:258:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:261:5
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:272:32
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:275:32
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:280:32
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:283:32
 ERROR Argument `SimpleNamespace` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:307:32
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:310:32
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedPollingLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:332:39
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:335:39
 ERROR Object of class `FunctionType` has no attribute `return_value` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:397:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:400:5
 ERROR Object of class `FunctionType` has no attribute `side_effect` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:431:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:434:5
 ERROR Object of class `FunctionType` has no attribute `call_count` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:445:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:448:12
 ERROR Object of class `FunctionType` has no attribute `return_value` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:462:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:465:5
 ERROR Object of class `FunctionType` has no attribute `return_value` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:492:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:495:5
 ERROR Argument `_ModelInstanceStub` is not assignable to parameter `model_instance` with type `ModelInstance` in function `core.workflow.node_runtime.DifyPreparedPollingLLM.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:529:39
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:532:39
 ERROR Argument `Literal['chat']` is not assignable to parameter `model_mode` with type `LLMMode` in function `core.workflow.node_runtime.DifyPromptMessageSerializer.serialize` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:546:20
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:549:20
 ERROR Object of class `NoneType` has no attribute `storage_key` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:575:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:578:12
 ERROR Argument `object` is not assignable to parameter `variable_pool` with type `VariablePool | None` in function `core.workflow.node_runtime.DifyToolNodeRuntime.get_runtime` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:807:23
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:810:23
 ERROR Object of class `object` has no attribute `tool` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:811:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:814:12
 ERROR Object of class `object` has no attribute `parent_trace_context` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:812:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:815:12
 ERROR Object of class `object` has no attribute `trace_session_id` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:835:5
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:838:5
 ERROR Argument `object` is not assignable to parameter `variable_pool` with type `VariablePool | None` in function `core.workflow.node_runtime.DifyToolNodeRuntime.get_runtime` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:852:23
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:855:23
 ERROR Object of class `object` has no attribute `trace_session_id` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:856:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:859:12
 ERROR Argument `object` is not assignable to parameter `variable_pool` with type `VariablePool | None` in function `core.workflow.node_runtime.DifyToolNodeRuntime.get_runtime` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:884:23
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:887:23
 ERROR Object of class `object` has no attribute `tool` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_node_runtime.py:887:12
+   --> tests/unit_tests/core/workflow/test_node_runtime.py:890:12
+ERROR `in` is not supported between `Literal['Maximum execution steps exceeded: 3 > 2']` and `None` [not-iterable]
+  --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:92:16
 ERROR Class member `EmptySplitKey.split` overrides parent class `UserString` in an inconsistent manner [bad-override]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:636:17
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:659:17
 ERROR Class member `EmptySplitKey.split` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:636:17
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:659:17
 ERROR `TestMappingUserInputsBranches.test_rejects_invalid_node_variable_key.EmptySplitKey` is not assignable to dict key type `str` [bad-assignment]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:641:35
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:664:35
 ERROR Argument `TestWorkflowEntryNodeLayers.test_run_node_with_layers_reports_success.FakeNode` is not assignable to parameter `node` with type `Node[Unknown]` in function `core.workflow.workflow_entry.WorkflowEntry._run_node_with_layers` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:745:78
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:768:78
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:750:13
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:773:13
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:751:13
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:774:13
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:752:13
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:775:13
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:753:13
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:776:13
 ERROR Object of class `FunctionType` has no attribute `assert_called_once_with` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:754:13
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:777:13
 ERROR Argument `TestWorkflowEntryNodeLayers.test_run_node_with_layers_reports_errors.FakeNode` is not assignable to parameter `node` with type `Node[Unknown]` in function `core.workflow.workflow_entry.WorkflowEntry._run_node_with_layers` [bad-argument-type]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:781:73
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:804:73
 ERROR Object of class `FunctionType` has no attribute `call_args` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:784:20
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:807:20
 ERROR Object of class `FunctionType` has no attribute `call_args` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:785:31
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:808:31
 ERROR Object of class `FunctionType` has no attribute `call_args` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:786:20
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:809:20
 ERROR Object of class `FunctionType` has no attribute `call_args` [missing-attribute]
-   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:787:31
+   --> tests/unit_tests/core/workflow/test_workflow_entry_helpers.py:810:31
 ERROR Missing argument `case` in function `enterprise.telemetry.contracts.TelemetryEnvelope.__init__` [missing-argument]
    --> tests/unit_tests/enterprise/telemetry/test_contracts.py:110:30
 ERROR Missing argument `tenant_id` in function `enterprise.telemetry.contracts.TelemetryEnvelope.__init__` [missing-argument]
@@ -4752,10 +4762,26 @@
   --> tests/unit_tests/events/test_events_package_compat.py:28:5
 ERROR Object of class `Events` has no attribute `request_start` [missing-attribute]
   --> tests/unit_tests/events/test_events_package_compat.py:33:5
-ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `get_execution_snapshots_by_workflow_run`, `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `delete_executions_by_app`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
-  --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:18:64
-ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `get_execution_snapshots_by_workflow_run`, `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `delete_executions_by_app`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
-  --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:27:64
+ERROR Object of class `NoneType` has no attribute `partition` [missing-attribute]
+  --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:40:38
+ERROR `<=` is not supported between `None` and `int` [unsupported-operation]
+  --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:44:20
+ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
+  --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:49:64
+ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:115:64
+ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:131:64
+ERROR `None` is not assignable to dict value type `float | int | str` [bad-assignment]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:166:105
+ERROR Object of class `FunctionType` has no attribute `side_effect` [missing-attribute]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:180:9
+ERROR Object of class `FunctionType` has no attribute `call_count` [missing-attribute]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:202:12
+ERROR Object of class `FunctionType` has no attribute `call_args` [missing-attribute]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:203:13
+ERROR Cannot instantiate `LogstoreAPIWorkflowNodeExecutionRepository` because the following members are abstract: `delete_expired_executions`, `count_by_runs`, `delete_by_runs`, `get_expired_executions_batch`, `delete_executions_by_ids`, `get_offloads_by_execution_ids` [bad-instantiation]
+   --> tests/unit_tests/extensions/logstore/repositories/test_logstore_api_workflow_node_execution_repository.py:331:64
 ERROR Object of class `Span` has no attribute `events` [missing-attribute]
    --> tests/unit_tests/extensions/otel/test_retrieval_tracing.py:165:42
 ERROR Generator function should return `Generator` [bad-return]
@@ -5393,9 +5419,9 @@
 ERROR Argument `dict[str, list[dict[str, object]]]` is not assignable to parameter `full_process_data` with type `dict[str, object] | None` in function `_repository` [bad-argument-type]
    --> tests/unit_tests/services/test_workflow_node_execution_trace_service.py:161:49
 ERROR Argument `dict[str, str]` is not assignable to parameter `args` with type `WorkflowRunListArgs` in function `services.workflow_run_service.WorkflowRunService.get_paginate_workflow_runs` [bad-argument-type]
-  --> tests/unit_tests/services/test_workflow_run_service.py:72:18
+   --> tests/unit_tests/services/test_workflow_run_service.py:121:18
 ERROR `Literal['2']` is not assignable to TypedDict key `limit` with type `int` [bad-assignment]
-   --> tests/unit_tests/services/test_workflow_run_service.py:104:28
+   --> tests/unit_tests/services/test_workflow_run_service.py:153:28
 ERROR `dict[str, str]` is not assignable to dict value type `list[Unknown] | str` [bad-assignment]
    --> tests/unit_tests/services/test_workflow_service.py:220:30
 ERROR Argument `Literal['invalid']` is not assignable to parameter `value` with type `AppMode | SQLCoreOperations[AppMode]` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
@@ -5454,6 +5480,8 @@
    --> tests/unit_tests/services/workflow/test_workflow_draft_variable_service.py:325:9
 ERROR Argument `None` is not assignable to parameter `value` with type `SQLCoreOperations[bool] | bool` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
    --> tests/unit_tests/services/workflow/test_workflow_draft_variable_service.py:705:37
+ERROR Unpacked keyword argument `bool` is not assignable to parameter `human_input_surface` with type `HumanInputSurface | None` in function `services.workflow_event_snapshot_service.build_workflow_event_stream` [bad-argument-type]
+   --> tests/unit_tests/services/workflow/test_workflow_event_snapshot_service.py:786:13
 ERROR Argument `dict[str, list[Unknown] | str | dict[str, bool] | dict[str, bool | str] | dict[str, dict[str, bool | int | list[str]]]]` is not assignable to parameter `features` with type `dict[str, object]` in function `_create_workflow` [bad-argument-type]
   --> tests/unit_tests/services/workflow/test_workflow_restore.py:62:18
 ERROR Argument `list[FromClause]` is not assignable to parameter `tables` with type `Sequence[Table] | None` in function `sqlalchemy.sql.schema.MetaData.create_all` [bad-argument-type]

@ghfind-review ghfind-review Bot added the review: top ghfind author score; see https://ghfind.com label Sep 23, 2026
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 2b90b9d to a58c564 Compare September 23, 2026 12:25
@laipz8200
laipz8200 removed this pull request from stack #42841 September 23, 2026 12:42
@laipz8200
laipz8200 added this pull request to stack #42847 September 23, 2026 12:43
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from a58c564 to ab039e3 Compare September 23, 2026 18:47
@laipz8200
laipz8200 removed this pull request from stack #42847 September 23, 2026 18:48
@laipz8200
laipz8200 added this pull request to stack #42853 September 23, 2026 18:48
@laipz8200 laipz8200 changed the title feat(tracing): export nested workflow tool spans fix(tracing): exclude called tool internals from external exports Sep 23, 2026
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from ab039e3 to 2369fad Compare September 23, 2026 18:53
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch 2 times, most recently from 77f3123 to cf1717f Compare September 24, 2026 02:15
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from cf1717f to a4cf332 Compare September 24, 2026 06:48
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from a4cf332 to 2e4a203 Compare September 26, 2026 18:41
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 18bc949 to f78f4a8 Compare October 9, 2026 19:00
@autofix-ci
autofix-ci Bot requested a review from crazywoola as a code owner October 9, 2026 19:02
@github-actions github-actions Bot added the web This relates to changes on the web. label Oct 9, 2026
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 059573c to 2496e5d Compare October 9, 2026 19:12
@github-actions github-actions Bot removed the web This relates to changes on the web. label Oct 9, 2026
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 2496e5d to 56f7647 Compare October 10, 2026 14:21
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 56f7647 to 24fa6cc Compare October 10, 2026 14:29
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch 2 times, most recently from 1088970 to 9e7ac80 Compare October 12, 2026 03:54
@laipz8200
laipz8200 force-pushed the laipz8200/graphon-workflow-tool-trace-exports branch from 9e7ac80 to 6aa6bf1 Compare October 12, 2026 04:07
@laipz8200
laipz8200 requested a review from hyoban as a code owner October 12, 2026 23:47
41tair
41tair previously approved these changes Oct 20, 2026
Navigate one selected tool invocation in workflow, chat and history views with the authorized child execution API.
Use the workflowLogic and workflowHumanInput translation namespaces introduced on main in the existing nested trace scenarios. Preserve their navigation and resume assertions while resolving the stack rebase without translation aliases.
Loop triggers only render when the loop node already has details, and the
live tracing lookup builds those details from the same execution rows, so
the duration-map reconstruction could never contribute a loop group.
Use the details directly, keep the reconstruction for iterations only, and
require the status every workflow run context already supplies.
Use the upstream editor resource atom for workflow history, previews, and chat trace drilldown. Preserve shared chat rendering without an editor by reading scoped identity only when the workflow context is present.

Adapt existing tracing fixtures to the real editor resource provider and retain app and run identity assertions.
Merge node completion data into the existing resumed trace so start-event metadata remains available for workflow-tool drilldown. Extend the sibling-resume regression to complete execution and open the real Tracing action. Keep preview trace request assertions on the generated client boundary.
Keep background exports scoped to the calling app and workflow-run origin, including recursive same-app calls. Preserve the outer Tool inputs and outputs without exposing source internals.
Cover missing, empty and non-string app identities in workflow trace metadata. Assert that rejected identities raise before the exporter queries workflow node internals.
Replace synthetic database and MLflow objects with the SQLite fixture and in-memory span export. Preserve source-internal privacy assertions and require exactly the public workflow and tool spans.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: top ghfind author score; see https://ghfind.com size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants