diff --git a/d2chaos/out/0.d2 b/d2chaos/out/0.d2
new file mode 100644
index 000000000..c230b4d78
--- /dev/null
+++ b/d2chaos/out/0.d2
@@ -0,0 +1,12 @@
+"	~3": {shape: sql_table}
+">BET": {
+  shape: stored_data
+  "HOWPRB7Fob:FFCCk,": w(O {
+    shape: sequence_diagram
+    "<Lz&<x*c,f3:|0": {shape: stored_data}
+  }
+  nx&5ee6gcz=mbGKnfX: {shape: page}
+}
+">BET" -- "	~3"
+">BET"."HOWPRB7Fob:FFCCk," <- ">BET"
+">BET"."HOWPRB7Fob:FFCCk," -- ">BET": '"-^/pTeK| KkI8rb5s(:52=rfH[ASCo''\nQt7B6j;v#/0LLRc
 tbu2bf(&(rYAo?*fL9;d:~)"'
diff --git a/d2chaos/out/0.d2.goenc b/d2chaos/out/0.d2.goenc
new file mode 100644
index 000000000..d758e69d9
--- /dev/null
+++ b/d2chaos/out/0.d2.goenc
@@ -0,0 +1 @@
+"\"\t\x0e~3\": {shape: sql_table}\n\">BET\": {\n  shape: stored_data\n  \"\x1fHOWP\x1fRB7\x1eF\x1aob:FFCCk,\u007f\": w(O {\n    shape: sequence_diagram\n    \"<L\x01\x1dz&<x\v\x13*c\x10,f3:|0\": {shape: stored_data}\n  }\n  nx&5ee6gcz\x1a=mbGKnfX: {shape: page}\n}\n\">BET\" -- \"\t\x0e~3\"\n\">BET\".\"\x1fHOWP\x1fRB7\x1eF\x1aob:FFCCk,\u007f\" <- \">BET\"\n\">BET\".\"\x1fHOWP\x1fRB7\x1eF\x1aob:FFCCk,\u007f\" -- \">BET\": '\"-^/pT\x02eK| KkI8rb5s(:\x0152=rfH[AS\x1aC\x06o''\\n\x1aQ\x12t\x017B6j;v#\x15/0LLRc\r \x13tb\x03u2bf(\x05&(rY\u0080\x10Ao\x1f?*fL9;d\x15:~)\f\"'\n"
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2 b/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2
new file mode 100644
index 000000000..3603c841c
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2	
@@ -0,0 +1 @@
+a.b -> a
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2.goenc b/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2.goenc
new file mode 100644
index 000000000..0f7436153
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/child to container edge.d2.goenc	
@@ -0,0 +1 @@
+"a.b -> a"
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2 b/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2
new file mode 100644
index 000000000..de44bf7ea
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2	
@@ -0,0 +1,4 @@
+a: {
+ shape: class
+  b -> c
+ }
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2.goenc b/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2.goenc
new file mode 100644
index 000000000..b7c77341a
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/internal class edge.d2.goenc	
@@ -0,0 +1 @@
+"a: {\n shape: class\n  b -> c\n }"
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/orientation.d2 b/d2chaos/out/TestD2Chaos/pinned/orientation.d2
new file mode 100644
index 000000000..90f809a73
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/orientation.d2
@@ -0,0 +1,6 @@
+a: {
+  b
+  c
+ }
+  a <- a.c
+  a.b -> a
diff --git a/d2chaos/out/TestD2Chaos/pinned/orientation.d2.goenc b/d2chaos/out/TestD2Chaos/pinned/orientation.d2.goenc
new file mode 100644
index 000000000..d2040fae8
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/orientation.d2.goenc
@@ -0,0 +1 @@
+"a: {\n  b\n  c\n }\n  a <- a.c\n  a.b -> a\n"
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/sequence.d2 b/d2chaos/out/TestD2Chaos/pinned/sequence.d2
new file mode 100644
index 000000000..6918967e0
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/sequence.d2
@@ -0,0 +1,3 @@
+a: {shape: step}
+b: {shape: step}
+a -> b
diff --git a/d2chaos/out/TestD2Chaos/pinned/sequence.d2.goenc b/d2chaos/out/TestD2Chaos/pinned/sequence.d2.goenc
new file mode 100644
index 000000000..1fdc839a5
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/sequence.d2.goenc
@@ -0,0 +1 @@
+"a: {shape: step}\nb: {shape: step}\na -> b\n"
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/table edge order.d2 b/d2chaos/out/TestD2Chaos/pinned/table edge order.d2
new file mode 100644
index 000000000..dfac75f63
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/table edge order.d2	
@@ -0,0 +1,6 @@
+B: {shape: sql_table}
+ B.C -- D
+ B.C -- D
+ D -- B.C
+ B -- D
+ A -- D
\ No newline at end of file
diff --git a/d2chaos/out/TestD2Chaos/pinned/table edge order.d2.goenc b/d2chaos/out/TestD2Chaos/pinned/table edge order.d2.goenc
new file mode 100644
index 000000000..b751dbd37
--- /dev/null
+++ b/d2chaos/out/TestD2Chaos/pinned/table edge order.d2.goenc	
@@ -0,0 +1 @@
+"B: {shape: sql_table}\n B.C -- D\n B.C -- D\n D -- B.C\n B -- D\n A -- D"
\ No newline at end of file
diff --git a/testdata/d2compiler/TestCompile/basic_icon.exp.json b/testdata/d2compiler/TestCompile/basic_icon.exp.json
index f8180d89a..1012941f5 100644
--- a/testdata/d2compiler/TestCompile/basic_icon.exp.json
+++ b/testdata/d2compiler/TestCompile/basic_icon.exp.json
@@ -89,7 +89,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/basic_sequence.exp.json b/testdata/d2compiler/TestCompile/basic_sequence.exp.json
index ffd5a710f..c5b515b47 100644
--- a/testdata/d2compiler/TestCompile/basic_sequence.exp.json
+++ b/testdata/d2compiler/TestCompile/basic_sequence.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/basic_shape.exp.json b/testdata/d2compiler/TestCompile/basic_shape.exp.json
index 45e48ca8e..468c18bbe 100644
--- a/testdata/d2compiler/TestCompile/basic_shape.exp.json
+++ b/testdata/d2compiler/TestCompile/basic_shape.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/basic_style.exp.json b/testdata/d2compiler/TestCompile/basic_style.exp.json
index e9663e6a1..7b56aed92 100644
--- a/testdata/d2compiler/TestCompile/basic_style.exp.json
+++ b/testdata/d2compiler/TestCompile/basic_style.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/class_paren.exp.json b/testdata/d2compiler/TestCompile/class_paren.exp.json
index 93e8f2454..e1da1e1cf 100644
--- a/testdata/d2compiler/TestCompile/class_paren.exp.json
+++ b/testdata/d2compiler/TestCompile/class_paren.exp.json
@@ -183,7 +183,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/class_style.exp.json b/testdata/d2compiler/TestCompile/class_style.exp.json
index bfb951a0b..1f56e2894 100644
--- a/testdata/d2compiler/TestCompile/class_style.exp.json
+++ b/testdata/d2compiler/TestCompile/class_style.exp.json
@@ -157,7 +157,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/default_direction.exp.json b/testdata/d2compiler/TestCompile/default_direction.exp.json
index b5e6a0da3..92279ded8 100644
--- a/testdata/d2compiler/TestCompile/default_direction.exp.json
+++ b/testdata/d2compiler/TestCompile/default_direction.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge.exp.json b/testdata/d2compiler/TestCompile/edge.exp.json
index d5fb1f432..f3dba8e45 100644
--- a/testdata/d2compiler/TestCompile/edge.exp.json
+++ b/testdata/d2compiler/TestCompile/edge.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_arrowhead_fields.exp.json b/testdata/d2compiler/TestCompile/edge_arrowhead_fields.exp.json
index 6ee209285..cf53b9e4e 100644
--- a/testdata/d2compiler/TestCompile/edge_arrowhead_fields.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_arrowhead_fields.exp.json
@@ -247,7 +247,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_chain.exp.json b/testdata/d2compiler/TestCompile/edge_chain.exp.json
index 2938c8717..87a765414 100644
--- a/testdata/d2compiler/TestCompile/edge_chain.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_chain.exp.json
@@ -115,7 +115,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_chain_map.exp.json b/testdata/d2compiler/TestCompile/edge_chain_map.exp.json
index 7daf0c0c1..39d081011 100644
--- a/testdata/d2compiler/TestCompile/edge_chain_map.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_chain_map.exp.json
@@ -144,7 +144,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_column_index.exp.json b/testdata/d2compiler/TestCompile/edge_column_index.exp.json
index 149746321..e18d8951b 100644
--- a/testdata/d2compiler/TestCompile/edge_column_index.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_column_index.exp.json
@@ -346,7 +346,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_exclusive_style.exp.json b/testdata/d2compiler/TestCompile/edge_exclusive_style.exp.json
index a7368eff9..95dd28a7f 100644
--- a/testdata/d2compiler/TestCompile/edge_exclusive_style.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_exclusive_style.exp.json
@@ -113,7 +113,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_flat_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_flat_arrowhead.exp.json
index 03607ed26..d4bf004df 100644
--- a/testdata/d2compiler/TestCompile/edge_flat_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_flat_arrowhead.exp.json
@@ -156,7 +156,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_flat_label_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_flat_label_arrowhead.exp.json
index 4d40c088b..04fa37c8c 100644
--- a/testdata/d2compiler/TestCompile/edge_flat_label_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_flat_label_arrowhead.exp.json
@@ -124,7 +124,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_in_column.exp.json b/testdata/d2compiler/TestCompile/edge_in_column.exp.json
index bb4bdcc17..d5a808142 100644
--- a/testdata/d2compiler/TestCompile/edge_in_column.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_in_column.exp.json
@@ -159,7 +159,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_index.exp.json b/testdata/d2compiler/TestCompile/edge_index.exp.json
index 02ac3bd92..3fc6fd5df 100644
--- a/testdata/d2compiler/TestCompile/edge_index.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_index.exp.json
@@ -139,7 +139,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_index_map.exp.json b/testdata/d2compiler/TestCompile/edge_index_map.exp.json
index 67aaef38f..456776137 100644
--- a/testdata/d2compiler/TestCompile/edge_index_map.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_index_map.exp.json
@@ -158,7 +158,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_index_nested.exp.json b/testdata/d2compiler/TestCompile/edge_index_nested.exp.json
index 7b42e2f6e..da9f38f1d 100644
--- a/testdata/d2compiler/TestCompile/edge_index_nested.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_index_nested.exp.json
@@ -168,7 +168,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_index_nested_cross_scope.exp.json b/testdata/d2compiler/TestCompile/edge_index_nested_cross_scope.exp.json
index 367371936..75d8227b0 100644
--- a/testdata/d2compiler/TestCompile/edge_index_nested_cross_scope.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_index_nested_cross_scope.exp.json
@@ -184,7 +184,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_key_group_flat_nested.exp.json b/testdata/d2compiler/TestCompile/edge_key_group_flat_nested.exp.json
index 4fb2eeefc..f7bb02166 100644
--- a/testdata/d2compiler/TestCompile/edge_key_group_flat_nested.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_key_group_flat_nested.exp.json
@@ -197,7 +197,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_key_group_flat_nested_underscore.exp.json b/testdata/d2compiler/TestCompile/edge_key_group_flat_nested_underscore.exp.json
index f11152e73..36b416b3c 100644
--- a/testdata/d2compiler/TestCompile/edge_key_group_flat_nested_underscore.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_key_group_flat_nested_underscore.exp.json
@@ -203,7 +203,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_key_group_map_flat_nested_underscore.exp.json b/testdata/d2compiler/TestCompile/edge_key_group_map_flat_nested_underscore.exp.json
index 1f2e4e9dc..4955b0964 100644
--- a/testdata/d2compiler/TestCompile/edge_key_group_map_flat_nested_underscore.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_key_group_map_flat_nested_underscore.exp.json
@@ -216,7 +216,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_key_group_map_nested_underscore.exp.json b/testdata/d2compiler/TestCompile/edge_key_group_map_nested_underscore.exp.json
index 273de1a65..fac5b1939 100644
--- a/testdata/d2compiler/TestCompile/edge_key_group_map_nested_underscore.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_key_group_map_nested_underscore.exp.json
@@ -234,7 +234,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_label_map.exp.json b/testdata/d2compiler/TestCompile/edge_label_map.exp.json
index 216f74e13..52c7a6fcb 100644
--- a/testdata/d2compiler/TestCompile/edge_label_map.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_label_map.exp.json
@@ -124,7 +124,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map.exp.json b/testdata/d2compiler/TestCompile/edge_map.exp.json
index e25361ad7..518c2dc60 100644
--- a/testdata/d2compiler/TestCompile/edge_map.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_map_arrowhead.exp.json
index 27c833d0e..a4ee8c582 100644
--- a/testdata/d2compiler/TestCompile/edge_map_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map_arrowhead.exp.json
@@ -136,7 +136,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map_group_flat.exp.json b/testdata/d2compiler/TestCompile/edge_map_group_flat.exp.json
index 4e40a34ff..9da45162b 100644
--- a/testdata/d2compiler/TestCompile/edge_map_group_flat.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map_group_flat.exp.json
@@ -152,7 +152,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map_group_semiflat.exp.json b/testdata/d2compiler/TestCompile/edge_map_group_semiflat.exp.json
index 4a7dc3de9..2f74239fa 100644
--- a/testdata/d2compiler/TestCompile/edge_map_group_semiflat.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map_group_semiflat.exp.json
@@ -170,7 +170,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map_nested.exp.json b/testdata/d2compiler/TestCompile/edge_map_nested.exp.json
index 8242d61d6..53d86398d 100644
--- a/testdata/d2compiler/TestCompile/edge_map_nested.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map_nested.exp.json
@@ -132,7 +132,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_map_nested_flat.exp.json b/testdata/d2compiler/TestCompile/edge_map_nested_flat.exp.json
index 6908bfcc5..4e00ec172 100644
--- a/testdata/d2compiler/TestCompile/edge_map_nested_flat.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_map_nested_flat.exp.json
@@ -114,7 +114,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_mixed_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_mixed_arrowhead.exp.json
index c4a5cd4ea..29802116f 100644
--- a/testdata/d2compiler/TestCompile/edge_mixed_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_mixed_arrowhead.exp.json
@@ -224,7 +224,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_non_shape_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_non_shape_arrowhead.exp.json
index e69842d0b..7c90a88d1 100644
--- a/testdata/d2compiler/TestCompile/edge_non_shape_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_non_shape_arrowhead.exp.json
@@ -118,7 +118,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/edge_semiflat_arrowhead.exp.json b/testdata/d2compiler/TestCompile/edge_semiflat_arrowhead.exp.json
index 96eb9fc3b..c0a0616cb 100644
--- a/testdata/d2compiler/TestCompile/edge_semiflat_arrowhead.exp.json
+++ b/testdata/d2compiler/TestCompile/edge_semiflat_arrowhead.exp.json
@@ -174,7 +174,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/escaped_id.exp.json b/testdata/d2compiler/TestCompile/escaped_id.exp.json
index 585073bf1..a19c4d04e 100644
--- a/testdata/d2compiler/TestCompile/escaped_id.exp.json
+++ b/testdata/d2compiler/TestCompile/escaped_id.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/image_style.exp.json b/testdata/d2compiler/TestCompile/image_style.exp.json
index 02566f08f..531f86ed6 100644
--- a/testdata/d2compiler/TestCompile/image_style.exp.json
+++ b/testdata/d2compiler/TestCompile/image_style.exp.json
@@ -166,7 +166,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/nested_sql.exp.json b/testdata/d2compiler/TestCompile/nested_sql.exp.json
index eb93665e3..f8e959c2d 100644
--- a/testdata/d2compiler/TestCompile/nested_sql.exp.json
+++ b/testdata/d2compiler/TestCompile/nested_sql.exp.json
@@ -179,7 +179,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/path_link.exp.json b/testdata/d2compiler/TestCompile/path_link.exp.json
index d6006f431..02465cd66 100644
--- a/testdata/d2compiler/TestCompile/path_link.exp.json
+++ b/testdata/d2compiler/TestCompile/path_link.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/reserved_icon_near_style.exp.json b/testdata/d2compiler/TestCompile/reserved_icon_near_style.exp.json
index ad53ec5b5..46a4d5fa1 100644
--- a/testdata/d2compiler/TestCompile/reserved_icon_near_style.exp.json
+++ b/testdata/d2compiler/TestCompile/reserved_icon_near_style.exp.json
@@ -279,7 +279,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/root_sequence.exp.json b/testdata/d2compiler/TestCompile/root_sequence.exp.json
index 7ee72472d..299489edb 100644
--- a/testdata/d2compiler/TestCompile/root_sequence.exp.json
+++ b/testdata/d2compiler/TestCompile/root_sequence.exp.json
@@ -55,7 +55,7 @@
           "value": "sequence_diagram"
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/set_direction.exp.json b/testdata/d2compiler/TestCompile/set_direction.exp.json
index 39c25c81d..2cb21da2a 100644
--- a/testdata/d2compiler/TestCompile/set_direction.exp.json
+++ b/testdata/d2compiler/TestCompile/set_direction.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/sql_paren.exp.json b/testdata/d2compiler/TestCompile/sql_paren.exp.json
index 0636f35e4..84a9188a6 100644
--- a/testdata/d2compiler/TestCompile/sql_paren.exp.json
+++ b/testdata/d2compiler/TestCompile/sql_paren.exp.json
@@ -160,7 +160,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/stroke-width.exp.json b/testdata/d2compiler/TestCompile/stroke-width.exp.json
index 414d25eb1..5833e12fe 100644
--- a/testdata/d2compiler/TestCompile/stroke-width.exp.json
+++ b/testdata/d2compiler/TestCompile/stroke-width.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/table_style.exp.json b/testdata/d2compiler/TestCompile/table_style.exp.json
index 22a45a5b5..3e1879643 100644
--- a/testdata/d2compiler/TestCompile/table_style.exp.json
+++ b/testdata/d2compiler/TestCompile/table_style.exp.json
@@ -157,7 +157,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/table_style_map.exp.json b/testdata/d2compiler/TestCompile/table_style_map.exp.json
index c1f9bda43..6f2450ceb 100644
--- a/testdata/d2compiler/TestCompile/table_style_map.exp.json
+++ b/testdata/d2compiler/TestCompile/table_style_map.exp.json
@@ -208,7 +208,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_edge.exp.json b/testdata/d2compiler/TestCompile/underscore_edge.exp.json
index 8b06f7537..3533736bb 100644
--- a/testdata/d2compiler/TestCompile/underscore_edge.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_edge.exp.json
@@ -119,7 +119,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_edge_chain.exp.json b/testdata/d2compiler/TestCompile/underscore_edge_chain.exp.json
index 406658e5a..74ecea32a 100644
--- a/testdata/d2compiler/TestCompile/underscore_edge_chain.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_edge_chain.exp.json
@@ -178,7 +178,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_edge_existing.exp.json b/testdata/d2compiler/TestCompile/underscore_edge_existing.exp.json
index c9f3d8543..073a57e74 100644
--- a/testdata/d2compiler/TestCompile/underscore_edge_existing.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_edge_existing.exp.json
@@ -185,7 +185,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_edge_index.exp.json b/testdata/d2compiler/TestCompile/underscore_edge_index.exp.json
index 0a5a2f97d..31a2202de 100644
--- a/testdata/d2compiler/TestCompile/underscore_edge_index.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_edge_index.exp.json
@@ -190,7 +190,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_edge_nested.exp.json b/testdata/d2compiler/TestCompile/underscore_edge_nested.exp.json
index 92ff03d23..c2028d32b 100644
--- a/testdata/d2compiler/TestCompile/underscore_edge_nested.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_edge_nested.exp.json
@@ -159,7 +159,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_parent_create.exp.json b/testdata/d2compiler/TestCompile/underscore_parent_create.exp.json
index 833ab6477..128379ba8 100644
--- a/testdata/d2compiler/TestCompile/underscore_parent_create.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_parent_create.exp.json
@@ -85,7 +85,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_parent_not_root.exp.json b/testdata/d2compiler/TestCompile/underscore_parent_not_root.exp.json
index 6297ee3e4..5d081d232 100644
--- a/testdata/d2compiler/TestCompile/underscore_parent_not_root.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_parent_not_root.exp.json
@@ -114,7 +114,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_parent_preference_1.exp.json b/testdata/d2compiler/TestCompile/underscore_parent_preference_1.exp.json
index 31608d403..be821ca29 100644
--- a/testdata/d2compiler/TestCompile/underscore_parent_preference_1.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_parent_preference_1.exp.json
@@ -128,7 +128,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_parent_preference_2.exp.json b/testdata/d2compiler/TestCompile/underscore_parent_preference_2.exp.json
index bd256f8c5..d8dfd5ec9 100644
--- a/testdata/d2compiler/TestCompile/underscore_parent_preference_2.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_parent_preference_2.exp.json
@@ -128,7 +128,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/underscore_parent_squared.exp.json b/testdata/d2compiler/TestCompile/underscore_parent_squared.exp.json
index b126ea45b..8d69b7330 100644
--- a/testdata/d2compiler/TestCompile/underscore_parent_squared.exp.json
+++ b/testdata/d2compiler/TestCompile/underscore_parent_squared.exp.json
@@ -125,7 +125,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2compiler/TestCompile/url_link.exp.json b/testdata/d2compiler/TestCompile/url_link.exp.json
index fb8ef708c..bab321736 100644
--- a/testdata/d2compiler/TestCompile/url_link.exp.json
+++ b/testdata/d2compiler/TestCompile/url_link.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/base.exp.json b/testdata/d2oracle/TestCreate/base.exp.json
index 2bb9898ae..83817a6b9 100644
--- a/testdata/d2oracle/TestCreate/base.exp.json
+++ b/testdata/d2oracle/TestCreate/base.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/container.exp.json b/testdata/d2oracle/TestCreate/container.exp.json
index e2ecd41d2..9d138c280 100644
--- a/testdata/d2oracle/TestCreate/container.exp.json
+++ b/testdata/d2oracle/TestCreate/container.exp.json
@@ -74,7 +74,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/container_edge.exp.json b/testdata/d2oracle/TestCreate/container_edge.exp.json
index adab85d6b..57e39774a 100644
--- a/testdata/d2oracle/TestCreate/container_edge.exp.json
+++ b/testdata/d2oracle/TestCreate/container_edge.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/container_edge_label.exp.json b/testdata/d2oracle/TestCreate/container_edge_label.exp.json
index 63933b9ed..7cd93536a 100644
--- a/testdata/d2oracle/TestCreate/container_edge_label.exp.json
+++ b/testdata/d2oracle/TestCreate/container_edge_label.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge.exp.json b/testdata/d2oracle/TestCreate/edge.exp.json
index a1fd6d199..e661c9dca 100644
--- a/testdata/d2oracle/TestCreate/edge.exp.json
+++ b/testdata/d2oracle/TestCreate/edge.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge_nested.exp.json b/testdata/d2oracle/TestCreate/edge_nested.exp.json
index 1ebbcb078..dd6f60222 100644
--- a/testdata/d2oracle/TestCreate/edge_nested.exp.json
+++ b/testdata/d2oracle/TestCreate/edge_nested.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge_scope.exp.json b/testdata/d2oracle/TestCreate/edge_scope.exp.json
index 7139fedb8..64df633f8 100644
--- a/testdata/d2oracle/TestCreate/edge_scope.exp.json
+++ b/testdata/d2oracle/TestCreate/edge_scope.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge_scope_flat.exp.json b/testdata/d2oracle/TestCreate/edge_scope_flat.exp.json
index 73e520e79..2221724f4 100644
--- a/testdata/d2oracle/TestCreate/edge_scope_flat.exp.json
+++ b/testdata/d2oracle/TestCreate/edge_scope_flat.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge_scope_nested.exp.json b/testdata/d2oracle/TestCreate/edge_scope_nested.exp.json
index 589c4fdb1..78d36ffe6 100644
--- a/testdata/d2oracle/TestCreate/edge_scope_nested.exp.json
+++ b/testdata/d2oracle/TestCreate/edge_scope_nested.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/edge_unique.exp.json b/testdata/d2oracle/TestCreate/edge_unique.exp.json
index a3df8c95b..aa12efff9 100644
--- a/testdata/d2oracle/TestCreate/edge_unique.exp.json
+++ b/testdata/d2oracle/TestCreate/edge_unique.exp.json
@@ -254,7 +254,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/gen_key.exp.json b/testdata/d2oracle/TestCreate/gen_key.exp.json
index cd3daef2b..8c27e5c74 100644
--- a/testdata/d2oracle/TestCreate/gen_key.exp.json
+++ b/testdata/d2oracle/TestCreate/gen_key.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/gen_key_n.exp.json b/testdata/d2oracle/TestCreate/gen_key_n.exp.json
index d7f12f4f7..33f2e3a9f 100644
--- a/testdata/d2oracle/TestCreate/gen_key_n.exp.json
+++ b/testdata/d2oracle/TestCreate/gen_key_n.exp.json
@@ -326,7 +326,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/gen_key_nested.exp.json b/testdata/d2oracle/TestCreate/gen_key_nested.exp.json
index 43042248d..00f7a04c9 100644
--- a/testdata/d2oracle/TestCreate/gen_key_nested.exp.json
+++ b/testdata/d2oracle/TestCreate/gen_key_nested.exp.json
@@ -134,7 +134,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/gen_key_scope.exp.json b/testdata/d2oracle/TestCreate/gen_key_scope.exp.json
index 2aea6d1d8..8a569a940 100644
--- a/testdata/d2oracle/TestCreate/gen_key_scope.exp.json
+++ b/testdata/d2oracle/TestCreate/gen_key_scope.exp.json
@@ -119,7 +119,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/gen_key_suffix.exp.json b/testdata/d2oracle/TestCreate/gen_key_suffix.exp.json
index eb5d5fcbf..d2b2f15f0 100644
--- a/testdata/d2oracle/TestCreate/gen_key_suffix.exp.json
+++ b/testdata/d2oracle/TestCreate/gen_key_suffix.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/make_scope_multiline.exp.json b/testdata/d2oracle/TestCreate/make_scope_multiline.exp.json
index 85d958e85..b6d879703 100644
--- a/testdata/d2oracle/TestCreate/make_scope_multiline.exp.json
+++ b/testdata/d2oracle/TestCreate/make_scope_multiline.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_1.exp.json b/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_1.exp.json
index 6633906b0..9349bdb5f 100644
--- a/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_1.exp.json
+++ b/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_1.exp.json
@@ -153,7 +153,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_2.exp.json b/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_2.exp.json
index ca6b2ec41..a4682746e 100644
--- a/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_2.exp.json
+++ b/testdata/d2oracle/TestCreate/make_scope_multiline_spacing_2.exp.json
@@ -153,7 +153,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/nested.exp.json b/testdata/d2oracle/TestCreate/nested.exp.json
index c74f9728c..62f175676 100644
--- a/testdata/d2oracle/TestCreate/nested.exp.json
+++ b/testdata/d2oracle/TestCreate/nested.exp.json
@@ -67,7 +67,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestCreate/scope.exp.json b/testdata/d2oracle/TestCreate/scope.exp.json
index 94305c0da..047518e59 100644
--- a/testdata/d2oracle/TestCreate/scope.exp.json
+++ b/testdata/d2oracle/TestCreate/scope.exp.json
@@ -96,7 +96,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/breakup_arrowhead.exp.json b/testdata/d2oracle/TestDelete/breakup_arrowhead.exp.json
index 3cab81bc3..8bc142be6 100644
--- a/testdata/d2oracle/TestDelete/breakup_arrowhead.exp.json
+++ b/testdata/d2oracle/TestDelete/breakup_arrowhead.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children.exp.json b/testdata/d2oracle/TestDelete/children.exp.json
index dd8c2bbc4..21901e5cf 100644
--- a/testdata/d2oracle/TestDelete/children.exp.json
+++ b/testdata/d2oracle/TestDelete/children.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_conflicts.exp.json
index 87d65add9..ddfaea22b 100644
--- a/testdata/d2oracle/TestDelete/children_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_conflicts.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_edge_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_edge_conflicts.exp.json
index dcd5244e3..1bae6a67f 100644
--- a/testdata/d2oracle/TestDelete/children_edge_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_edge_conflicts.exp.json
@@ -124,7 +124,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_edges_flat_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_edges_flat_conflicts.exp.json
index de47ba18f..280026135 100644
--- a/testdata/d2oracle/TestDelete/children_edges_flat_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_edges_flat_conflicts.exp.json
@@ -217,7 +217,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_flat_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_flat_conflicts.exp.json
index 5d96c6102..1aa09a3a4 100644
--- a/testdata/d2oracle/TestDelete/children_flat_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_flat_conflicts.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_multiple_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_multiple_conflicts.exp.json
index af5a51e6b..e53bc9ec6 100644
--- a/testdata/d2oracle/TestDelete/children_multiple_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_multiple_conflicts.exp.json
@@ -193,7 +193,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_nested_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_nested_conflicts.exp.json
index 946b9f079..be606cf92 100644
--- a/testdata/d2oracle/TestDelete/children_nested_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_nested_conflicts.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_nested_referenced_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_nested_referenced_conflicts.exp.json
index 973261e7c..89421aace 100644
--- a/testdata/d2oracle/TestDelete/children_nested_referenced_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_nested_referenced_conflicts.exp.json
@@ -156,7 +156,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_no_self_conflict.exp.json b/testdata/d2oracle/TestDelete/children_no_self_conflict.exp.json
index 9423a3aa5..35572283c 100644
--- a/testdata/d2oracle/TestDelete/children_no_self_conflict.exp.json
+++ b/testdata/d2oracle/TestDelete/children_no_self_conflict.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_order.exp.json b/testdata/d2oracle/TestDelete/children_order.exp.json
index b800bd312..45a4f5ff3 100644
--- a/testdata/d2oracle/TestDelete/children_order.exp.json
+++ b/testdata/d2oracle/TestDelete/children_order.exp.json
@@ -120,7 +120,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_referenced_conflicts.exp.json b/testdata/d2oracle/TestDelete/children_referenced_conflicts.exp.json
index d401622fd..6ca8b3cef 100644
--- a/testdata/d2oracle/TestDelete/children_referenced_conflicts.exp.json
+++ b/testdata/d2oracle/TestDelete/children_referenced_conflicts.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/children_scope.exp.json b/testdata/d2oracle/TestDelete/children_scope.exp.json
index 3118bec53..6a3398790 100644
--- a/testdata/d2oracle/TestDelete/children_scope.exp.json
+++ b/testdata/d2oracle/TestDelete/children_scope.exp.json
@@ -131,7 +131,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/container_near.exp.json b/testdata/d2oracle/TestDelete/container_near.exp.json
index bed2a72a5..c45fe76d2 100644
--- a/testdata/d2oracle/TestDelete/container_near.exp.json
+++ b/testdata/d2oracle/TestDelete/container_near.exp.json
@@ -169,7 +169,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_icon.exp.json b/testdata/d2oracle/TestDelete/delete_icon.exp.json
index a498f8833..df319c471 100644
--- a/testdata/d2oracle/TestDelete/delete_icon.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_icon.exp.json
@@ -95,7 +95,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_link.exp.json b/testdata/d2oracle/TestDelete/delete_link.exp.json
index f32e3f288..cb519b429 100644
--- a/testdata/d2oracle/TestDelete/delete_link.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_link.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_near.exp.json b/testdata/d2oracle/TestDelete/delete_near.exp.json
index e1cc3ff32..6470d7bfa 100644
--- a/testdata/d2oracle/TestDelete/delete_near.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_near.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_needed_flat_near.exp.json b/testdata/d2oracle/TestDelete/delete_needed_flat_near.exp.json
index 4d3ff90d1..c2860dbc2 100644
--- a/testdata/d2oracle/TestDelete/delete_needed_flat_near.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_needed_flat_near.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_redundant_flat_near.exp.json b/testdata/d2oracle/TestDelete/delete_redundant_flat_near.exp.json
index fc85affc8..35b873d8d 100644
--- a/testdata/d2oracle/TestDelete/delete_redundant_flat_near.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_redundant_flat_near.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/delete_tooltip.exp.json b/testdata/d2oracle/TestDelete/delete_tooltip.exp.json
index 309c3bf31..57ee7c154 100644
--- a/testdata/d2oracle/TestDelete/delete_tooltip.exp.json
+++ b/testdata/d2oracle/TestDelete/delete_tooltip.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_both_identical_childs.exp.json b/testdata/d2oracle/TestDelete/edge_both_identical_childs.exp.json
index 2390c6237..f303e512e 100644
--- a/testdata/d2oracle/TestDelete/edge_both_identical_childs.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_both_identical_childs.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_common.exp.json b/testdata/d2oracle/TestDelete/edge_common.exp.json
index 944bace4b..0e259a498 100644
--- a/testdata/d2oracle/TestDelete/edge_common.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_common.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_common_2.exp.json b/testdata/d2oracle/TestDelete/edge_common_2.exp.json
index d8a96466b..efbbd52d9 100644
--- a/testdata/d2oracle/TestDelete/edge_common_2.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_common_2.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_common_3.exp.json b/testdata/d2oracle/TestDelete/edge_common_3.exp.json
index f8ea7c4bf..f737c81fa 100644
--- a/testdata/d2oracle/TestDelete/edge_common_3.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_common_3.exp.json
@@ -90,7 +90,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_common_4.exp.json b/testdata/d2oracle/TestDelete/edge_common_4.exp.json
index 7d86d4600..f954d4ebe 100644
--- a/testdata/d2oracle/TestDelete/edge_common_4.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_common_4.exp.json
@@ -90,7 +90,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_conflict.exp.json b/testdata/d2oracle/TestDelete/edge_conflict.exp.json
index 7af9663e6..3d9a04177 100644
--- a/testdata/d2oracle/TestDelete/edge_conflict.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_conflict.exp.json
@@ -113,7 +113,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_decrement.exp.json b/testdata/d2oracle/TestDelete/edge_decrement.exp.json
index 845ca077f..fa9f3f0da 100644
--- a/testdata/d2oracle/TestDelete/edge_decrement.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_decrement.exp.json
@@ -450,7 +450,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_first.exp.json b/testdata/d2oracle/TestDelete/edge_first.exp.json
index 21ee6b7f1..03f2fc20e 100644
--- a/testdata/d2oracle/TestDelete/edge_first.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_first.exp.json
@@ -179,7 +179,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_flat_style.exp.json b/testdata/d2oracle/TestDelete/edge_flat_style.exp.json
index adffe17f6..2ae0a34e2 100644
--- a/testdata/d2oracle/TestDelete/edge_flat_style.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_flat_style.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_identical_child.exp.json b/testdata/d2oracle/TestDelete/edge_identical_child.exp.json
index 2fd79b984..2233f3e1d 100644
--- a/testdata/d2oracle/TestDelete/edge_identical_child.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_identical_child.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_key_style.exp.json b/testdata/d2oracle/TestDelete/edge_key_style.exp.json
index a820467cf..134edb759 100644
--- a/testdata/d2oracle/TestDelete/edge_key_style.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_key_style.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_last.exp.json b/testdata/d2oracle/TestDelete/edge_last.exp.json
index 264e3ea33..cf998ef66 100644
--- a/testdata/d2oracle/TestDelete/edge_last.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_last.exp.json
@@ -216,7 +216,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_map_style.exp.json b/testdata/d2oracle/TestDelete/edge_map_style.exp.json
index 19b97487f..e9975b9f8 100644
--- a/testdata/d2oracle/TestDelete/edge_map_style.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_map_style.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/edge_middle.exp.json b/testdata/d2oracle/TestDelete/edge_middle.exp.json
index c12263bb4..d78960b95 100644
--- a/testdata/d2oracle/TestDelete/edge_middle.exp.json
+++ b/testdata/d2oracle/TestDelete/edge_middle.exp.json
@@ -202,7 +202,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/empty_map.exp.json b/testdata/d2oracle/TestDelete/empty_map.exp.json
index 7fa2595af..68d997381 100644
--- a/testdata/d2oracle/TestDelete/empty_map.exp.json
+++ b/testdata/d2oracle/TestDelete/empty_map.exp.json
@@ -74,7 +74,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/flat.exp.json b/testdata/d2oracle/TestDelete/flat.exp.json
index 3f6f4cf3f..211d0bdb6 100644
--- a/testdata/d2oracle/TestDelete/flat.exp.json
+++ b/testdata/d2oracle/TestDelete/flat.exp.json
@@ -21,7 +21,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/flat_reserved.exp.json b/testdata/d2oracle/TestDelete/flat_reserved.exp.json
index 118aae674..8476e1edd 100644
--- a/testdata/d2oracle/TestDelete/flat_reserved.exp.json
+++ b/testdata/d2oracle/TestDelete/flat_reserved.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/hoist_children.exp.json b/testdata/d2oracle/TestDelete/hoist_children.exp.json
index 16b5ad88f..97cfc87a8 100644
--- a/testdata/d2oracle/TestDelete/hoist_children.exp.json
+++ b/testdata/d2oracle/TestDelete/hoist_children.exp.json
@@ -74,7 +74,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/hoist_edge_children.exp.json b/testdata/d2oracle/TestDelete/hoist_edge_children.exp.json
index e8074b6e8..b82328e95 100644
--- a/testdata/d2oracle/TestDelete/hoist_edge_children.exp.json
+++ b/testdata/d2oracle/TestDelete/hoist_edge_children.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/key_with_edges.exp.json b/testdata/d2oracle/TestDelete/key_with_edges.exp.json
index 7baef8f7c..8e97c26c9 100644
--- a/testdata/d2oracle/TestDelete/key_with_edges.exp.json
+++ b/testdata/d2oracle/TestDelete/key_with_edges.exp.json
@@ -90,7 +90,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/key_with_edges_2.exp.json b/testdata/d2oracle/TestDelete/key_with_edges_2.exp.json
index 80968798c..5f3b819c6 100644
--- a/testdata/d2oracle/TestDelete/key_with_edges_2.exp.json
+++ b/testdata/d2oracle/TestDelete/key_with_edges_2.exp.json
@@ -56,7 +56,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/key_with_edges_3.exp.json b/testdata/d2oracle/TestDelete/key_with_edges_3.exp.json
index 8ea798f96..18207c839 100644
--- a/testdata/d2oracle/TestDelete/key_with_edges_3.exp.json
+++ b/testdata/d2oracle/TestDelete/key_with_edges_3.exp.json
@@ -56,7 +56,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/key_with_edges_4.exp.json b/testdata/d2oracle/TestDelete/key_with_edges_4.exp.json
index 2e5c3add9..0c2b141a2 100644
--- a/testdata/d2oracle/TestDelete/key_with_edges_4.exp.json
+++ b/testdata/d2oracle/TestDelete/key_with_edges_4.exp.json
@@ -90,7 +90,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multi_near.exp.json b/testdata/d2oracle/TestDelete/multi_near.exp.json
index 4de8e7081..4e1a57bdb 100644
--- a/testdata/d2oracle/TestDelete/multi_near.exp.json
+++ b/testdata/d2oracle/TestDelete/multi_near.exp.json
@@ -192,7 +192,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multi_path_map_conflict.exp.json b/testdata/d2oracle/TestDelete/multi_path_map_conflict.exp.json
index 8519d5e06..99cf6d79d 100644
--- a/testdata/d2oracle/TestDelete/multi_path_map_conflict.exp.json
+++ b/testdata/d2oracle/TestDelete/multi_path_map_conflict.exp.json
@@ -126,7 +126,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multi_path_map_no_conflict.exp.json b/testdata/d2oracle/TestDelete/multi_path_map_no_conflict.exp.json
index 588f8d96f..ef6cf5761 100644
--- a/testdata/d2oracle/TestDelete/multi_path_map_no_conflict.exp.json
+++ b/testdata/d2oracle/TestDelete/multi_path_map_no_conflict.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multiple_flat_middle_container.exp.json b/testdata/d2oracle/TestDelete/multiple_flat_middle_container.exp.json
index e84de552d..10dd3d52d 100644
--- a/testdata/d2oracle/TestDelete/multiple_flat_middle_container.exp.json
+++ b/testdata/d2oracle/TestDelete/multiple_flat_middle_container.exp.json
@@ -90,7 +90,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multiple_flat_style.exp.json b/testdata/d2oracle/TestDelete/multiple_flat_style.exp.json
index 8f34cff70..959042a86 100644
--- a/testdata/d2oracle/TestDelete/multiple_flat_style.exp.json
+++ b/testdata/d2oracle/TestDelete/multiple_flat_style.exp.json
@@ -73,7 +73,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/multiple_map_styles.exp.json b/testdata/d2oracle/TestDelete/multiple_map_styles.exp.json
index dcc5cf048..4ccd4f7dc 100644
--- a/testdata/d2oracle/TestDelete/multiple_map_styles.exp.json
+++ b/testdata/d2oracle/TestDelete/multiple_map_styles.exp.json
@@ -109,7 +109,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/near.exp.json b/testdata/d2oracle/TestDelete/near.exp.json
index 89544c915..ffc235220 100644
--- a/testdata/d2oracle/TestDelete/near.exp.json
+++ b/testdata/d2oracle/TestDelete/near.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested.exp.json b/testdata/d2oracle/TestDelete/nested.exp.json
index 27cb6d84b..50db24212 100644
--- a/testdata/d2oracle/TestDelete/nested.exp.json
+++ b/testdata/d2oracle/TestDelete/nested.exp.json
@@ -67,7 +67,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested_2.exp.json b/testdata/d2oracle/TestDelete/nested_2.exp.json
index bb0094d1f..a4a7a9425 100644
--- a/testdata/d2oracle/TestDelete/nested_2.exp.json
+++ b/testdata/d2oracle/TestDelete/nested_2.exp.json
@@ -67,7 +67,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested_edge_key_style.exp.json b/testdata/d2oracle/TestDelete/nested_edge_key_style.exp.json
index fcde6d46a..d25547e4f 100644
--- a/testdata/d2oracle/TestDelete/nested_edge_key_style.exp.json
+++ b/testdata/d2oracle/TestDelete/nested_edge_key_style.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested_flat_style.exp.json b/testdata/d2oracle/TestDelete/nested_flat_style.exp.json
index 537ebdae8..ac8ea3cad 100644
--- a/testdata/d2oracle/TestDelete/nested_flat_style.exp.json
+++ b/testdata/d2oracle/TestDelete/nested_flat_style.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested_reserved.exp.json b/testdata/d2oracle/TestDelete/nested_reserved.exp.json
index 07855541f..a4e5bf400 100644
--- a/testdata/d2oracle/TestDelete/nested_reserved.exp.json
+++ b/testdata/d2oracle/TestDelete/nested_reserved.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/nested_underscore_update.exp.json b/testdata/d2oracle/TestDelete/nested_underscore_update.exp.json
index 4256db4fd..3e17f6a66 100644
--- a/testdata/d2oracle/TestDelete/nested_underscore_update.exp.json
+++ b/testdata/d2oracle/TestDelete/nested_underscore_update.exp.json
@@ -85,7 +85,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/node_in_edge.exp.json b/testdata/d2oracle/TestDelete/node_in_edge.exp.json
index 334a82dde..b81594fdd 100644
--- a/testdata/d2oracle/TestDelete/node_in_edge.exp.json
+++ b/testdata/d2oracle/TestDelete/node_in_edge.exp.json
@@ -166,7 +166,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/node_in_edge_last.exp.json b/testdata/d2oracle/TestDelete/node_in_edge_last.exp.json
index ace70788f..f21f1f9c1 100644
--- a/testdata/d2oracle/TestDelete/node_in_edge_last.exp.json
+++ b/testdata/d2oracle/TestDelete/node_in_edge_last.exp.json
@@ -205,7 +205,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/only_delete_edge_reserved.exp.json b/testdata/d2oracle/TestDelete/only_delete_edge_reserved.exp.json
index 6b6d72d62..7d7ec783b 100644
--- a/testdata/d2oracle/TestDelete/only_delete_edge_reserved.exp.json
+++ b/testdata/d2oracle/TestDelete/only_delete_edge_reserved.exp.json
@@ -164,7 +164,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/only_delete_obj_reserved.exp.json b/testdata/d2oracle/TestDelete/only_delete_obj_reserved.exp.json
index 2b469b4af..1650550fa 100644
--- a/testdata/d2oracle/TestDelete/only_delete_obj_reserved.exp.json
+++ b/testdata/d2oracle/TestDelete/only_delete_obj_reserved.exp.json
@@ -164,7 +164,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_1.exp.json b/testdata/d2oracle/TestDelete/order_1.exp.json
index edf435e21..043baf74c 100644
--- a/testdata/d2oracle/TestDelete/order_1.exp.json
+++ b/testdata/d2oracle/TestDelete/order_1.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_2.exp.json b/testdata/d2oracle/TestDelete/order_2.exp.json
index 9ca5cc849..bd49c03b6 100644
--- a/testdata/d2oracle/TestDelete/order_2.exp.json
+++ b/testdata/d2oracle/TestDelete/order_2.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_3.exp.json b/testdata/d2oracle/TestDelete/order_3.exp.json
index cbb7f200c..4bf4251eb 100644
--- a/testdata/d2oracle/TestDelete/order_3.exp.json
+++ b/testdata/d2oracle/TestDelete/order_3.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_4.exp.json b/testdata/d2oracle/TestDelete/order_4.exp.json
index 8806ca2f0..aba81bcd3 100644
--- a/testdata/d2oracle/TestDelete/order_4.exp.json
+++ b/testdata/d2oracle/TestDelete/order_4.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_5.exp.json b/testdata/d2oracle/TestDelete/order_5.exp.json
index c388d096e..d45a8745a 100644
--- a/testdata/d2oracle/TestDelete/order_5.exp.json
+++ b/testdata/d2oracle/TestDelete/order_5.exp.json
@@ -143,7 +143,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_6.exp.json b/testdata/d2oracle/TestDelete/order_6.exp.json
index c31aeecd6..921b3c295 100644
--- a/testdata/d2oracle/TestDelete/order_6.exp.json
+++ b/testdata/d2oracle/TestDelete/order_6.exp.json
@@ -119,7 +119,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_7.exp.json b/testdata/d2oracle/TestDelete/order_7.exp.json
index 5de614452..1311a683d 100644
--- a/testdata/d2oracle/TestDelete/order_7.exp.json
+++ b/testdata/d2oracle/TestDelete/order_7.exp.json
@@ -130,7 +130,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/order_8.exp.json b/testdata/d2oracle/TestDelete/order_8.exp.json
index d4b37a5c1..2988c58d6 100644
--- a/testdata/d2oracle/TestDelete/order_8.exp.json
+++ b/testdata/d2oracle/TestDelete/order_8.exp.json
@@ -137,7 +137,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/shape_class.exp.json b/testdata/d2oracle/TestDelete/shape_class.exp.json
index f0e753dca..76ae10fa7 100644
--- a/testdata/d2oracle/TestDelete/shape_class.exp.json
+++ b/testdata/d2oracle/TestDelete/shape_class.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/shape_sql_table.exp.json b/testdata/d2oracle/TestDelete/shape_sql_table.exp.json
index a3cb14fb7..7092dace0 100644
--- a/testdata/d2oracle/TestDelete/shape_sql_table.exp.json
+++ b/testdata/d2oracle/TestDelete/shape_sql_table.exp.json
@@ -265,7 +265,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/singular_flat_style.exp.json b/testdata/d2oracle/TestDelete/singular_flat_style.exp.json
index 92d15eb55..7d00f1095 100644
--- a/testdata/d2oracle/TestDelete/singular_flat_style.exp.json
+++ b/testdata/d2oracle/TestDelete/singular_flat_style.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/singular_map_style.exp.json b/testdata/d2oracle/TestDelete/singular_map_style.exp.json
index 375a519ef..d747efc90 100644
--- a/testdata/d2oracle/TestDelete/singular_map_style.exp.json
+++ b/testdata/d2oracle/TestDelete/singular_map_style.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/underscore_no_conflict.exp.json b/testdata/d2oracle/TestDelete/underscore_no_conflict.exp.json
index 23a7f36c7..25a4ae1d2 100644
--- a/testdata/d2oracle/TestDelete/underscore_no_conflict.exp.json
+++ b/testdata/d2oracle/TestDelete/underscore_no_conflict.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestDelete/underscore_remove.exp.json b/testdata/d2oracle/TestDelete/underscore_remove.exp.json
index f1d82cb83..0e954ca80 100644
--- a/testdata/d2oracle/TestDelete/underscore_remove.exp.json
+++ b/testdata/d2oracle/TestDelete/underscore_remove.exp.json
@@ -137,7 +137,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/append_multiple_styles.exp.json b/testdata/d2oracle/TestMove/append_multiple_styles.exp.json
index 55850db1c..74a573244 100644
--- a/testdata/d2oracle/TestMove/append_multiple_styles.exp.json
+++ b/testdata/d2oracle/TestMove/append_multiple_styles.exp.json
@@ -229,7 +229,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/basic.exp.json b/testdata/d2oracle/TestMove/basic.exp.json
index a160a9dc4..dd3c56f27 100644
--- a/testdata/d2oracle/TestMove/basic.exp.json
+++ b/testdata/d2oracle/TestMove/basic.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/basic_nested.exp.json b/testdata/d2oracle/TestMove/basic_nested.exp.json
index 7495cff16..857faea54 100644
--- a/testdata/d2oracle/TestMove/basic_nested.exp.json
+++ b/testdata/d2oracle/TestMove/basic_nested.exp.json
@@ -74,7 +74,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/basic_out_of_container.exp.json b/testdata/d2oracle/TestMove/basic_out_of_container.exp.json
index d5fb3b9e6..c02e1a8d4 100644
--- a/testdata/d2oracle/TestMove/basic_out_of_container.exp.json
+++ b/testdata/d2oracle/TestMove/basic_out_of_container.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/between_containers.exp.json b/testdata/d2oracle/TestMove/between_containers.exp.json
index 8fa356876..226a4c5cb 100644
--- a/testdata/d2oracle/TestMove/between_containers.exp.json
+++ b/testdata/d2oracle/TestMove/between_containers.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/chain_connected_nested.exp.json b/testdata/d2oracle/TestMove/chain_connected_nested.exp.json
index 7e88984e2..060dcc379 100644
--- a/testdata/d2oracle/TestMove/chain_connected_nested.exp.json
+++ b/testdata/d2oracle/TestMove/chain_connected_nested.exp.json
@@ -128,7 +128,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/chain_connected_nested_no_extra_create.exp.json b/testdata/d2oracle/TestMove/chain_connected_nested_no_extra_create.exp.json
index 5a4055194..c776f06f6 100644
--- a/testdata/d2oracle/TestMove/chain_connected_nested_no_extra_create.exp.json
+++ b/testdata/d2oracle/TestMove/chain_connected_nested_no_extra_create.exp.json
@@ -116,7 +116,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/connected_nested.exp.json b/testdata/d2oracle/TestMove/connected_nested.exp.json
index fd069c96d..b649f7a21 100644
--- a/testdata/d2oracle/TestMove/connected_nested.exp.json
+++ b/testdata/d2oracle/TestMove/connected_nested.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/container_near.exp.json b/testdata/d2oracle/TestMove/container_near.exp.json
index d0d987f04..a7ee162a6 100644
--- a/testdata/d2oracle/TestMove/container_near.exp.json
+++ b/testdata/d2oracle/TestMove/container_near.exp.json
@@ -199,7 +199,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_across_containers.exp.json b/testdata/d2oracle/TestMove/edge_across_containers.exp.json
index de219e56d..4fcc9529a 100644
--- a/testdata/d2oracle/TestMove/edge_across_containers.exp.json
+++ b/testdata/d2oracle/TestMove/edge_across_containers.exp.json
@@ -142,7 +142,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_basic.exp.json b/testdata/d2oracle/TestMove/edge_basic.exp.json
index 2c9aeb38a..70da245ca 100644
--- a/testdata/d2oracle/TestMove/edge_basic.exp.json
+++ b/testdata/d2oracle/TestMove/edge_basic.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_chain_basic.exp.json b/testdata/d2oracle/TestMove/edge_chain_basic.exp.json
index 27387fd83..8518db578 100644
--- a/testdata/d2oracle/TestMove/edge_chain_basic.exp.json
+++ b/testdata/d2oracle/TestMove/edge_chain_basic.exp.json
@@ -105,7 +105,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_chain_circular.exp.json b/testdata/d2oracle/TestMove/edge_chain_circular.exp.json
index c930d1f56..856c5b91c 100644
--- a/testdata/d2oracle/TestMove/edge_chain_circular.exp.json
+++ b/testdata/d2oracle/TestMove/edge_chain_circular.exp.json
@@ -156,7 +156,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_chain_into_container.exp.json b/testdata/d2oracle/TestMove/edge_chain_into_container.exp.json
index 0bf840769..2236b2fbc 100644
--- a/testdata/d2oracle/TestMove/edge_chain_into_container.exp.json
+++ b/testdata/d2oracle/TestMove/edge_chain_into_container.exp.json
@@ -139,7 +139,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_chain_out_container.exp.json b/testdata/d2oracle/TestMove/edge_chain_out_container.exp.json
index 20feb7ff3..3d320b686 100644
--- a/testdata/d2oracle/TestMove/edge_chain_out_container.exp.json
+++ b/testdata/d2oracle/TestMove/edge_chain_out_container.exp.json
@@ -156,7 +156,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_conflict.exp.json b/testdata/d2oracle/TestMove/edge_conflict.exp.json
index 91c4378b6..8fe85c030 100644
--- a/testdata/d2oracle/TestMove/edge_conflict.exp.json
+++ b/testdata/d2oracle/TestMove/edge_conflict.exp.json
@@ -142,7 +142,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_into_container.exp.json b/testdata/d2oracle/TestMove/edge_into_container.exp.json
index 701834420..9a1b01320 100644
--- a/testdata/d2oracle/TestMove/edge_into_container.exp.json
+++ b/testdata/d2oracle/TestMove/edge_into_container.exp.json
@@ -131,7 +131,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_nested_basic.exp.json b/testdata/d2oracle/TestMove/edge_nested_basic.exp.json
index 07a47e3bc..a9fab09b5 100644
--- a/testdata/d2oracle/TestMove/edge_nested_basic.exp.json
+++ b/testdata/d2oracle/TestMove/edge_nested_basic.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/edge_out_of_container.exp.json b/testdata/d2oracle/TestMove/edge_out_of_container.exp.json
index 126ff5ce7..2d9149f99 100644
--- a/testdata/d2oracle/TestMove/edge_out_of_container.exp.json
+++ b/testdata/d2oracle/TestMove/edge_out_of_container.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/extend_map.exp.json b/testdata/d2oracle/TestMove/extend_map.exp.json
index 425ad7ee7..2ffb0ef4b 100644
--- a/testdata/d2oracle/TestMove/extend_map.exp.json
+++ b/testdata/d2oracle/TestMove/extend_map.exp.json
@@ -155,7 +155,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/extend_stationary_path.exp.json b/testdata/d2oracle/TestMove/extend_stationary_path.exp.json
index 6d95b82bd..0075aa4bc 100644
--- a/testdata/d2oracle/TestMove/extend_stationary_path.exp.json
+++ b/testdata/d2oracle/TestMove/extend_stationary_path.exp.json
@@ -148,7 +148,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_between_containers.exp.json b/testdata/d2oracle/TestMove/flat_between_containers.exp.json
index 01bc2992c..c85b32880 100644
--- a/testdata/d2oracle/TestMove/flat_between_containers.exp.json
+++ b/testdata/d2oracle/TestMove/flat_between_containers.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_merge.exp.json b/testdata/d2oracle/TestMove/flat_merge.exp.json
index 2287f69be..9df86b37a 100644
--- a/testdata/d2oracle/TestMove/flat_merge.exp.json
+++ b/testdata/d2oracle/TestMove/flat_merge.exp.json
@@ -130,7 +130,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_middle_container.exp.json b/testdata/d2oracle/TestMove/flat_middle_container.exp.json
index 01cdcf5bd..3b6b7c094 100644
--- a/testdata/d2oracle/TestMove/flat_middle_container.exp.json
+++ b/testdata/d2oracle/TestMove/flat_middle_container.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_nested_merge.exp.json b/testdata/d2oracle/TestMove/flat_nested_merge.exp.json
index 0fd59393b..b38679467 100644
--- a/testdata/d2oracle/TestMove/flat_nested_merge.exp.json
+++ b/testdata/d2oracle/TestMove/flat_nested_merge.exp.json
@@ -186,7 +186,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_nested_merge_multiple_refs.exp.json b/testdata/d2oracle/TestMove/flat_nested_merge_multiple_refs.exp.json
index cfbde1286..4744bbdbe 100644
--- a/testdata/d2oracle/TestMove/flat_nested_merge_multiple_refs.exp.json
+++ b/testdata/d2oracle/TestMove/flat_nested_merge_multiple_refs.exp.json
@@ -284,7 +284,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_reparent_with_map_value.exp.json b/testdata/d2oracle/TestMove/flat_reparent_with_map_value.exp.json
index 37fa8e5d2..6d206c312 100644
--- a/testdata/d2oracle/TestMove/flat_reparent_with_map_value.exp.json
+++ b/testdata/d2oracle/TestMove/flat_reparent_with_map_value.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_reparent_with_mixed_map_value.exp.json b/testdata/d2oracle/TestMove/flat_reparent_with_mixed_map_value.exp.json
index a5bc27917..185a8b0b0 100644
--- a/testdata/d2oracle/TestMove/flat_reparent_with_mixed_map_value.exp.json
+++ b/testdata/d2oracle/TestMove/flat_reparent_with_mixed_map_value.exp.json
@@ -148,7 +148,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_reparent_with_value.exp.json b/testdata/d2oracle/TestMove/flat_reparent_with_value.exp.json
index 3082fd4b9..37dedfb5a 100644
--- a/testdata/d2oracle/TestMove/flat_reparent_with_value.exp.json
+++ b/testdata/d2oracle/TestMove/flat_reparent_with_value.exp.json
@@ -78,7 +78,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/flat_style.exp.json b/testdata/d2oracle/TestMove/flat_style.exp.json
index cc849ba61..749b3e5fc 100644
--- a/testdata/d2oracle/TestMove/flat_style.exp.json
+++ b/testdata/d2oracle/TestMove/flat_style.exp.json
@@ -157,7 +157,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/full_edge_slice.exp.json b/testdata/d2oracle/TestMove/full_edge_slice.exp.json
index 02b28e406..50aa53678 100644
--- a/testdata/d2oracle/TestMove/full_edge_slice.exp.json
+++ b/testdata/d2oracle/TestMove/full_edge_slice.exp.json
@@ -211,7 +211,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/full_slice.exp.json b/testdata/d2oracle/TestMove/full_slice.exp.json
index b4e8f174a..bf8ba0be7 100644
--- a/testdata/d2oracle/TestMove/full_slice.exp.json
+++ b/testdata/d2oracle/TestMove/full_slice.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/gnarly_1.exp.json b/testdata/d2oracle/TestMove/gnarly_1.exp.json
index 4746c45be..e358c1cdc 100644
--- a/testdata/d2oracle/TestMove/gnarly_1.exp.json
+++ b/testdata/d2oracle/TestMove/gnarly_1.exp.json
@@ -355,7 +355,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/hoist_container_children.exp.json b/testdata/d2oracle/TestMove/hoist_container_children.exp.json
index aa0994e94..bd73ed54b 100644
--- a/testdata/d2oracle/TestMove/hoist_container_children.exp.json
+++ b/testdata/d2oracle/TestMove/hoist_container_children.exp.json
@@ -120,7 +120,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/into_container_existing_map.exp.json b/testdata/d2oracle/TestMove/into_container_existing_map.exp.json
index 2bcdcceb3..6106713d1 100644
--- a/testdata/d2oracle/TestMove/into_container_existing_map.exp.json
+++ b/testdata/d2oracle/TestMove/into_container_existing_map.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/into_container_nonexisting_map.exp.json b/testdata/d2oracle/TestMove/into_container_nonexisting_map.exp.json
index 8da127472..9504ca2c5 100644
--- a/testdata/d2oracle/TestMove/into_container_nonexisting_map.exp.json
+++ b/testdata/d2oracle/TestMove/into_container_nonexisting_map.exp.json
@@ -74,7 +74,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/into_container_with_flat_keys.exp.json b/testdata/d2oracle/TestMove/into_container_with_flat_keys.exp.json
index 535ea6fbc..7b9397ffb 100644
--- a/testdata/d2oracle/TestMove/into_container_with_flat_keys.exp.json
+++ b/testdata/d2oracle/TestMove/into_container_with_flat_keys.exp.json
@@ -208,7 +208,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/into_container_with_flat_style.exp.json b/testdata/d2oracle/TestMove/into_container_with_flat_style.exp.json
index 3b0580222..1db5479ac 100644
--- a/testdata/d2oracle/TestMove/into_container_with_flat_style.exp.json
+++ b/testdata/d2oracle/TestMove/into_container_with_flat_style.exp.json
@@ -114,7 +114,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/map_transplant.exp.json b/testdata/d2oracle/TestMove/map_transplant.exp.json
index 2dfdfcef2..026cd6b82 100644
--- a/testdata/d2oracle/TestMove/map_transplant.exp.json
+++ b/testdata/d2oracle/TestMove/map_transplant.exp.json
@@ -217,7 +217,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/map_with_label.exp.json b/testdata/d2oracle/TestMove/map_with_label.exp.json
index 7c638b4cf..874bd3ac4 100644
--- a/testdata/d2oracle/TestMove/map_with_label.exp.json
+++ b/testdata/d2oracle/TestMove/map_with_label.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/merge_nested_maps.exp.json b/testdata/d2oracle/TestMove/merge_nested_maps.exp.json
index e61475162..afb377ea3 100644
--- a/testdata/d2oracle/TestMove/merge_nested_maps.exp.json
+++ b/testdata/d2oracle/TestMove/merge_nested_maps.exp.json
@@ -268,7 +268,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/merge_reserved.exp.json b/testdata/d2oracle/TestMove/merge_reserved.exp.json
index 497504e15..74ad308c4 100644
--- a/testdata/d2oracle/TestMove/merge_reserved.exp.json
+++ b/testdata/d2oracle/TestMove/merge_reserved.exp.json
@@ -259,7 +259,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/middle_container.exp.json b/testdata/d2oracle/TestMove/middle_container.exp.json
index 2aee2b778..f7c71bf8b 100644
--- a/testdata/d2oracle/TestMove/middle_container.exp.json
+++ b/testdata/d2oracle/TestMove/middle_container.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/move_container_children.exp.json b/testdata/d2oracle/TestMove/move_container_children.exp.json
index 483b780b7..14991f3c6 100644
--- a/testdata/d2oracle/TestMove/move_container_children.exp.json
+++ b/testdata/d2oracle/TestMove/move_container_children.exp.json
@@ -143,7 +143,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/move_container_conflict_children.exp.json b/testdata/d2oracle/TestMove/move_container_conflict_children.exp.json
index 88840490c..62d7d566d 100644
--- a/testdata/d2oracle/TestMove/move_container_conflict_children.exp.json
+++ b/testdata/d2oracle/TestMove/move_container_conflict_children.exp.json
@@ -143,7 +143,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/move_into_key_with_value.exp.json b/testdata/d2oracle/TestMove/move_into_key_with_value.exp.json
index 06e491df4..2206eb218 100644
--- a/testdata/d2oracle/TestMove/move_into_key_with_value.exp.json
+++ b/testdata/d2oracle/TestMove/move_into_key_with_value.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/move_out_of_edge.exp.json b/testdata/d2oracle/TestMove/move_out_of_edge.exp.json
index 5196fafa3..568f1b95e 100644
--- a/testdata/d2oracle/TestMove/move_out_of_edge.exp.json
+++ b/testdata/d2oracle/TestMove/move_out_of_edge.exp.json
@@ -124,7 +124,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/move_out_of_nested_edge.exp.json b/testdata/d2oracle/TestMove/move_out_of_nested_edge.exp.json
index 2e5090d4d..8afc1fa12 100644
--- a/testdata/d2oracle/TestMove/move_out_of_nested_edge.exp.json
+++ b/testdata/d2oracle/TestMove/move_out_of_nested_edge.exp.json
@@ -164,7 +164,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/multiple_nesting_levels.exp.json b/testdata/d2oracle/TestMove/multiple_nesting_levels.exp.json
index 8d9ea039a..e3d7b449b 100644
--- a/testdata/d2oracle/TestMove/multiple_nesting_levels.exp.json
+++ b/testdata/d2oracle/TestMove/multiple_nesting_levels.exp.json
@@ -279,7 +279,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/near.exp.json b/testdata/d2oracle/TestMove/near.exp.json
index d69837e24..22f5cb6a0 100644
--- a/testdata/d2oracle/TestMove/near.exp.json
+++ b/testdata/d2oracle/TestMove/near.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/nhooyr_one.exp.json b/testdata/d2oracle/TestMove/nhooyr_one.exp.json
index 307eeb798..6496dca5f 100644
--- a/testdata/d2oracle/TestMove/nhooyr_one.exp.json
+++ b/testdata/d2oracle/TestMove/nhooyr_one.exp.json
@@ -126,7 +126,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/nhooyr_two.exp.json b/testdata/d2oracle/TestMove/nhooyr_two.exp.json
index d7a17574a..8395a5288 100644
--- a/testdata/d2oracle/TestMove/nhooyr_two.exp.json
+++ b/testdata/d2oracle/TestMove/nhooyr_two.exp.json
@@ -172,7 +172,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/parentheses.exp.json b/testdata/d2oracle/TestMove/parentheses.exp.json
index 44158a669..1909944ce 100644
--- a/testdata/d2oracle/TestMove/parentheses.exp.json
+++ b/testdata/d2oracle/TestMove/parentheses.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/partial_edge_slice.exp.json b/testdata/d2oracle/TestMove/partial_edge_slice.exp.json
index 355c01ed6..29f4abf3e 100644
--- a/testdata/d2oracle/TestMove/partial_edge_slice.exp.json
+++ b/testdata/d2oracle/TestMove/partial_edge_slice.exp.json
@@ -114,7 +114,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/partial_slice.exp.json b/testdata/d2oracle/TestMove/partial_slice.exp.json
index 58cb5c32b..81a1058ca 100644
--- a/testdata/d2oracle/TestMove/partial_slice.exp.json
+++ b/testdata/d2oracle/TestMove/partial_slice.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/rename_2.exp.json b/testdata/d2oracle/TestMove/rename_2.exp.json
index c052ae1da..eff3852be 100644
--- a/testdata/d2oracle/TestMove/rename_2.exp.json
+++ b/testdata/d2oracle/TestMove/rename_2.exp.json
@@ -143,7 +143,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/reuse_map.exp.json b/testdata/d2oracle/TestMove/reuse_map.exp.json
index 7a6eb2689..50b293097 100644
--- a/testdata/d2oracle/TestMove/reuse_map.exp.json
+++ b/testdata/d2oracle/TestMove/reuse_map.exp.json
@@ -160,7 +160,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/slice_style.exp.json b/testdata/d2oracle/TestMove/slice_style.exp.json
index b2ef47b10..9ffd58471 100644
--- a/testdata/d2oracle/TestMove/slice_style.exp.json
+++ b/testdata/d2oracle/TestMove/slice_style.exp.json
@@ -112,7 +112,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_children.exp.json b/testdata/d2oracle/TestMove/underscore_children.exp.json
index c141e7046..098443897 100644
--- a/testdata/d2oracle/TestMove/underscore_children.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_children.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_children.exp.json b/testdata/d2oracle/TestMove/underscore_edge_children.exp.json
index 46280a25e..74b9a8274 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_children.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_children.exp.json
@@ -131,7 +131,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_container_1.exp.json b/testdata/d2oracle/TestMove/underscore_edge_container_1.exp.json
index 982825bee..fe6fd0017 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_container_1.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_container_1.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_container_2.exp.json b/testdata/d2oracle/TestMove/underscore_edge_container_2.exp.json
index 167964c33..e0b504006 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_container_2.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_container_2.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_container_3.exp.json b/testdata/d2oracle/TestMove/underscore_edge_container_3.exp.json
index 35a0c0a69..c9e453cbd 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_container_3.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_container_3.exp.json
@@ -108,7 +108,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_container_4.exp.json b/testdata/d2oracle/TestMove/underscore_edge_container_4.exp.json
index 610afe991..7bff14144 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_container_4.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_container_4.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_container_5.exp.json b/testdata/d2oracle/TestMove/underscore_edge_container_5.exp.json
index f50dfc670..ae36d17fc 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_container_5.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_container_5.exp.json
@@ -130,7 +130,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_edge_split.exp.json b/testdata/d2oracle/TestMove/underscore_edge_split.exp.json
index 1d912aab6..2a3ead716 100644
--- a/testdata/d2oracle/TestMove/underscore_edge_split.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_edge_split.exp.json
@@ -160,7 +160,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_merge.exp.json b/testdata/d2oracle/TestMove/underscore_merge.exp.json
index 7d699eac1..5a7d1d4a6 100644
--- a/testdata/d2oracle/TestMove/underscore_merge.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_merge.exp.json
@@ -140,7 +140,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_split.exp.json b/testdata/d2oracle/TestMove/underscore_split.exp.json
index c9dad3e4c..445f3a9ea 100644
--- a/testdata/d2oracle/TestMove/underscore_split.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_split.exp.json
@@ -137,7 +137,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_split_out.exp.json b/testdata/d2oracle/TestMove/underscore_split_out.exp.json
index 6e89204ed..763a59857 100644
--- a/testdata/d2oracle/TestMove/underscore_split_out.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_split_out.exp.json
@@ -195,7 +195,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/underscore_transplant.exp.json b/testdata/d2oracle/TestMove/underscore_transplant.exp.json
index f06f8bd47..5462f5cad 100644
--- a/testdata/d2oracle/TestMove/underscore_transplant.exp.json
+++ b/testdata/d2oracle/TestMove/underscore_transplant.exp.json
@@ -97,7 +97,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/unique_name.exp.json b/testdata/d2oracle/TestMove/unique_name.exp.json
index e5f0dbc18..efc7feeab 100644
--- a/testdata/d2oracle/TestMove/unique_name.exp.json
+++ b/testdata/d2oracle/TestMove/unique_name.exp.json
@@ -154,7 +154,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestMove/unique_name_with_references.exp.json b/testdata/d2oracle/TestMove/unique_name_with_references.exp.json
index 24aeb29a3..bf733b6c5 100644
--- a/testdata/d2oracle/TestMove/unique_name_with_references.exp.json
+++ b/testdata/d2oracle/TestMove/unique_name_with_references.exp.json
@@ -177,7 +177,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/arrows.exp.json b/testdata/d2oracle/TestRename/arrows.exp.json
index e2236a134..11b83790c 100644
--- a/testdata/d2oracle/TestRename/arrows.exp.json
+++ b/testdata/d2oracle/TestRename/arrows.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/arrows_chain.exp.json b/testdata/d2oracle/TestRename/arrows_chain.exp.json
index 37376e04a..909269df5 100644
--- a/testdata/d2oracle/TestRename/arrows_chain.exp.json
+++ b/testdata/d2oracle/TestRename/arrows_chain.exp.json
@@ -142,7 +142,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/arrows_complex.exp.json b/testdata/d2oracle/TestRename/arrows_complex.exp.json
index 43a06a375..7123a5b99 100644
--- a/testdata/d2oracle/TestRename/arrows_complex.exp.json
+++ b/testdata/d2oracle/TestRename/arrows_complex.exp.json
@@ -122,7 +122,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/arrows_trim_common.exp.json b/testdata/d2oracle/TestRename/arrows_trim_common.exp.json
index 243ce9338..c53c4bf5a 100644
--- a/testdata/d2oracle/TestRename/arrows_trim_common.exp.json
+++ b/testdata/d2oracle/TestRename/arrows_trim_common.exp.json
@@ -158,7 +158,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/arrows_trim_common_2.exp.json b/testdata/d2oracle/TestRename/arrows_trim_common_2.exp.json
index aaaea826e..a43035864 100644
--- a/testdata/d2oracle/TestRename/arrows_trim_common_2.exp.json
+++ b/testdata/d2oracle/TestRename/arrows_trim_common_2.exp.json
@@ -208,7 +208,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/complex_edge_1.exp.json b/testdata/d2oracle/TestRename/complex_edge_1.exp.json
index fc9272f76..9e8fce60d 100644
--- a/testdata/d2oracle/TestRename/complex_edge_1.exp.json
+++ b/testdata/d2oracle/TestRename/complex_edge_1.exp.json
@@ -122,7 +122,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/complex_edge_2.exp.json b/testdata/d2oracle/TestRename/complex_edge_2.exp.json
index 7d2cf4dd4..6663f65c7 100644
--- a/testdata/d2oracle/TestRename/complex_edge_2.exp.json
+++ b/testdata/d2oracle/TestRename/complex_edge_2.exp.json
@@ -122,7 +122,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/conflict.exp.json b/testdata/d2oracle/TestRename/conflict.exp.json
index 92a32226c..26a5193cd 100644
--- a/testdata/d2oracle/TestRename/conflict.exp.json
+++ b/testdata/d2oracle/TestRename/conflict.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/conflict_2.exp.json b/testdata/d2oracle/TestRename/conflict_2.exp.json
index fc6062f57..7bd4f49e7 100644
--- a/testdata/d2oracle/TestRename/conflict_2.exp.json
+++ b/testdata/d2oracle/TestRename/conflict_2.exp.json
@@ -119,7 +119,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/conflict_with_dots.exp.json b/testdata/d2oracle/TestRename/conflict_with_dots.exp.json
index 598e4b322..fcdcc8f90 100644
--- a/testdata/d2oracle/TestRename/conflict_with_dots.exp.json
+++ b/testdata/d2oracle/TestRename/conflict_with_dots.exp.json
@@ -68,7 +68,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/container.exp.json b/testdata/d2oracle/TestRename/container.exp.json
index 9055f5f52..f8f86696a 100644
--- a/testdata/d2oracle/TestRename/container.exp.json
+++ b/testdata/d2oracle/TestRename/container.exp.json
@@ -747,7 +747,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/edges.exp.json b/testdata/d2oracle/TestRename/edges.exp.json
index b524a5a0f..7eb87ebf5 100644
--- a/testdata/d2oracle/TestRename/edges.exp.json
+++ b/testdata/d2oracle/TestRename/edges.exp.json
@@ -412,7 +412,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/flat.exp.json b/testdata/d2oracle/TestRename/flat.exp.json
index 735a9be7c..9604d5d48 100644
--- a/testdata/d2oracle/TestRename/flat.exp.json
+++ b/testdata/d2oracle/TestRename/flat.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/generated.exp.json b/testdata/d2oracle/TestRename/generated.exp.json
index ed1dd5bc8..ccd034632 100644
--- a/testdata/d2oracle/TestRename/generated.exp.json
+++ b/testdata/d2oracle/TestRename/generated.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/near.exp.json b/testdata/d2oracle/TestRename/near.exp.json
index 468a55bcb..3d3f435b0 100644
--- a/testdata/d2oracle/TestRename/near.exp.json
+++ b/testdata/d2oracle/TestRename/near.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestRename/nested.exp.json b/testdata/d2oracle/TestRename/nested.exp.json
index ffdbdf361..8b893c155 100644
--- a/testdata/d2oracle/TestRename/nested.exp.json
+++ b/testdata/d2oracle/TestRename/nested.exp.json
@@ -174,7 +174,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/base.exp.json b/testdata/d2oracle/TestSet/base.exp.json
index f6ead5ddf..b2fc3f942 100644
--- a/testdata/d2oracle/TestSet/base.exp.json
+++ b/testdata/d2oracle/TestSet/base.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/block_string_multiline.exp.json b/testdata/d2oracle/TestSet/block_string_multiline.exp.json
index 3497d77be..a0042c58a 100644
--- a/testdata/d2oracle/TestSet/block_string_multiline.exp.json
+++ b/testdata/d2oracle/TestSet/block_string_multiline.exp.json
@@ -52,7 +52,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/block_string_oneline.exp.json b/testdata/d2oracle/TestSet/block_string_oneline.exp.json
index c9fd8d420..1bb1f2631 100644
--- a/testdata/d2oracle/TestSet/block_string_oneline.exp.json
+++ b/testdata/d2oracle/TestSet/block_string_oneline.exp.json
@@ -52,7 +52,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge.exp.json b/testdata/d2oracle/TestSet/edge.exp.json
index c6acc755f..5f7d6d9a8 100644
--- a/testdata/d2oracle/TestSet/edge.exp.json
+++ b/testdata/d2oracle/TestSet/edge.exp.json
@@ -78,7 +78,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_append_style.exp.json b/testdata/d2oracle/TestSet/edge_append_style.exp.json
index 0cf99c1aa..a59eccaa6 100644
--- a/testdata/d2oracle/TestSet/edge_append_style.exp.json
+++ b/testdata/d2oracle/TestSet/edge_append_style.exp.json
@@ -113,7 +113,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_chain.exp.json b/testdata/d2oracle/TestSet/edge_chain.exp.json
index 8c9430464..150e5d3e1 100644
--- a/testdata/d2oracle/TestSet/edge_chain.exp.json
+++ b/testdata/d2oracle/TestSet/edge_chain.exp.json
@@ -205,7 +205,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_chain_append_style.exp.json b/testdata/d2oracle/TestSet/edge_chain_append_style.exp.json
index 2e41bd6b2..55e9f9542 100644
--- a/testdata/d2oracle/TestSet/edge_chain_append_style.exp.json
+++ b/testdata/d2oracle/TestSet/edge_chain_append_style.exp.json
@@ -188,7 +188,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_chain_existing_style.exp.json b/testdata/d2oracle/TestSet/edge_chain_existing_style.exp.json
index 77c751a10..661931c40 100644
--- a/testdata/d2oracle/TestSet/edge_chain_existing_style.exp.json
+++ b/testdata/d2oracle/TestSet/edge_chain_existing_style.exp.json
@@ -272,7 +272,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_chain_nested_set.exp.json b/testdata/d2oracle/TestSet/edge_chain_nested_set.exp.json
index 90ce482f8..3739c5940 100644
--- a/testdata/d2oracle/TestSet/edge_chain_nested_set.exp.json
+++ b/testdata/d2oracle/TestSet/edge_chain_nested_set.exp.json
@@ -228,7 +228,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_index_case.exp.json b/testdata/d2oracle/TestSet/edge_index_case.exp.json
index d47dc4a92..0dd4a0e64 100644
--- a/testdata/d2oracle/TestSet/edge_index_case.exp.json
+++ b/testdata/d2oracle/TestSet/edge_index_case.exp.json
@@ -182,7 +182,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_index_nested.exp.json b/testdata/d2oracle/TestSet/edge_index_nested.exp.json
index 5ce61a00c..99b0c651a 100644
--- a/testdata/d2oracle/TestSet/edge_index_nested.exp.json
+++ b/testdata/d2oracle/TestSet/edge_index_nested.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_key_and_key.exp.json b/testdata/d2oracle/TestSet/edge_key_and_key.exp.json
index 1da0ca7bb..49d8a3bff 100644
--- a/testdata/d2oracle/TestSet/edge_key_and_key.exp.json
+++ b/testdata/d2oracle/TestSet/edge_key_and_key.exp.json
@@ -158,7 +158,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_label.exp.json b/testdata/d2oracle/TestSet/edge_label.exp.json
index 0ce45709e..718bed638 100644
--- a/testdata/d2oracle/TestSet/edge_label.exp.json
+++ b/testdata/d2oracle/TestSet/edge_label.exp.json
@@ -123,7 +123,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_merge_style.exp.json b/testdata/d2oracle/TestSet/edge_merge_style.exp.json
index 7222d5ef3..8b661fb5b 100644
--- a/testdata/d2oracle/TestSet/edge_merge_style.exp.json
+++ b/testdata/d2oracle/TestSet/edge_merge_style.exp.json
@@ -160,7 +160,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_nested_label_set.exp.json b/testdata/d2oracle/TestSet/edge_nested_label_set.exp.json
index 8210f4295..b0c572d2d 100644
--- a/testdata/d2oracle/TestSet/edge_nested_label_set.exp.json
+++ b/testdata/d2oracle/TestSet/edge_nested_label_set.exp.json
@@ -107,7 +107,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/edge_nested_style_set.exp.json b/testdata/d2oracle/TestSet/edge_nested_style_set.exp.json
index f8fbfaf1a..b396c8f5a 100644
--- a/testdata/d2oracle/TestSet/edge_nested_style_set.exp.json
+++ b/testdata/d2oracle/TestSet/edge_nested_style_set.exp.json
@@ -153,7 +153,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/expanded_map_style.exp.json b/testdata/d2oracle/TestSet/expanded_map_style.exp.json
index 7026f7701..c14ffc6d6 100644
--- a/testdata/d2oracle/TestSet/expanded_map_style.exp.json
+++ b/testdata/d2oracle/TestSet/expanded_map_style.exp.json
@@ -109,7 +109,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/icon.exp.json b/testdata/d2oracle/TestSet/icon.exp.json
index 89ffd1120..ae29aceed 100644
--- a/testdata/d2oracle/TestSet/icon.exp.json
+++ b/testdata/d2oracle/TestSet/icon.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/inline_style.exp.json b/testdata/d2oracle/TestSet/inline_style.exp.json
index e2214dceb..cf904977b 100644
--- a/testdata/d2oracle/TestSet/inline_style.exp.json
+++ b/testdata/d2oracle/TestSet/inline_style.exp.json
@@ -135,7 +135,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/label.exp.json b/testdata/d2oracle/TestSet/label.exp.json
index 8a80da3cb..133aed678 100644
--- a/testdata/d2oracle/TestSet/label.exp.json
+++ b/testdata/d2oracle/TestSet/label.exp.json
@@ -55,7 +55,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/label_primary.exp.json b/testdata/d2oracle/TestSet/label_primary.exp.json
index 11bd7373d..e78830f47 100644
--- a/testdata/d2oracle/TestSet/label_primary.exp.json
+++ b/testdata/d2oracle/TestSet/label_primary.exp.json
@@ -103,7 +103,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/label_replace.exp.json b/testdata/d2oracle/TestSet/label_replace.exp.json
index 5d3443eaa..d890f349a 100644
--- a/testdata/d2oracle/TestSet/label_replace.exp.json
+++ b/testdata/d2oracle/TestSet/label_replace.exp.json
@@ -55,7 +55,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/label_unset.exp.json b/testdata/d2oracle/TestSet/label_unset.exp.json
index cb6e19857..6313386e0 100644
--- a/testdata/d2oracle/TestSet/label_unset.exp.json
+++ b/testdata/d2oracle/TestSet/label_unset.exp.json
@@ -45,7 +45,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/map_key_missing.exp.json b/testdata/d2oracle/TestSet/map_key_missing.exp.json
index 05c4c758c..296b0b694 100644
--- a/testdata/d2oracle/TestSet/map_key_missing.exp.json
+++ b/testdata/d2oracle/TestSet/map_key_missing.exp.json
@@ -101,7 +101,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/nested_alex.exp.json b/testdata/d2oracle/TestSet/nested_alex.exp.json
index 86ea005a3..254cd61ca 100644
--- a/testdata/d2oracle/TestSet/nested_alex.exp.json
+++ b/testdata/d2oracle/TestSet/nested_alex.exp.json
@@ -173,7 +173,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/new_style.exp.json b/testdata/d2oracle/TestSet/new_style.exp.json
index 9e3704448..5f57e5434 100644
--- a/testdata/d2oracle/TestSet/new_style.exp.json
+++ b/testdata/d2oracle/TestSet/new_style.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/replace_shape.exp.json b/testdata/d2oracle/TestSet/replace_shape.exp.json
index 3c9d955bb..3ee2de804 100644
--- a/testdata/d2oracle/TestSet/replace_shape.exp.json
+++ b/testdata/d2oracle/TestSet/replace_shape.exp.json
@@ -66,7 +66,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/replace_style.exp.json b/testdata/d2oracle/TestSet/replace_style.exp.json
index 732a11fe0..7a5a342ad 100644
--- a/testdata/d2oracle/TestSet/replace_style.exp.json
+++ b/testdata/d2oracle/TestSet/replace_style.exp.json
@@ -73,7 +73,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/replace_style_edgecase.exp.json b/testdata/d2oracle/TestSet/replace_style_edgecase.exp.json
index 2aa698d3b..e7523a02b 100644
--- a/testdata/d2oracle/TestSet/replace_style_edgecase.exp.json
+++ b/testdata/d2oracle/TestSet/replace_style_edgecase.exp.json
@@ -128,7 +128,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/shape.exp.json b/testdata/d2oracle/TestSet/shape.exp.json
index 2a30d8286..1a0a55148 100644
--- a/testdata/d2oracle/TestSet/shape.exp.json
+++ b/testdata/d2oracle/TestSet/shape.exp.json
@@ -84,7 +84,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
diff --git a/testdata/d2oracle/TestSet/shape_nested_style_set.exp.json b/testdata/d2oracle/TestSet/shape_nested_style_set.exp.json
index ca8f2895e..ca6b313a2 100644
--- a/testdata/d2oracle/TestSet/shape_nested_style_set.exp.json
+++ b/testdata/d2oracle/TestSet/shape_nested_style_set.exp.json
@@ -91,7 +91,7 @@
           "value": ""
         },
         "direction": {
-          "value": ""
+          "value": "down"
         }
       }
     },
