{ "conclusions": { "lost_transitive_dependency_can_trigger_recursive_replay": true, "object_without_task_lineage_is_not_reconstructed": true, "task_output_reconstruction_requires_surviving_owner_lineage_inputs_and_budget": true, "task_retry_can_repeat_external_effect": true }, "dag_reconstruction": { "attempts": { "scale": 2, "sum": 1 }, "lost": [ "scaled-ref" ], "result": 50, "trace": [ "sum produced sum-ref=5 on node-a", "scale produced scaled-ref=50 on node-b", "node node-b lost objects ['scaled-ref']", "reconstruct scaled-ref by replaying scale", "scale produced scaled-ref=50 on node-a" ] }, "model": "deterministic Ray-style object lineage model", "not_modeled": [ "a Ray runtime", "object replicas and owner failure", "actors, GCS, network, object spilling, resources, timing, performance" ], "recursive_reconstruction": { "attempts": { "scale": 2, "sum": 2 }, "result": 50, "trace": [ "sum produced sum-ref=5 on node-a", "scale produced scaled-ref=50 on node-b", "node node-a lost objects ['sum-ref']", "node node-b lost objects ['scaled-ref']", "reconstruct scaled-ref by replaying scale", "reconstruct sum-ref by replaying sum", "sum produced sum-ref=5 on node-c", "scale produced scaled-ref=50 on node-c" ] }, "retry_side_effect": { "attempts": { "scale": 2 }, "external_effects": { "scale": 2 }, "result": 70, "trace": [ "scale attempt failed after external effect", "retry scale after system failure; retries_left=0", "scale produced result-ref=70 on node-a" ] }, "unreconstructable_put": { "error": "put-ref has no reconstructable producer", "trace": [ "node node-a lost objects ['put-ref']" ] } }