You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by xi...@apache.org on 2025/10/27 21:27:25 UTC
svn commit: r1929382 - tinkerpop/site/docs/3.8.0-SNAPSHOT/upgrade
Author: xiazcy
Date: Mon Oct 27 21:27:25 2025
New Revision: 1929382
Log:
Update 3.8.0-SNAPSHOT upgrade docs
Modified:
tinkerpop/site/docs/3.8.0-SNAPSHOT/upgrade/index.html
Modified: tinkerpop/site/docs/3.8.0-SNAPSHOT/upgrade/index.html
==============================================================================
--- tinkerpop/site/docs/3.8.0-SNAPSHOT/upgrade/index.html Mon Oct 27 20:29:11 2025 (r1929381)
+++ tinkerpop/site/docs/3.8.0-SNAPSHOT/upgrade/index.html Mon Oct 27 21:27:25 2025 (r1929382)
@@ -820,22 +820,71 @@ table.CodeRay td.code{padding:0 0 0 .75e
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel0">
<li><a href="#_tinkerpop_upgrade_information">TinkerPop Upgrade Information</a></li>
-<li><a href="#_tinkerpop_3_7_0">TinkerPop 3.7.0</a>
+<li><a href="#_tinkerpop_3_8_0">TinkerPop 3.8.0</a>
<ul class="sectlevel1">
-<li><a href="#_tinkerpop_3_7_5">TinkerPop 3.7.5</a>
+<li><a href="#_tinkerpop_3_8_0_2">TinkerPop 3.8.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users">Upgrading for Users</a></li>
+<li><a href="#_upgrading_for_users">Upgrading for Users</a>
+<ul class="sectlevel3">
+<li><a href="#_gremlin_mcp_server">Gremlin MCP Server</a></li>
+<li><a href="#_air_routes_dataset">Air Routes Dataset</a></li>
+<li><a href="#_type_predicate">Type Predicate</a></li>
+<li><a href="#_number_conversion_step">Number Conversion Step</a></li>
+<li><a href="#_boolean_conversion_step">Boolean Conversion Step</a></li>
+<li><a href="#_none_and_discard">none() and discard()</a></li>
+<li><a href="#_prevented_using_cap_inside_repeat">Prevented using cap() inside repeat()</a></li>
+<li><a href="#_simplified_comparability_semantics">Simplified Comparability Semantics</a></li>
+<li><a href="#_set_minimum_java_version_to_11">Set minimum Java version to 11</a></li>
+<li><a href="#_auto_promotion_of_numbers">Auto-promotion of Numbers</a></li>
+<li><a href="#_prefer_offsetdatetime">Prefer OffsetDateTime</a></li>
+<li><a href="#_simplify_g_construction">Simplify g Construction</a></li>
+<li><a href="#_split_on_empty_string">split() on Empty String</a></li>
+<li><a href="#_asstring_no_longer_allow_nulls">asString() No Longer Allow Nulls</a></li>
+<li><a href="#_removal_of_haskey_traversal">Removal of has(key, traversal)</a></li>
+<li><a href="#_serialization_changes">Serialization Changes</a></li>
+<li><a href="#_removal_of_p_getoriginalvalue">Removal of P.getOriginalValue()</a></li>
+<li><a href="#_gremlin_grammar_changes">Gremlin Grammar Changes</a></li>
+<li><a href="#_seedstrategy_construction">SeedStrategy Construction</a></li>
+<li><a href="#_improved_translators">Improved Translators</a></li>
+<li><a href="#_deprecated_unifiedchannelizer">Deprecated UnifiedChannelizer</a></li>
+<li><a href="#_optionsstrategy_in_python">OptionsStrategy in Python</a></li>
+<li><a href="#_choose_semantics">choose() Semantics</a></li>
+<li><a href="#_float_defaults_to_double">Float Defaults to Double</a></li>
+<li><a href="#_consistent_output_for_range_limit_tail">Consistent Output for range(), limit(), tail()</a></li>
+<li><a href="#_group_value_traversal_semantics">group() Value Traversal Semantics</a></li>
+<li><a href="#_by_modulation_semantics">By Modulation Semantics</a></li>
+<li><a href="#_remove_undocumented_with_modulation">Remove Undocumented <code>with()</code> modulation</a></li>
+<li><a href="#_stricter_repeatunrollstrategy">Stricter RepeatUnrollStrategy</a></li>
+<li><a href="#_modified_limit_skip_range_semantics_in_repeat">Modified limit() skip() range() Semantics in repeat()</a></li>
+</ul>
+</li>
<li><a href="#_upgrading_for_providers">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_system_providers">Graph System Providers</a></li>
+<li><a href="#_type_predicate_2">Type Predicate</a></li>
<li><a href="#_graph_driver_providers">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
</li>
+</ul>
+</li>
+<li><a href="#_tinkerpop_3_7_0">TinkerPop 3.7.0</a>
+<ul class="sectlevel1">
+<li><a href="#_tinkerpop_3_7_5">TinkerPop 3.7.5</a>
+<ul class="sectlevel2">
+<li><a href="#_upgrading_for_users_2">Upgrading for Users</a></li>
+<li><a href="#_upgrading_for_providers_2">Upgrading for Providers</a>
+<ul class="sectlevel3">
+<li><a href="#_graph_system_providers_2">Graph System Providers</a></li>
+<li><a href="#_graph_driver_providers_2">Graph Driver Providers</a></li>
+</ul>
+</li>
+</ul>
+</li>
<li><a href="#_tinkerpop_3_7_4">TinkerPop 3.7.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_2">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_3">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_improved_server_memory_management">Improved Server Memory Management</a></li>
<li><a href="#_channel_metrics">Channel Metrics</a></li>
@@ -846,7 +895,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_7_3">TinkerPop 3.7.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_3">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_4">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_graphbinary_compatibility">GraphBinary Compatibility</a></li>
</ul>
@@ -856,23 +905,23 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_7_2">TinkerPop 3.7.2</a></li>
<li><a href="#_tinkerpop_3_7_1">TinkerPop 3.7.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_4">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_5">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_string_manipulation_steps">String Manipulation Steps</a></li>
<li><a href="#_list_manipulation_steps">List Manipulation Steps</a></li>
<li><a href="#_date_manipulation_steps">Date Manipulation Steps</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_2">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_3">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_2">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_3">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_7_0_2">TinkerPop 3.7.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_5">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_6">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_string_concat_step">String concat() Step</a></li>
<li><a href="#_union_start_step">union() Start Step</a></li>
@@ -887,10 +936,10 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_building_and_running_with_jdk_17">Building and Running with JDK 17</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_3">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_4">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_driver_providers_2">Graph Driver Providers</a></li>
-<li><a href="#_graph_system_providers_3">Graph System Providers</a></li>
+<li><a href="#_graph_driver_providers_3">Graph Driver Providers</a></li>
+<li><a href="#_graph_system_providers_4">Graph System Providers</a></li>
</ul>
</li>
</ul>
@@ -901,7 +950,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<ul class="sectlevel1">
<li><a href="#_tinkerpop_3_6_8">TinkerPop 3.6.8</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_6">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_7">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_runtime_updates">Runtime Updates</a></li>
</ul>
@@ -910,7 +959,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_6_7">TinkerPop 3.6.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_7">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_8">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_runtime_version_upgrades">Runtime Version Upgrades</a></li>
<li><a href="#_gremlin_net_fixed_a_bug_in_traversal_enumeration_on_net_8">Gremlin.Net: Fixed a bug in traversal enumeration on .NET 8</a></li>
@@ -920,12 +969,12 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_6_6">TinkerPop 3.6.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_providers_4">Upgrading for Providers</a></li>
+<li><a href="#_upgrading_for_providers_5">Upgrading for Providers</a></li>
</ul>
</li>
<li><a href="#_tinkerpop_3_6_5">TinkerPop 3.6.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_8">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_9">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_http_plain_text">HTTP Plain Text</a></li>
<li><a href="#_untyped_graphson">Untyped GraphSON</a></li>
@@ -936,35 +985,35 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_6_4">TinkerPop 3.6.4</a></li>
<li><a href="#_tinkerpop_3_6_3">TinkerPop 3.6.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_9">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_10">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_deprecation_warning_for_go_1_17">Deprecation Warning for Go 1.17</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_5">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_6">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_4">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_5">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_6_2">TinkerPop 3.6.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_10">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_11">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_changes_to_mergeve_semantics">Changes to mergeV/E semantics</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_6">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_7">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_5">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_6">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_6_1">TinkerPop 3.6.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_11">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_12">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_graphbinary_default_serialization">GraphBinary Default Serialization</a></li>
</ul>
@@ -973,7 +1022,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_6_0_2">TinkerPop 3.6.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_12">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_13">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_element_step">element() Step</a></li>
<li><a href="#_mergev_and_mergee">mergeV() and mergeE()</a></li>
@@ -993,9 +1042,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_property_with_map"><code>property()</code> with Map</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_7">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_8">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_6">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_7">Graph System Providers</a></li>
</ul>
</li>
</ul>
@@ -1007,7 +1056,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_5_8">TinkerPop 3.5.8</a></li>
<li><a href="#_tinkerpop_3_5_7">TinkerPop 3.5.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_13">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_14">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_runtime_version_upgrades_2">Runtime Version Upgrades</a></li>
<li><a href="#_graphson_max_token_lengths">GraphSON max token lengths</a></li>
@@ -1018,23 +1067,23 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_6">TinkerPop 3.5.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_14">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_15">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_deprecation_warning_for_node_10_and_go_1_17">Deprecation Warning for Node 10 and Go 1.17</a></li>
<li><a href="#_arm64_support_for_gremlin_server_docker_image">ARM64 Support for Gremlin Server Docker Image</a></li>
<li><a href="#_performance_improvements">Performance Improvements</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_8">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_9">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_7">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_8">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_5_5">TinkerPop 3.5.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_15">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_16">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_net_add_logging">Gremlin.NET: Add logging</a></li>
<li><a href="#_gremlin_driver_host_availability">gremlin-driver Host Availability</a></li>
@@ -1046,7 +1095,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_4">TinkerPop 3.5.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_16">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_17">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_sparkioutil_utility">SparkIOUtil utility</a></li>
<li><a href="#_gremlin_go">Gremlin-Go</a></li>
@@ -1058,7 +1107,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_3">TinkerPop 3.5.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_17">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_18">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_net_websocket_compression_support">.NET WebSocket Compression Support</a></li>
<li><a href="#_net_translator_to_groovy">.NET: Translator to Groovy</a></li>
@@ -1068,7 +1117,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_2">TinkerPop 3.5.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_18">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_19">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_tx_in_net_and_python">Tx() in .NET and Python</a></li>
<li><a href="#_datetime">datetime()</a></li>
@@ -1082,7 +1131,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_1">TinkerPop 3.5.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_19">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_20">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_tx_in_javascript">tx() in Javascript</a></li>
<li><a href="#_gremlint_library">Gremlint Library</a></li>
@@ -1093,7 +1142,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_5_0_2">TinkerPop 3.5.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_20">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_21">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_host_language_runtimes">Host Language Runtimes</a></li>
<li><a href="#_gremlint">Gremlint</a></li>
@@ -1115,10 +1164,10 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_deprecation_removal">Deprecation Removal</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_9">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_10">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_8">Graph System Providers</a></li>
-<li><a href="#_graph_driver_providers_3">Graph Driver Providers</a></li>
+<li><a href="#_graph_system_providers_9">Graph System Providers</a></li>
+<li><a href="#_graph_driver_providers_4">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
@@ -1131,7 +1180,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_4_12">TinkerPop 3.4.12</a></li>
<li><a href="#_tinkerpop_3_4_11">TinkerPop 3.4.11</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_21">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_22">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_barrier_control">barrier() Control</a></li>
</ul>
@@ -1140,7 +1189,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_10">TinkerPop 3.4.10</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_22">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_23">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_python_timeout_issue">Python Timeout Issue</a></li>
</ul>
@@ -1149,7 +1198,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_9">TinkerPop 3.4.9</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_23">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_24">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_translator_implementations">Translator Implementations</a></li>
<li><a href="#_bytecode_command_improvements">Bytecode Command Improvements</a></li>
@@ -1163,16 +1212,16 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_lambdas_in_gremlin_javascript">Lambdas in gremlin-javascript</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_10">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_11">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_9">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_10">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_4_8">TinkerPop 3.4.8</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_24">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_25">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_net_automatic_reconnect">Gremlin.NET: Automatic Reconnect</a></li>
</ul>
@@ -1181,7 +1230,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_7">TinkerPop 3.4.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_25">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_26">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_clear_screen_command">Clear Screen Command</a></li>
</ul>
@@ -1190,7 +1239,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_6">TinkerPop 3.4.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_26">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_27">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_drop_properties">drop() Properties</a></li>
</ul>
@@ -1199,23 +1248,23 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_5">TinkerPop 3.4.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_27">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_28">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_bystring_modulator">by(String) Modulator</a></li>
<li><a href="#_haskey_step_and_hasvalue_step">hasKey() Step and hasValue() Step</a></li>
<li><a href="#_properties_equality">Properties Equality</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_11">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_12">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_driver_providers_4">Graph Driver Providers</a></li>
+<li><a href="#_graph_driver_providers_5">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_4_4">TinkerPop 3.4.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_28">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_29">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_python_graphbinary">Python GraphBinary</a></li>
<li><a href="#_elementmap_step">elementMap() Step</a></li>
@@ -1225,43 +1274,43 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_3">TinkerPop 3.4.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_29">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_30">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_deprecated_store">Deprecated store()</a></li>
<li><a href="#_deprecate_gryo_in_gremlin_server">Deprecate Gryo in Gremlin Server</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_12">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_13">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_driver_providers_5">Graph Driver Providers</a></li>
+<li><a href="#_graph_driver_providers_6">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_4_2">TinkerPop 3.4.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_30">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_31">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_per_request_options_2">Per Request Options</a></li>
<li><a href="#_gremlin_console_timeout">Gremlin Console Timeout</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_13">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_14">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_10">Graph System Providers</a></li>
-<li><a href="#_graph_driver_providers_6">Graph Driver Providers</a></li>
+<li><a href="#_graph_system_providers_11">Graph System Providers</a></li>
+<li><a href="#_graph_driver_providers_7">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_4_1">TinkerPop 3.4.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_31">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_32">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_mix_sparql_and_gremlin">Mix SPARQL and Gremlin</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_14">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_15">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers">Graph Database Providers</a></li>
</ul>
@@ -1270,7 +1319,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_4_0_2">TinkerPop 3.4.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_32">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_33">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_sparql_gremlin">sparql-gremlin</a></li>
<li><a href="#_gremlin_net_driver_improvements">Gremlin.NET Driver Improvements</a></li>
@@ -1297,10 +1346,10 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_deprecation_and_removal">Deprecation and Removal</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_15">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_16">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_2">Graph Database Providers</a></li>
-<li><a href="#_graph_driver_providers_7">Graph Driver Providers</a></li>
+<li><a href="#_graph_driver_providers_8">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
@@ -1311,13 +1360,13 @@ table.CodeRay td.code{padding:0 0 0 .75e
<ul class="sectlevel1">
<li><a href="#_tinkerpop_3_3_11">TinkerPop 3.3.11</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_33">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_34">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_glv_sessions">GLV Sessions</a></li>
<li><a href="#_deprecate_maxwaitforsessionclose">Deprecate maxWaitForSessionClose</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_16">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_17">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_driver_providers">Gremlin Driver Providers</a></li>
</ul>
@@ -1326,7 +1375,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_10">TinkerPop 3.3.10</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_34">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_35">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_traversal_clone">Traversal Clone</a></li>
<li><a href="#_deprecated_jython_support">Deprecated Jython Support</a></li>
@@ -1336,7 +1385,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_9">TinkerPop 3.3.9</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_35">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_36">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_reservedkeysverificationstrategy">ReservedKeysVerificationStrategy</a></li>
<li><a href="#_javascript_responseerror">Javascript ResponseError</a></li>
@@ -1348,7 +1397,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_8">TinkerPop 3.3.8</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_36">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_37">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_branch_steps_accept_predicates_and_traversals">Branch Steps Accept Predicates and Traversals</a></li>
<li><a href="#_python_datetime">Python DateTime</a></li>
@@ -1362,14 +1411,14 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_7">TinkerPop 3.3.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_37">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_38">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_javascript_dsl_pattern">JavaScript DSL Pattern</a></li>
<li><a href="#_gremlin_console_interrupt">Gremlin Console Interrupt</a></li>
<li><a href="#_removed_gperfutils_dependency">Removed gperfutils Dependency</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_17">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_18">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_3">Graph Database Providers</a></li>
</ul>
@@ -1378,7 +1427,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_6">TinkerPop 3.3.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_38">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_39">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_anti_patterns_documentation">Anti-Patterns Documentation</a></li>
</ul>
@@ -1387,7 +1436,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_5">TinkerPop 3.3.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_39">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_40">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_anonymoustraversalsource">AnonymousTraversalSource</a></li>
<li><a href="#_bytecode_command">Bytecode Command</a></li>
@@ -1395,7 +1444,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_rangestep_optimizing_strategy">RangeStep Optimizing Strategy</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_18">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_19">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_4">Graph Database Providers</a></li>
</ul>
@@ -1404,7 +1453,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_4">TinkerPop 3.3.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_40">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_41">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_introducing_order_asc_and_order_desc">Introducing Order.asc and Order.desc</a></li>
<li><a href="#_timedinterrupt">TimedInterrupt</a></li>
@@ -1414,7 +1463,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_3">TinkerPop 3.3.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_41">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_42">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_credential_dsl_changes">Credential DSL Changes</a></li>
</ul>
@@ -1423,7 +1472,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_2">TinkerPop 3.3.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_42">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_43">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_python_sets">Gremlin Python Sets</a></li>
</ul>
@@ -1432,7 +1481,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_1">TinkerPop 3.3.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_43">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_44">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_python_path">Gremlin Python path()</a></li>
<li><a href="#_added_math_step_for_scientific_traversal_computing">Added <code>math()</code>-step for Scientific Traversal Computing</a></li>
@@ -1443,7 +1492,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_upgrade_neo4j">Upgrade Neo4j</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_19">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_20">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_5">Graph Database Providers</a></li>
</ul>
@@ -1452,7 +1501,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_3_0_2">TinkerPop 3.3.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_44">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_45">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_packaged_data_files">Packaged Data Files</a></li>
<li><a href="#_graphtraversal_has_methods_re_organized">GraphTraversal Has-Methods Re-Organized</a></li>
@@ -1471,9 +1520,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_scriptinputformat">ScriptInputFormat</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_20">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_21">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_11">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_12">Graph System Providers</a></li>
<li><a href="#_graph_database_providers_6">Graph Database Providers</a></li>
<li><a href="#_driver_providers">Driver Providers</a></li>
</ul>
@@ -1487,7 +1536,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_2_11">TinkerPop 3.2.11</a></li>
<li><a href="#_tinkerpop_3_2_10">TinkerPop 3.2.10</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_45">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_46">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_sasl_in_gremlin_javascript">SASL in Gremlin-Javascript</a></li>
<li><a href="#_ssl_security">SSL Security</a></li>
@@ -1498,7 +1547,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_gremlin_javascript_script_submission">Gremlin Javascript Script Submission</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_21">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_22">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_7">Graph Database Providers</a></li>
</ul>
@@ -1507,7 +1556,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_9">TinkerPop 3.2.9</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_46">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_47">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_lambda_construction">Lambda Construction</a></li>
</ul>
@@ -1516,7 +1565,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_8">TinkerPop 3.2.8</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_47">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_48">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_improved_connection_monitoring">Improved Connection Monitoring</a></li>
<li><a href="#_gremlin_net_lambdas">Gremlin.Net Lambdas</a></li>
@@ -1524,16 +1573,16 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_gremlin_net_traversal_predicate_classes_merged">Gremlin.Net: Traversal Predicate Classes Merged</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_22">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_23">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_12">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_13">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_2_7">TinkerPop 3.2.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_48">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_49">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_python_core_types">Gremlin-Python Core Types</a></li>
<li><a href="#_eventstrategy_detachment">EventStrategy Detachment</a></li>
@@ -1546,7 +1595,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_mutationlistener_changes">MutationListener Changes</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_23">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_24">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_direction_both_requires_duplication_of_self_edges">Direction.BOTH Requires Duplication of Self-Edges</a></li>
</ul>
@@ -1555,13 +1604,13 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_6">TinkerPop 3.2.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_49">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_50">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_deprecated_usemapperfromgraph">Deprecated useMapperFromGraph</a></li>
<li><a href="#_wsandhttpchannelizer">WsAndHttpChannelizer</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_24">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_25">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_referencevertex_label">ReferenceVertex Label</a></li>
</ul>
@@ -1570,7 +1619,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_5">TinkerPop 3.2.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_50">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_51">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_dsl_support">DSL Support</a></li>
<li><a href="#_graphson_path_serialization">GraphSON Path Serialization</a></li>
@@ -1584,7 +1633,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_gremlin_python_driver">Gremlin-Python Driver</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_25">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_26">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_8">Graph Database Providers</a></li>
</ul>
@@ -1593,7 +1642,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_4">TinkerPop 3.2.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_51">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_52">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_tinkergraph_deserialization">TinkerGraph Deserialization</a></li>
<li><a href="#_traversal_promises">Traversal Promises</a></li>
@@ -1603,7 +1652,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_ssl_client_authentication">SSL Client Authentication</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_26">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_27">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_9">Graph Database Providers</a></li>
<li><a href="#_drivers_providers">Drivers Providers</a></li>
@@ -1613,7 +1662,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_3">TinkerPop 3.2.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_52">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_53">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_renamed_null_result_preference">Renamed Null Result Preference</a></li>
<li><a href="#_java_driver_keep_alive">Java Driver Keep-Alive</a></li>
@@ -1624,16 +1673,16 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_io_reference_documentation">IO Reference Documentation</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_27">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_28">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_13">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_14">Graph System Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_2_2">TinkerPop 3.2.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_53">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_54">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_graphson_2_0">GraphSON 2.0</a></li>
<li><a href="#_log4j_dependencies">Log4j Dependencies</a></li>
@@ -1642,9 +1691,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_rest_api_renamed_to_http_api">REST API Renamed to HTTP API</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_28">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_29">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_14">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_15">Graph System Providers</a></li>
<li><a href="#_drivers_providers_2">Drivers Providers</a></li>
</ul>
</li>
@@ -1652,7 +1701,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_1">TinkerPop 3.2.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_54">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_55">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gephi_plugin">Gephi Plugin</a></li>
<li><a href="#_gryomapper_construction">GryoMapper Construction</a></li>
@@ -1661,9 +1710,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_gremlin_console_flags">Gremlin Console Flags</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_29">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_30">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_15">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_16">Graph System Providers</a></li>
<li><a href="#_graph_database_providers_10">Graph Database Providers</a></li>
<li><a href="#_graph_language_providers">Graph Language Providers</a></li>
</ul>
@@ -1672,7 +1721,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_2_0_2">TinkerPop 3.2.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_55">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_56">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_hadoop_filesystem_variable">Hadoop FileSystem Variable</a></li>
<li><a href="#_hadoop_configurations">Hadoop Configurations</a></li>
@@ -1684,9 +1733,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_remotegraph">RemoteGraph</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_30">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_31">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_16">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_17">Graph System Providers</a></li>
<li><a href="#_graph_processor_providers">Graph Processor Providers</a></li>
<li><a href="#_graph_language_providers_2">Graph Language Providers</a></li>
</ul>
@@ -1700,7 +1749,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_tinkerpop_3_1_8">TinkerPop 3.1.8</a></li>
<li><a href="#_tinkerpop_3_1_7">TinkerPop 3.1.7</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_56">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_57">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_graphml_xslt">GraphML XSLT</a></li>
</ul>
@@ -1709,7 +1758,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_6">TinkerPop 3.1.6</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_providers_31">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_32">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_driver_providers_2">Driver Providers</a></li>
</ul>
@@ -1718,7 +1767,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_5">TinkerPop 3.1.5</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_57">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_58">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_java_driver_and_close">Java Driver and close()</a></li>
</ul>
@@ -1727,7 +1776,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_4">TinkerPop 3.1.4</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_58">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_59">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_server_workers">Gremlin Server Workers</a></li>
</ul>
@@ -1736,14 +1785,14 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_3">TinkerPop 3.1.3</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_59">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_60">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_reserved_gremlin_server_keys">Reserved Gremlin Server Keys</a></li>
<li><a href="#_remote_timeout">Remote Timeout</a></li>
<li><a href="#_gremlin_server_workers_2">Gremlin Server Workers</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_32">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_33">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_graph_database_providers_11">Graph Database Providers</a></li>
<li><a href="#_graph_language_providers_3">Graph Language Providers</a></li>
@@ -1754,7 +1803,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_2">TinkerPop 3.1.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_60">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_61">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_aliasing_sessions">Aliasing Sessions</a></li>
<li><a href="#_remote_console">Remote Console</a></li>
@@ -1764,10 +1813,10 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_session_timeout_setting">Session Timeout Setting</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_33">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_34">Upgrading for Providers</a>
<ul class="sectlevel3">
<li><a href="#_all_providers">All Providers</a></li>
-<li><a href="#_graph_system_providers_17">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_18">Graph System Providers</a></li>
<li><a href="#_driver_providers_4">Driver Providers</a></li>
<li><a href="#_plugin_providers">Plugin Providers</a></li>
</ul>
@@ -1776,7 +1825,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_1">TinkerPop 3.1.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_61">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_62">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_storage_io">Storage I/O</a></li>
<li><a href="#_gremlin_server_transaction_management">Gremlin Server Transaction Management</a></li>
@@ -1789,9 +1838,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_deprecated_supportsaddproperty">Deprecated supportsAddProperty()</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_34">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_35">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_18">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_19">Graph System Providers</a></li>
<li><a href="#_graph_database_providers_12">Graph Database Providers</a></li>
<li><a href="#_graph_processor_providers_2">Graph Processor Providers</a></li>
</ul>
@@ -1800,7 +1849,7 @@ table.CodeRay td.code{padding:0 0 0 .75e
</li>
<li><a href="#_tinkerpop_3_1_0_2">TinkerPop 3.1.0</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_62">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_63">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_shading_jackson">Shading Jackson</a></li>
<li><a href="#_partitionstrategy_and_vertexproperty">PartitionStrategy and VertexProperty</a></li>
@@ -1820,9 +1869,9 @@ table.CodeRay td.code{padding:0 0 0 .75e
<li><a href="#_aliasing_remotes_in_the_console">Aliasing Remotes in the Console</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_35">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_36">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_19">Graph System Providers</a></li>
+<li><a href="#_graph_system_providers_20">Graph System Providers</a></li>
<li><a href="#_driver_providers_5">Driver Providers</a></li>
</ul>
</li>
@@ -1834,32 +1883,32 @@ table.CodeRay td.code{padding:0 0 0 .75e
<ul class="sectlevel1">
<li><a href="#_tinkerpop_3_0_2">TinkerPop 3.0.2</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_63">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_64">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_bulkloadervertexprogram_blvp">BulkLoaderVertexProgram (BLVP)</a></li>
<li><a href="#_tinkergraph">TinkerGraph</a></li>
<li><a href="#_gremlin_driver_and_server">Gremlin Driver and Server</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_36">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_37">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_driver_providers_8">Graph Driver Providers</a></li>
+<li><a href="#_graph_driver_providers_9">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_tinkerpop_3_0_1">TinkerPop 3.0.1</a>
<ul class="sectlevel2">
-<li><a href="#_upgrading_for_users_64">Upgrading for Users</a>
+<li><a href="#_upgrading_for_users_65">Upgrading for Users</a>
<ul class="sectlevel3">
<li><a href="#_gremlin_server_2">Gremlin Server</a></li>
<li><a href="#_neo4j">Neo4j</a></li>
</ul>
</li>
-<li><a href="#_upgrading_for_providers_37">Upgrading for Providers</a>
+<li><a href="#_upgrading_for_providers_38">Upgrading for Providers</a>
<ul class="sectlevel3">
-<li><a href="#_graph_system_providers_20">Graph System Providers</a></li>
-<li><a href="#_graph_driver_providers_9">Graph Driver Providers</a></li>
+<li><a href="#_graph_system_providers_21">Graph System Providers</a></li>
+<li><a href="#_graph_driver_providers_10">Graph Driver Providers</a></li>
</ul>
</li>
</ul>
@@ -1898,6 +1947,1529 @@ equally useful to TinkerPop providers, w
TinkerPop exposes.
</div>
</div>
+<h1 id="_tinkerpop_3_8_0" class="sect0">TinkerPop 3.8.0</h1>
+<div class="openblock partintro">
+<div class="content">
+<div class="imageblock">
+<div class="content">
+<img src="../images/gremlin-67.png" alt="gremlin 67" width="185">
+</div>
+</div>
+<div class="paragraph">
+<p><strong>Grix Greven</strong></p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_tinkerpop_3_8_0_2">TinkerPop 3.8.0</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p><strong>Release Date: NOT OFFICIALLY RELEASED YET</strong></p>
+</div>
+<div class="paragraph">
+<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.8.0/CHANGELOG.asciidoc#release-3-8-0">changelog</a> for a
+complete list of all the modifications that are part of this release.</p>
+</div>
+<div class="sect2">
+<h3 id="_upgrading_for_users">Upgrading for Users</h3>
+<div class="sect3">
+<h4 id="_gremlin_mcp_server">Gremlin MCP Server</h4>
+<div class="paragraph">
+<p>Gremlin MCP Server is an experimental application that implements the <a href="https://modelcontextprotocol.io/">Model Context Protocol</a>
+(MCP) to expose Gremlin Server-backed graph operations to MCP-capable clients such as Claude Desktop, Cursor, or
+Windsurf. Through this integration, graph structure can be discovered, and Gremlin traversals can be executed. Basic
+health checks are included to validate connectivity.</p>
+</div>
+<div class="paragraph">
+<p>A running Gremlin Server that fronts the target TinkerPop graph is required. An MCP client can be configured to connect
+to the Gremlin MCP Server endpoint.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_air_routes_dataset">Air Routes Dataset</h4>
+<div class="paragraph">
+<p>The Air Routes sample dataset has long been used to help showcase and teach Gremlin. Popularized by the first edition
+of <a href="https://kelvinlawrence.net/book/PracticalGremlin.html">Practical Gremlin</a>, this dataset offers a real-world graph
+structure that allows for practical demonstration of virtually every feature that Gremlin syntax has to offer. While it
+was easy to simply get the dataset from the Practical Gremlin <a href="https://github.com/krlawrence/graph">repository</a>,
+including it with the TinkerPop distribution makes it much more convenient to use with Gremlin Server, Gremlin Console,
+or directly in code that depends on the <code>tinkergraph-gremlin</code> package.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">plugin activated: tinkerpop.tinkergraph
+gremlin> graph = TinkerFactory.createAirRoutes()
+==>tinkergraph[vertices:3619 edges:50148]
+gremlin> g = traversal().with(graph)
+==>graphtraversalsource[tinkergraph[vertices:3619 edges:50148], standard]
+gremlin> g.V().has('airport','code','IAD').valueMap('code','desc','lon','lat')
+==>[code:[IAD],lon:[-77.45580292],lat:[38.94449997],desc:[Washington Dulles International Airport]]</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_type_predicate">Type Predicate</h4>
+<div class="paragraph">
+<p>The new <code>P.typeOf()</code> predicate allows filtering traversers based on their runtime type. It accepts either a <code>GType</code>
+enum constant or a string representation of a simple class name. This predicate is particularly useful for type-safe
+filtering in heterogeneous data scenarios.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// Filter vertices by property type
+gremlin> g.V().values("age","name").is(P.typeOf(GType.INT))
+==>29
+==>27
+==>32
+==>35
+
+// Type inheritance support - NUMBER matches all numeric types
+gremlin> g.union(V(), E()).values().is(P.typeOf(GType.NUMBER))
+==>29
+==>27
+==>32
+==>35
+==>0.5
+==>1.0
+==>0.4
+==>1.0
+==>0.4
+==>0.2</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The predicate supports type inheritance where <code>GType.NUMBER</code> will match any numeric type. Invalid type names will
+throw an exception at execution time.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://tinkerpop.apache.org/docs/3.8.0/reference/#a-note-on-predicates">Predicates</a>, <a href="https://issues.apache.org/jira/browse/TINKERPOP-2234">TINKERPOP-2234</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_number_conversion_step">Number Conversion Step</h4>
+<div class="paragraph">
+<p>The new <code>asNumber()</code> step provides type casting functionality to Gremlin. It serves as an umbrella step that parses
+strings and casts numbers into desired types. For the convenience of remote traversals in GLVs, these available types
+are denoted by a set of number tokens (<code>GType</code>).</p>
+</div>
+<div class="paragraph">
+<p>This new step will allow users to normalize their data by converting string numbers and mixed numeric types to a
+consistent format, making it easier to perform downstream mathematical operations. As an example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// sum() step can only take numbers
+gremlin> g.inject(1.0, 2l, 3, "4", "0x5").sum()
+class java.lang.String cannot be cast to class java.lang.Number
+
+// use asNumber() to avoid casting exceptions
+gremlin> g.inject(1.0, 2l, 3, "4", "0x5").asNumber().sum()
+==>15.0
+
+// given sum() step returned a double, one can use asNumber() to further cast the result into desired type
+gremlin> g.inject(1.0, 2l, 3, "4", "0x5").asNumber().sum().asNumber(GType.INT)
+==>15</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Semantically, the <code>asNumber()</code> step will convert the incoming traverser to a logical parsable type if no argument is
+provided, or to the desired numerical type, based on the number token (<code>GType</code>) provided.</p>
+</div>
+<div class="paragraph">
+<p>Numerical input will pass through unless a type is specified by the number token. <code>ArithmeticException</code> will be thrown
+for any overflow as a result of narrowing of types:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.inject(5.0).asNumber(GType.INT)
+==> 5 // casts double to int
+gremlin> g.inject(12).asNumber(GType.BYTE)
+==> 12
+gremlin> g.inject(128).asNumber(GType.BYTE)
+==> ArithmeticException</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>String input will be parsed. By default, the smalled unit of number to be parsed into is <code>int</code> if no type token is
+provided. <code>NumberFormatException</code> will be thrown for any unparsable strings:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.inject("5").asNumber()
+==> 5
+gremlin> g.inject("5.7").asNumber(GType.INT)
+==> 5
+gremlin> g.inject("1,000").asNumber(GType.INT)
+==> NumberFormatException
+gremlin> g.inject("128").asNumber(GType.BYTE)
+==> ArithmeticException</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>All other input types will result in <code>IllegalArgumentException</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.inject([1, 2, 3, 4]).asNumber()
+==> IllegalArgumentException</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://tinkerpop.apache.org/docs/3.8.0/reference/#asNumber-step">asNumber()-step</a>, <a href="https://issues.apache.org/jira/browse/TINKERPOP-3166">TINKERPOP-3166</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_boolean_conversion_step">Boolean Conversion Step</h4>
+<div class="paragraph">
+<p>The <code>asBool()</code> step bridges another gap in Gremlin’s casting functionalities. Users now have the ability to parse
+strings and numbers into boolean values, both for normalization and to perform boolean logic with numerical values.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.inject(2, "true", 1, 0, false, "FALSE").asBool().fold()
+==>[true,true,true,false,false,false]
+
+// using the modern graph, we can turn count() results into boolean values
+gremlin> g.V().local(outE().count()).fold()
+==>[3,0,0,2,0,1]
+gremlin> g.V().local(outE().count()).asBool().fold()
+==>[true,false,false,true,false,true]
+// a slightly more complex one using sack for boolean operations for vertices with both 'person' label and has out edges
+gremlin> g.V().sack(assign).by(__.hasLabel('person').count().asBool()).sack(and).by(__.outE().count().asBool()).sack().path()
+==>[v[1],true]
+==>[v[2],false]
+==>[v[3],false]
+==>[v[4],true]
+==>[v[5],false]
+==>[v[6],true]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://tinkerpop.apache.org/docs/3.8.0/reference/#asBool-step">asBool()-step</a>, <a href="https://issues.apache.org/jira/browse/TINKERPOP-3175">TINKERPOP-3175</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_none_and_discard">none() and discard()</h4>
+<div class="paragraph">
+<p>There is a complicated relationship with the <code>none()</code> and <code>discard()</code> steps that begs some discussion. Prior to this
+version, the <code>none()</code> step was used to "throw away" all traversers that passed into it. In 3.8.0, that step has been
+renamed to <code>discard()</code>. The <code>discard()</code> step with its verb tone arguably makes for a better name for that feature, but
+it also helped make room for <code>none()</code> to be repurposed as <code>none(P)</code> which is a complement to <code>any(P)</code> and `all(P) steps.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_prevented_using_cap_inside_repeat">Prevented using cap() inside repeat()</h4>
+<div class="paragraph">
+<p><code>cap()</code> inside <code>repeat()</code> is now disallowed by the <code>StandardVerificationStrategy</code>. Using <code>cap()</code> inside <code>repeat()</code> would
+have led to unexpected results since <code>cap()</code> isn’t "repeat-aware". Because <code>cap()</code> is a <code>SupplyingBarrier</code> that reduces
+the number of traversers to one, its use inside <code>repeat()</code> is limited.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3195">TINKERPOP-3195</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_simplified_comparability_semantics">Simplified Comparability Semantics</h4>
+<div class="paragraph">
+<p>The previous system of ternary boolean semantics has been replaced with simplified binary semantics. The triggers for
+"ERROR" states from illegal comparisons are unchanged (typically comparisons with NaN or between incomparable types
+such as String and int). The difference now is that instead of the ERROR being propagated according to ternary logic
+semantics until a reduction point is reached, the error now immediately returns a value of FALSE.</p>
+</div>
+<div class="paragraph">
+<p>This will be most visible in expressions which include negations. Prior to this change, <code>g.inject(NaN).not(is(1))</code> would
+produce no results as <code>!(NaN == 1)</code> → <code>!(ERROR)</code> → <code>ERROR</code> → traverser is filtered out. After this change, the same
+traversal will return NaN as the same expression now evaluates as <code>!(NaN == 1)</code> → <code>!(FALSE)</code> → <code>TRUE</code> → traverser is
+not filtered.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://tinkerpop.apache.org/docs/3.8.0/dev/provider/#gremlin-semantics-equality-comparability">Comparability semantics docs</a></p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3173">TINKERPOP-3173</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_set_minimum_java_version_to_11">Set minimum Java version to 11</h4>
+<div class="paragraph">
+<p>TinkerPop 3.8 requires a minimum of Java 11 for building and running. Support for Java 1.8 has been dropped.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_auto_promotion_of_numbers">Auto-promotion of Numbers</h4>
+<div class="paragraph">
+<p>Previously, operations like <code>sum</code> or <code>sack</code> that involved mathematical calculations did not automatically promote the
+result to a larger numeric type (e.g., from int to long) when needed. As a result, values could wrap around within their
+current type leading to unexpected behavior. This issue has now been resolved by enabling automatic type promotion for
+results.</p>
+</div>
+<div class="paragraph">
+<p>Now, any mathematical operations such as <code>Add</code>, <code>Sub</code>, <code>Mul</code>, and <code>Div</code> will now automatically promote to the next
+numeric type if an overflow is detected. For integers, the promotion sequence is: byte → short → int → long → overflow
+exception. For floating-point numbers, the sequence is: float → double → infinity.</p>
+</div>
+<div class="paragraph">
+<p>The following example showcases the change in overflow behavior between 3.7.3 and 3.8.0</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.3
+gremlin> g.inject([Byte.MAX_VALUE, (byte) 1], [Short.MAX_VALUE, (short) 1], [Integer.MAX_VALUE,1], [Long.MAX_VALUE, 1l]).sum(local)
+==>-128 // byte
+==>-32768 // short
+==>-2147483648 // int
+==>-9223372036854775808 // long
+
+gremlin> g.inject([Float.MAX_VALUE, Float.MAX_VALUE], [Double.MAX_VALUE, Double.MAX_VALUE]).sum(local)
+==>Infinity // float
+==>Infinity // double
+
+// 3.8.0
+gremlin> g.inject([Byte.MAX_VALUE, (byte) 1], [Short.MAX_VALUE, (short) 1], [Integer.MAX_VALUE,1]).sum(local)
+==>128 // short
+==>32768 // int
+==>2147483648 // long
+
+gremlin> g.inject([Long.MAX_VALUE, 1l]).sum(local)
+// throws java.lang.ArithmeticException: long overflow
+
+gremlin> g.inject([Float.MAX_VALUE, Float.MAX_VALUE], [Double.MAX_VALUE, Double.MAX_VALUE]).sum(local)
+==>6.805646932770577E38 // double
+==>Infinity // double</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See <a href="https://issues.apache.org/jira/browse/TINKERPOP-3115">TINKERPOP-3115</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_prefer_offsetdatetime">Prefer OffsetDateTime</h4>
+<div class="paragraph">
+<p>The default implementation for date type in Gremlin is now changed from the <code>java.util.Date</code> to the more encompassing
+<code>java.time.OffsetDateTime</code>. This means the reference implementation for all date manipulation steps, <code>asDate()</code>,
+<code>dateAdd()</code>, and <code>dateDiff()</code>, as well as helper methods <code>datetime()</code>, will return <code>OffsetDateTime</code>, whose string
+representation will be in ISO 8601 format.</p>
+</div>
+<div class="paragraph">
+<p><code>Date</code> is still supported as incoming traverser results for these steps, as well as input into <code>dateDiff()</code> for
+compatibility purposes. All dates are assumed to be in <code>UTC</code> (given epoch time).</p>
+</div>
+<div class="paragraph">
+<p>If one is using a persisted TinkerGraph that stored <code>Date</code> objects inside properties, one may notice <code>OffsetDateTime</code>
+being returned after traversal manipulation. The recommended solution is to update all existing <code>Date</code> objects into
+<code>OffsetDateTime</code>. This can be done by querying for the properties and transforming them using <code>asDate()</code>. Note that all
+dates are assumed to be in <code>UTC</code> (given epoch time).</p>
+</div>
+<div class="paragraph">
+<p>For Python, Go, JavaScript, and .NET GLVs, the existing date types are retained. The change is at the serialization
+level, where the exiting date type will be serialized as <code>OffsetDateTime</code> to the server, and both <code>Date</code> and
+<code>OffsetDateTime</code> from the server will be deserialized into the existing date types in the host language. As such, users
+of these GLVs should not notice impact to the application code. The caution remains in cases when client is accessing a
+database with <code>Date</code> object stored, the <code>Date</code> to <code>OffsetDateTime</code> transformations on the server assumes <code>UTC</code> timezone.</p>
+</div>
+<div class="paragraph">
+<p>For Java GLV, this change would impact users who are expecting the old <code>Date</code> object from a traversal in their
+application, in this case the recommendation is to update code to expect <code>OffsetDateTime</code> as part of the version
+upgrade.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_simplify_g_construction">Simplify g Construction</h4>
+<div class="paragraph">
+<p>The creation of "g" is the start point to writing Gremlin. There are a number of ways to create it, but TinkerPop has
+long recommended the use of the anonymous <code>traversal()</code> function for this creation.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// for embedded cases</span>
+graph = TinkerGraph.open()
+g = traversal().withEmbedded(graph)
+<span class="comment">// for remote cases</span>
+g = traversal().withRemote(DriverRemoteConnection.using(...)))</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>As of this release, those two methods have been deprecated in favor of just <code>with()</code> which means you could simply write:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// for embedded cases</span>
+graph = TinkerGraph.open()
+g = traversal().with(graph)
+<span class="comment">// for remote cases</span>
+g = traversal().with(DriverRemoteConnection.using(...)))</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>That’s a bit less to type, but also removes the need to programmatically decide which function to call, which hopefully
+strengthens the abstraction further. To demonstrate this further, consider this next example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">g = traversal().with(<span class="string"><span class="delimiter">"</span><span class="content">config.properties</span><span class="delimiter">"</span></span>)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The properties file in the above example can either point to a remote configuration or a embedded configuration allowing
+"g" to be switched as needed without code changes.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3017">TINKERPOP-3017</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_split_on_empty_string">split() on Empty String</h4>
+<div class="paragraph">
+<p>The <code>split()</code> step will now split a string into a list of its characters if the given separator is an empty string.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.3
+g.inject("Hello").split("")
+==>[Hello]
+
+// 3.8.0
+g.inject("Hello").split("")
+==>[H,e,l,l,o]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3083">TINKERPOP-3083</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_asstring_no_longer_allow_nulls">asString() No Longer Allow Nulls</h4>
+<div class="paragraph">
+<p>The <code>asString()</code> step will no longer allow <code>null</code> input. An <code>IllegalArgumentException</code> will be thrown for consistency
+with all other parsing steps (i.e. <code>asDate()</code>, <code>asBool()</code>, <code>asNumber()</code>).</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://lists.apache.org/thread/q76pgrvhprosb4lty63bnsnbw2ljyl7m">DISCUSS</a> thread</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_removal_of_haskey_traversal">Removal of has(key, traversal)</h4>
+<div class="paragraph">
+<p>The has(key, traversal) API has been removed in version 3.8.0 due to its confusing behavior that differed from other
+has() variants. As well, most has(key, traversal) usage indicates a misunderstanding of the API. Unlike has(key, value)
+which performs equality comparison, has(key, traversal) only checked if the traversal produced any result, creating
+inconsistent semantics.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.x - this condition is meaningless but yields result because count() is productive
+gremlin> g.V().has("age", __.count())
+==>v[1]
+==>v[2]
+==>v[3]
+==>v[4]
+==>v[5]
+==>v[6]
+// simple example
+gremlin> g.V().has("age", __.is(P.gt(30)))
+==>v[4]
+==>v[6]
+
+// 3.8.0 - traversals no longer yield results, for proper use cases consider using predicate or where() for filtering
+gremlin> g.V().has("age", __.count())
+gremlin> g.V().has("age", __.is(P.gt(30)))
+gremlin> g.V().has("age", P.gt(30))
+==>v[4]
+==>v[6]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1463">TINKERPOP-1463</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_serialization_changes">Serialization Changes</h4>
+<div class="paragraph">
+<p><strong>Properties on Element Serialization in Python & Javascript</strong></p>
+</div>
+<div class="paragraph">
+<p>Element properties handling has been inconsistent across GLVs. Previously,<code>gremlin-python</code> deserialized empty properties
+as None or array depending on the serializer, while <code>gremlin-javascript</code> returned properties as objects or arrays, with
+empty properties as empty lists or undefined depending on the serializer.</p>
+</div>
+<div class="paragraph">
+<p>This inconsistency is now resolved, aligning to how properties are handled in Gremlin core and in the Java GLV.
+Both GLVs will deserialize element properties into lists of property objects, returning empty lists instead of null values
+for missing properties.</p>
+</div>
+<div class="paragraph">
+<p>For python, the most notable difference is in graphSON when "tokens" is turned on for "materializeProperties". The
+properties returned are no longer <code>None</code>, but empty lists. Users should update their code accordingly.</p>
+</div>
+<div class="paragraph">
+<p>For javascript, the change is slightly more extensive, as user should no longer expect javascript objects to be returned.
+All properties are returned as lists of Property or VertexProperty objects.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="javascript"><span class="comment">// 3.7 and before:</span>
+g.with_(<span class="string"><span class="delimiter">"</span><span class="content">materializeProperties</span><span class="delimiter">"</span></span>, <span class="string"><span class="delimiter">"</span><span class="content">tokens</span><span class="delimiter">"</span></span>).V(<span class="integer">1</span>).next() <span class="comment">// skip properties with token</span>
+<span class="comment">// graphson will return properties as a javascript object, which becomes undefined</span>
+Vertex { <span class="key">id</span>: <span class="integer">1</span>, <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>, <span class="key">properties</span>: <span class="predefined-constant">undefined</span> }
+<span class="comment">// graphbinary will return properties as empty lists</span>
+Vertex { <span class="key">id</span>: <span class="integer">1</span>, <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>, <span class="key">properties</span>: [] }
+
+g.V(<span class="integer">1</span>).next() <span class="comment">// properties returned</span>
+<span class="comment">// graphson will return properties as a javascript object</span>
+Vertex {
+ <span class="key">id</span>: <span class="integer">1</span>,
+ <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>,
+ <span class="key">properties</span>: { <span class="key">name</span>: [Array], <span class="key">age</span>: [Array] }
+}
+<span class="comment">// graphbinary will return properties as lists of VertexProperty objects</span>
+Vertex {
+ <span class="key">id</span>: <span class="integer">1</span>,
+ <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>,
+ <span class="key">properties</span>: [ [VertexProperty], [VertexProperty] ]
+}
+
+<span class="comment">// 3.8.0 and newer - properties are always arrays, empty array [] for missing properties:</span>
+g.with_(<span class="string"><span class="delimiter">"</span><span class="content">materializeProperties</span><span class="delimiter">"</span></span>, <span class="string"><span class="delimiter">"</span><span class="content">tokens</span><span class="delimiter">"</span></span>).V(<span class="integer">1</span>).next() <span class="comment">// skip properties with token</span>
+<span class="comment">// both graphson and graphbinary return</span>
+Vertex { <span class="key">id</span>: <span class="integer">1</span>, <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>, <span class="key">properties</span>: [] }
+g.V(<span class="integer">1</span>).next()
+<span class="comment">// both graphson and graphbinary return</span>
+Vertex {
+ <span class="key">id</span>: <span class="integer">1</span>,
+ <span class="key">label</span>: <span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>,
+ <span class="key">properties</span>: [ [VertexProperty], [VertexProperty] ]
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This change only affects how GLVs deserialize property data in client applications. The underlying graph serialization
+formats and server-side behavior remain unchanged.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3186">TINKERPOP-3186</a></p>
+</div>
+<div class="paragraph">
+<p><strong>Javascript Set Deserialization</strong></p>
+</div>
+<div class="paragraph">
+<p>Starting from this version, <code>gremlin-javascript</code> will deserialize <code>Set</code> data into a ECMAScript 2015 Set. Previously,
+these were deserialized into arrays.</p>
+</div>
+<div class="paragraph">
+<p><strong>.NET Byte Serialization Change</strong></p>
+</div>
+<div class="paragraph">
+<p>The Gremlin .NET serializers has been updated to correctly handle byte values as signed integers to align with the IO
+specification, whereas previously it incorrectly serialized and deserialized bytes as unsigned values.</p>
+</div>
+<div class="paragraph">
+<p>This is a breaking change for .NET applications that rely on byte values. Existing applications using byte values
+should consider switching to <code>sbyte</code> for signed byte operations or <code>short</code> for a wider range of values to maintain
+compatibility.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3161">TINKERPOP-3161</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_removal_of_p_getoriginalvalue">Removal of P.getOriginalValue()</h4>
+<div class="paragraph">
+<p><code>P.getOriginalValue()</code> has been removed as it was not offering much value and was often confused with <code>P.getValue()</code>.
+Usage of <code>P.getOriginalValue()</code> often leads to unexpected results if called on a predicate which has had its value reset
+after construction. All usages of <code>P.getOriginalValue()</code> should be replaced with <code>P.getValue()</code>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_gremlin_grammar_changes">Gremlin Grammar Changes</h4>
+<div class="paragraph">
+<p>A number of changes have been introduced to the Gremlin grammar to help make it be more consistent and easier to use.</p>
+</div>
+<div class="paragraph">
+<p><strong>Removed Vertex References for Grammar</strong></p>
+</div>
+<div class="paragraph">
+<p>The grammar allowed the construction of a <code>Vertex</code> by way of syntax like <code>new Vertex(1,'person')</code> (or with similar
+arguments to <code>ReferenceVertex</code>). This syntax has been removed as it served little purpose within the grammar as it
+merely adds more characters to wrap around the identifier, which could simply be used by itself.</p>
+</div>
+<div class="paragraph">
+<p>The <code>V()</code> step, as well as the <code>from()</code> and <code>to()</code> modulators used with <code>addE()</code>, previously accepted <code>Vertex</code> as
+arguments in the grammar. In its place, the <code>from()</code> and <code>to()</code> modulators can now directly accept a vertex id in place
+of a <code>Vertex</code> when used with <code>addE()</code> (<code>V()</code> has always accepted ids in addition to vertices). When using these steps in
+<code>gremlin-lang</code> scripts, the vertex id must be used directly.</p>
+</div>
+<div class="paragraph">
+<p>This change has no effect on the <code>GraphTraversal</code> API, nor on <code>gremlin-groovy</code> scripts. Vertices can continue to be used
+directly in those contexts.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.3
+gremlin> v1 = g.V(1).next()
+==>v[1]
+gremlin> v2 = g.V(2).next()
+==>v[2]
+gremlin> script = String.format("g.V(new Vertex(%s)).outE().where(inV().is(new Vertex(%s)))", v1.id(), v2.id())
+==>g.V(new Vertex(1)).outE().where(inV().is(new Vertex(2)))
+gremlin> client.submit(script).all().get().get(0).getEdge()
+==>e[7][1-knows->2]
+
+// 3.8.0
+gremlin> v1 = g.V(1).next()
+==>v[1]
+gremlin> v2 = g.V(2).next()
+==>v[2]
+gremlin> script = String.format("g.V(%s).outE().where(inV().id().is(%s))", v1.id(), v2.id())
+==>g.V(1).outE().where(inV().id().is(2))
+gremlin> client.submit(script).all().get().get(0).getEdge()
+==>e[7][1-knows->2]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><strong><code>new</code> keyword is now optional</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>new</code> keyword is now optional in all cases where it was previously used. Both of the following examples are now
+valid syntax with the second being the preferred form going forward:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">g.V().withStrategies(<span class="keyword">new</span> SubgraphStrategy(<span class="key">vertices</span>: __.hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>)))
+
+g.V().withStrategies(SubgraphStrategy(<span class="key">vertices</span>: __.hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>)))</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In a future version, it is likely that the <code>new</code> keyword will be removed entirely from the grammar.</p>
+</div>
+<div class="paragraph">
+<p><strong>Supports withoutStrategies()</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>withoutStrategies()</code> configuration step is now supported syntax for the grammar. While this option is not commonly
+used it is still a part of the Gremlin language and there are times when it is helpful to have this fine-grained
+control over how a traversal works.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">g.V().withoutStrategies(CountStrategy)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><strong><code>Map</code> keys restrictions</strong></p>
+</div>
+<div class="paragraph">
+<p>Earlier versions of the grammar allowed a wide range of values for the keys. In many cases, these didn’t really make
+sense for Gremlin and were just inherited from the Groovy language since Gremlin tends to follow that language in many
+ways. That said, Gremlin did take some liberties with that syntax and introduced its own shorthand for some cases. Those
+shorthands created unfortunate situations where certain words were being prevented as being able to be used as keys
+which could lead to confusion.</p>
+</div>
+<div class="paragraph">
+<p>A <code>Map</code> is still defined in the same way it always has been, where the following two lines produce an equivalent <code>Map</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">[<span class="key">label</span>: <span class="integer">100</span>]
+[<span class="string"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="integer">100</span>]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note that when quotes are not used to denote a string, Gremlin will assume that the intention is to shorthand a string
+key and not reference a Gremlin keyword. To reference an allowable keyword as the key, either wrap it with parenthesis
+or use its longhand form as shown in the following examples which all produce the same <code>Map</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">[T.id: <span class="integer">100</span>]
+[(T.id): <span class="integer">100</span>]
+[(id): <span class="integer">100</span>]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note that the first example is a Gremlin convenience that is not compatible in Groovy. This does produce a syntax error
+in Groovy’s case. When upgrading to 3.8.0, it will be important to evaluate any code using scripts with <code>Map</code> keys that
+match keywords that are not wrapped in parentheses. On upgrade they will begin to be treated as <code>String</code> keys rather
+than their <code>Enum</code> value. This is particularly relevant for <code>property(Map)</code>, <code>mergeV</code> and <code>mergeE</code> which use a 'Map`
+for their arguments and commonly require that <code>T</code> and <code>Direction</code> be used as keys.</p>
+</div>
+<div class="paragraph">
+<p>The following examples show some <code>Map</code> usage from older versions that will work without a need for changes in 3.8.0:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// the long forms are used and each are wrapped in parenthesis</span>
+g.mergeE([(T.label):<span class="string"><span class="delimiter">'</span><span class="content">Sibling</span><span class="delimiter">'</span></span>,<span class="key">created</span>:<span class="string"><span class="delimiter">'</span><span class="content">2022-02-07</span><span class="delimiter">'</span></span>,(Direction.from):<span class="integer">1</span>,(Direction.to):<span class="integer">2</span>])
+
+<span class="comment">// the short forms are used and each are wrapped in parenthesis</span>
+g.mergeE([(label):<span class="string"><span class="delimiter">'</span><span class="content">Sibling</span><span class="delimiter">'</span></span>,<span class="key">created</span>:<span class="string"><span class="delimiter">'</span><span class="content">2022-02-07</span><span class="delimiter">'</span></span>,(Direction.from):<span class="integer">1</span>,(Direction.to):<span class="integer">2</span>])
+
+<span class="comment">// the long forms are used and for Gremlin this is a syntax convenience to spare typing</span>
+<span class="comment">// the parenthesis</span>
+g.mergeE([T.label:<span class="string"><span class="delimiter">'</span><span class="content">Sibling</span><span class="delimiter">'</span></span>,<span class="key">created</span>:<span class="string"><span class="delimiter">'</span><span class="content">2022-02-07</span><span class="delimiter">'</span></span>,Direction.from:<span class="integer">1</span>,Direction.to:<span class="integer">2</span>])
+
+<span class="comment">// while the following line mixes qualified enums with T and uses shorthand for Direction</span>
+<span class="comment">// with from and to all of the enums are wrapped in parenthesis</span>
+g.mergeE([(T.label):<span class="string"><span class="delimiter">'</span><span class="content">Sibling</span><span class="delimiter">'</span></span>,<span class="key">created</span>:<span class="string"><span class="delimiter">'</span><span class="content">2022-02-07</span><span class="delimiter">'</span></span>,(from):<span class="integer">1</span>,(to):<span class="integer">2</span>])</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In this next example, the <code>Map</code> keys are defined in a way that changes will be necessary in 3.8.0:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// none of the keys below are qualified with their enum long form nor are they wrapped in</span>
+<span class="comment">// parenthesis and as a result will be treated as String key values in 3.8.0 unless a</span>
+<span class="comment">// change is made</span>
+g.mergeE([<span class="key">label</span>:<span class="string"><span class="delimiter">'</span><span class="content">Sibling</span><span class="delimiter">'</span></span>,<span class="key">created</span>:<span class="string"><span class="delimiter">'</span><span class="content">2022-02-07</span><span class="delimiter">'</span></span>,<span class="key">from</span>:<span class="integer">1</span>,<span class="key">to</span>:<span class="integer">2</span>])</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><strong>Restriction of Step Arguments</strong></p>
+</div>
+<div class="paragraph">
+<p>Prior to 3.7.0, the grammar did not allow for any parameters in gremlin scripts. In 3.7, the grammar rules
+were loosened to permit variable use almost anywhere in a traversal, in a similar fashion as groovy, however
+immediately resolved upon parsing the script, and did not bring the same performance benefits as
+parameterization in groovy scripts brings. Parameters in gremlin-lang scripts are restricted to a
+<a href="https://tinkerpop.apache.org/docs/3.8.0-SNAPSHOT/dev/reference/#traversal-parameterization">subset of steps</a>
+in 3.8.0, and scripts which use variables elsewhere will result in parsing exceptions. The implementation
+has been updated to persist query parameters through traversal construction and strategy application.
+Parameter persistence opens the door certain optimizations for repeated query patterns. Consult your
+providers documentation for specific recommendations on using query parameters with gremlin-lang scripts in
+TinkerPop 3.8.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-2862">TINKERPOP-2862</a>,
+<a href="https://issues.apache.org/jira/browse/TINKERPOP-3046">TINKERPOP-3046</a>,
+<a href="https://issues.apache.org/jira/browse/TINKERPOP-3047">TINKERPOP-3047</a>,
+<a href="https://issues.apache.org/jira/browse/TINKERPOP-3023">TINKERPOP-3023</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_seedstrategy_construction">SeedStrategy Construction</h4>
+<div class="paragraph">
+<p>The <code>SeedStrategy</code> public constructor has been removed for Java and has been replaced by the builder pattern common
+to all strategies. This change was made to ensure that the <code>SeedStrategy</code> could be constructed consistently.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_improved_translators">Improved Translators</h4>
+<div class="paragraph">
+<p>The various Java <code>Translator</code> implementations allowing conversion of Gremlin traversals to string forms in various
+languages have been modified considerably. First, they have been moved from to the
+<code>org.apache.tinkerpop.gremlin.language.translator</code> package, because they now depend on the ANTLR grammar in
+<code>gremlin-language</code> to handled the translation process. Making this change allowed for a more accurate translation of
+Gremlin that doesn’t need to rely on reflection and positional arguments to determine which step was intended for use.</p>
+</div>
+<div class="paragraph">
+<p>Another important change was the introduction of specific translators for Groovy and Java. While Groovy translation
+tends to work for most Java cases, there is syntax specific to Groovy where it does not. With a specific Java
+translator, the translation process can be more accurate and less error-prone.</p>
+</div>
+<div class="paragraph">
+<p>The syntax for the translators has simplified as well. The translator function now takes a Gremlin string and a target
+language to translate to. Consider the following example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> GremlinTranslator.translate("g.V().out('knows')", Translator.GO)
+==>g.V().Out("knows")</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3028">TINKERPOP-3028</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_deprecated_unifiedchannelizer">Deprecated UnifiedChannelizer</h4>
+<div class="paragraph">
+<p>The <code>UnifiedChannelizer</code> was added in 3.5.0 in any attempt to streamline Gremlin Server code paths and resource usage.
+It was offered as an experimental feature and as releases went on was not further developed, particularly because of the
+major changes to Gremlin Server expected in 4.0.0 when websockets are removed. The removal of websockets with a pure
+reliance on HTTP will help do what the <code>UnifiedChannelizer</code> tried to do with its changes. As a result, there is no need
+to continue to refine this <code>Channelizer</code> implementation and it can be deprecated.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3168">TINKERPOP-3168</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_optionsstrategy_in_python">OptionsStrategy in Python</h4>
+<div class="paragraph">
+<p>The <code>__init__()</code> syntax has been updated to be both more Pythonic and more aligned to the <code>gremlin-lang</code> syntax.
+Previously, <code>OptionsStrategy()</code> took a single argument <code>options</code> which was a <code>dict</code> of all options to be set.
+Now, all options should be set directly as keyword arguments.</p>
+</div>
+<div class="paragraph">
+<p>For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="python"><span class="comment"># 3.7 and before:</span>
+g.with_strategies(OptionsStrategy(options={<span class="string"><span class="delimiter">'</span><span class="content">key1</span><span class="delimiter">'</span></span>: <span class="string"><span class="delimiter">'</span><span class="content">value1</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">key2</span><span class="delimiter">'</span></span>: <span class="predefined-constant">True</span>}))
+<span class="comment"># 4.x and newer:</span>
+g.with_strategies(OptionsStrategy(key1=<span class="string"><span class="delimiter">'</span><span class="content">value1</span><span class="delimiter">'</span></span>, key2=<span class="predefined-constant">True</span>))
+
+myOptions = {<span class="string"><span class="delimiter">'</span><span class="content">key1</span><span class="delimiter">'</span></span>: <span class="string"><span class="delimiter">'</span><span class="content">value1</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">key2</span><span class="delimiter">'</span></span>: <span class="predefined-constant">True</span>}
+<span class="comment"># 3.7 and before:</span>
+g.with_strategies(OptionsStrategy(options=myOptions))
+<span class="comment"># 4.x and newer:</span>
+g.with_strategies(OptionsStrategy(**myOptions))</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_choose_semantics">choose() Semantics</h4>
+<div class="paragraph">
+<p>Several enhancements and clarifications have been made to the <code>choose()</code> step in TinkerPop 3.8.0 to improve its behavior
+and make it more consistent:</p>
+</div>
+<div class="paragraph">
+<p><strong>First Matched Option Only</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>choose()</code> step now only executes the first matching option traversal. In previous versions, if multiple options
+could match, all matching options would be executed. This change provides more predictable behavior and better aligns
+with common switch/case semantics in programming languages.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// In 3.7.x and earlier, if multiple options matched, all would be executed
+gremlin> g.V().hasLabel("person").
+......1> choose(__.values("age")).
+......2> option(P.between(26, 30), __.constant("young")).
+......3> option(P.between(20, 30), __.constant("also young"))
+==>young
+==>also young
+==>young
+==>also young
+
+
+// In 3.8.x, only the first matching option is executed
+gremlin> g.V().hasLabel("person").
+......1> choose(__.values("age")).
+......2> option(P.between(26, 30), __.constant("young")).
+......3> option(P.between(20, 30), __.constant("never reached for ages 26-30"))
+==>young
+==>young</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><strong>Automatic Pass-through for Unproductive and Unmatched Predicates</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>choose()</code> step now passes through traversers when the choice traversal is unproductive or the determined choice
+unmatched. Before this version, unproductive traversals produced an error and unmatched choices were filtered by
+default.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.V().choose(__.values("age")).
+......1> option(P.between(26, 30), __.values("name")).
+......2> option(Pick.none, __.values("name"))
+==>marko
+==>vadas
+==>v[3]
+==>josh
+==>v[5]
+==>peter
+gremlin> g.V().choose(T.label).
+......1> option("person", __.out("knows").values("name")).
+......2> option("bleep", __.out("created").values("name"))
+==>vadas
+==>josh
+==>v[3]
+==>v[5]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This change makes the switch semantics for <code>choose()</code> consistent with those of the if-then-else semantics for
+<code>choose()</code>.</p>
+</div>
+<div class="paragraph">
+<p><strong>Pick.unproductive for Unproductive Predicates</strong></p>
+</div>
+<div class="paragraph">
+<p>A new special option token <code>Pick.unproductive</code> has been added to handle cases where the choice traversal produces no
+results. This is particularly useful for handling elements that don’t have the properties being evaluated.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// In 3.7.x, vertices without an age property would pass through unchanged
+gremlin> g.V().choose(__.values("age")).
+......1> option(P.between(26, 30), __.values("name")).
+......2> option(Pick.none, __.values("name"))
+==>marko
+==>vadas
+The provided traverser does not map to a value: v[3][TinkerVertex]->[PropertiesStep([age],value)][DefaultGraphTraversal] parent[[TinkerGraphStep(vertex,[]), ChooseStep([PropertiesStep([age],value)],[[none, [[PropertiesStep([name],value), EndStep]]], [(and(gte(26), lt(30))), [PropertiesStep([name],value), EndStep]]])]]
+Type ':help' or ':h' for help.
+Display stack trace? [yN]
+
+// In 3.8.x, you can specifically handle vertices where the choice traversal is unproductive
+gremlin> g.V().choose(__.values("age")).
+......1> option(P.between(26, 30), __.values("name")).
+......2> option(Pick.none, __.values("name")).
+......3> option(Pick.unproductive, __.label())
+==>marko
+==>vadas
+==>software
+==>josh
+==>software
+==>peter</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><strong>Removal of choose().option(Traversal, v)</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>choose().option(Traversal, v)</code> was relatively unused in comparison to the other overloads with constants, predicates
+and Pick tokens. The previous implementation often led to confusion as it only evaluated if the traversal was productive,
+rather than performing comparisons based on the traversal’s output value. To eliminate this confusion, <code>Traversal</code> is no
+longer permitted as an option token for <code>choose()</code>. Any usages which are dependent on the Traversal for dynamic case
+matching can be rewritten using <code>union()</code>, with filters prepended to each child traversal.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.x
+gremlin> g.V().hasLabel("person").choose(identity()).
+......1> option(outE().count().is(P.gt(2)), values("age")).
+......2> option(none, values("name"))
+==>29
+==>vadas
+==>josh
+==>peter
+
+// 3.8.0 - an IllegalArgumentException will be thrown
+gremlin> g.V().hasLabel("person").choose(identity()).
+......1> option(outE().count().is(P.gt(2)), values("age")).
+......2> option(none, values("name"))
+Traversal is not allowed as a Pick token for choose().option()
+Type ':help' or ':h' for help.
+Display stack trace? [yN]n
+
+// use union() in these cases
+gremlin> g.V().hasLabel("person").union(
+......1> where(outE().count().is(P.gt(2))).values("age"),
+......2> __.not(where(outE().count().is(P.gt(2)))).values("name"))
+==>29
+==>vadas
+==>josh
+==>peter</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3178">TINKERPOP-3178</a>,
+<a href="https://tinkerpop.apache.org/docs/3.8.0/reference/#choose-step">Reference Documentation - choose()</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_float_defaults_to_double">Float Defaults to Double</h4>
+<div class="paragraph">
+<p>The <code>GremlinLangScriptEngine</code> has been modified to treat float literals without explicit type suffixes (like 'm', 'f',
+or 'd') as Double by default. Users who need <code>BigDecimal</code> precision can still use the 'm' suffix (e.g., 1.0m).
+<code>GremlinGroovyScriptEngine</code> will still default to <code>BigDecimal</code> for <code>float</code> literals.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_consistent_output_for_range_limit_tail">Consistent Output for range(), limit(), tail()</h4>
+<div class="paragraph">
+<p>The <code>range(local)</code>, <code>limit(local)</code>, and <code>tail(local)</code> steps now consistently return collections rather than automatically
+unfolding single-element results when operating on iterable collections (List, Set, etc.). Previously, when these steps
+operated on collections and the result contained only one element, the step would return the single element directly
+instead of a collection containing that element.</p>
+</div>
+<div class="paragraph">
+<p>This change ensures predictable return types based on the input type, making the behavior more consistent and intuitive.
+Note that this change only affects iterable collections - Map objects continue to behave as before.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Warning</div>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>This is a breaking change that may require modifications to existing queries. If your queries relied on the previous
+behavior of receiving single elements directly from <code>range(local)</code>, <code>limit(local)</code>, or <code>tail(local)</code> steps, you will
+need to add <code>.unfold()</code> after these steps to maintain the same functionality. Without this update, some existing queries
+may throw a <code>ClassCastException</code> while others may return unexpected results.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// 3.7.x and earlier - inconsistent output types for collections
+gremlin> g.inject([1, 2, 3]).limit(local, 1)
+==>1 // single element returned directly
+
+gremlin> g.inject([1, 2, 3]).limit(local, 2)
+==>[1,2] // collection returned
+
+// 3.8.0 - consistent collection output for collections
+gremlin> g.inject([1, 2, 3]).limit(local, 1)
+==>[1] // collection always returned
+
+gremlin> g.inject([1, 2, 3]).limit(local, 2)
+==>[1,2] // collection returned
+
+// Map behavior unchanged in both versions
+gremlin> g.inject([a: 1, b: 2, c: 3]).limit(local, 1)
+==>[a:1] // Map entry returned (behavior unchanged)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If you need the old behavior of extracting single elements from collections, you can add <code>.unfold()</code> after the local step:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.inject([1, 2, 3]).limit(local, 1).unfold()
+==>1</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This change affects all three local collection manipulation steps when operating on iterable collections:
+- <code>range(local, low, high)</code>
+- <code>limit(local, count)</code>
+- <code>tail(local, count)</code></p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-2491">TINKERPOP-2491</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_group_value_traversal_semantics">group() Value Traversal Semantics</h4>
+<div class="paragraph">
+<p>The <code>group()</code> step takes two <code>by()</code> modulators. The first defines the key for the grouping, and the second acts upon the
+values grouped to each key. The latter is referred to as the "value traversal". In earlier versions of TinkerPop,
+using <code>order()</code> in the value traversal could produce an unexpected result if combined with a step like <code>fold()</code>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.V().has("person","name",P.within("vadas","peter")).group().by().by(__.out().fold())
+==>[v[2]:[],v[6]:[v[3]]]
+gremlin> g.V().has("person","name",P.within("vadas","peter")).group().by().by(__.out().order().fold())
+==>[v[6]:[v[3]]]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The example above shows that <code>v[2]</code> gets filtered away when <code>order()</code> is included. This was not expected behavior. The
+problem can be more generally explained as an issue where a <code>Barrier</code> like <code>order()</code> can return an empty result. If this
+step is followed by another <code>Barrier</code> that always produces an output like <code>sum()</code>, <code>count()</code> or <code>fold()</code> then the empty
+result would not feed through to that following step. This issue has now been fixed and the two traversals from the
+previous example now return the same results.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.V().has("person","name",P.within("vadas","peter")).group().by().by(__.out().fold())
+==>[v[2]:[],v[6]:[v[3]]]
+gremlin> g.V().has("person","name",P.within("vadas","peter")).group().by().by(__.out().order().fold())
+==>[v[2]:[],v[6]:[v[3]]]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-2971">TINKERPOP-2971</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_by_modulation_semantics">By Modulation Semantics</h4>
+<div class="paragraph">
+<p><strong>valueMap() and propertyMap() Semantics</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>valueMap()</code> and <code>propertyMap()</code> steps have been changed to throw an error if multiple <code>by()</code> modulators are applied.
+The previous behavior attempted to round-robin the <code>by()</code> but this wasn’t possible for all providers.</p>
+</div>
+<div class="paragraph">
+<p><strong>groupCount(), dedup(), sack(), sample(), aggregate() By Modulation Semantics</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>groupCount()</code>, <code>dedup()</code>, <code>sack()</code>, <code>sample()</code>, and <code>aggregate()</code> steps has been changed to throw an error if
+multiple <code>by()</code> modulators are applied. The previous behavior would ignore previous <code>by()</code> modulators and apply the
+last one, which was not intuitive.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3121">TINKERPOP-3121</a>,
+<a href="https://issues.apache.org/jira/browse/TINKERPOP-2974">TINKERPOP-2974</a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_remove_undocumented_with_modulation">Remove Undocumented <code>with()</code> modulation</h4>
+<div class="paragraph">
+<p>There has long been a connection between the <code>with()</code> modulator, and mutating steps due to the design of
+some of the interfaces in the gremlin traversal engine. This has led to several undocumented usages of the
+<code>with()</code> modulator which have never been officially supported but have previously been functional.</p>
+</div>
+<div class="paragraph">
+<p>As of 3.8.0 <code>with()</code> modulation of the following steps will no longer work: <code>addV()</code>, <code>addE()</code>, <code>property()</code>, <code>drop()</code>,
+<code>mergeV()</code>, and <code>mergeE()</code>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_stricter_repeatunrollstrategy">Stricter RepeatUnrollStrategy</h4>
+<div class="paragraph">
+<p>The <code>RepeatUnrollStrategy</code> has been updated to use a more conservative approach for determining which repeat traversals
+are safe to unroll. Previously, the strategy would attempt to unroll most usages of <code>repeat()</code> used with <code>times()</code>
+without <code>emit()</code>. This caused unintentional traversal semantic changes when some steps were unrolled (especially barrier
+steps).</p>
+</div>
+<div class="paragraph">
+<p>As of 3.8.0, the strategy will still only be applied if <code>repeat()</code> is used with <code>times()</code> without <code>emit()</code> but now only
+applies to repeat traversals that contain exclusively safe, well-understood steps: <code>out()</code>, <code>in()</code>, <code>both()</code>, <code>inV()</code>,
+<code>outV()</code>, <code>otherV()</code>, <code>has(key, value)</code>.</p>
+</div>
+<div class="paragraph">
+<p>Repeat traversals containing other steps will no longer be unrolled. There may be some performance differences for
+traversals that previously benefited from automatic unrolling but the consistency of semantics outweighs the performance
+impact.</p>
+</div>
+<div class="sect4">
+<h5 id="_examples_of_affected_traversals">Examples of Affected Traversals</h5>
+<div class="paragraph">
+<p>Usage of <code>inject()</code> inside <code>repeat()</code> is an example of a traversal that will no longer be unrolled. The following results
+returned from the <code>modern</code> graph demonstrate the change of semantics if the <code>inject()</code> in <code>repeat()</code> were to be unrolled:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.V().values('name').inject('foo').inject('foo')
+==>foo
+==>foo
+==>marko
+==>vadas
+==>lop
+==>josh
+==>ripple
+==>peter
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V().values('name').repeat(inject('foo')).times(2)
+==>foo
+==>marko
+==>vadas
+==>lop
+==>josh
+==>ripple
+==>peter</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Another example is the usage of <code>aggregate()</code> inside <code>repeat()</code>. The following results returned from the <code>modern</code> graph
+demonstrate the change of semantics if the <code>aggregate()</code> in <code>repeat()</code> were to be unrolled:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.V().both().aggregate('x').both().aggregate('x').limit(10)
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[4]
+==>v[4]
+==>v[4]
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V().repeat(both().aggregate('x')).times(2).limit(10)
+==>v[1]
+==>v[1]
+==>v[1]
+==>v[4]
+==>v[6]
+==>v[5]
+==>v[3]
+==>v[3]
+==>v[2]
+==>v[4]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Other examples of affected traversals include (but are not limited to):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">g.V().repeat(out().limit(<span class="integer">10</span>)).times(<span class="integer">3</span>)
+g.V().repeat(<span class="keyword">in</span>().order().by(<span class="string"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>)).times(<span class="integer">2</span>)
+g.V().repeat(both().simplePath()).times(<span class="integer">4</span>)
+g.V().repeat(both().sample(<span class="integer">1</span>)).times(<span class="integer">2</span>)</code></pre>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_migration_strategies">Migration Strategies</h5>
+<div class="paragraph">
+<p>Before upgrading, analyze existing traversals which use <code>repeat()</code> with any steps other than <code>out()</code>, <code>in()</code>, <code>both()</code>,
+<code>inV()</code>, <code>outV()</code>, <code>otherV()</code>, <code>has(key, value)</code> and determine if the semantics of these traversals are as expected when
+the <code>RepeatUnrollStrategy</code> is disabled using <code>withoutStrategies(RepeatUnrollStrategy)</code>. If the semantics are unexpected
+the traversal should be restructured to no longer use <code>repeat()</code> by manually unrolling the steps inside <code>repeat()</code> or by
+moving affected steps outside the <code>repeat()</code>.</p>
+</div>
+<div class="paragraph">
+<p>Example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// original traversal</span>
+g.V().repeat(both().dedup()).times(<span class="integer">2</span>)
+<span class="comment">// can be manually unrolled to</span>
+g.V().both().dedup().both().dedup()
+<span class="comment">// or dedup can be moved outside of repeat</span>
+g.V().repeat(both()).times(<span class="integer">2</span>).dedup()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3192">TINKERPOP-3192</a></p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_modified_limit_skip_range_semantics_in_repeat">Modified limit() skip() range() Semantics in repeat()</h4>
+<div class="paragraph">
+<p>The semantics of <code>limit()</code>, <code>skip()</code>, and <code>range()</code> steps called with default <code>Scope</code> or explicit <code>Scope.global</code> inside
+<code>repeat()</code> have been modified to ensure consistent semantics across repeat iterations. Previously, these steps would
+track global state across iterations, leading to unexpected filtering behavior between loops.</p>
+</div>
+<div class="paragraph">
+<p>Consider the following examples which demonstrate the unexpected behavior. Note that the examples for version 3.7.4
+disable the <code>RepeatUnrollStrategy</code> so that strategy optimization does not replace the <code>repeat()</code> traversal with a
+non-looping equivalent. 3.8.0 examples do not disable the <code>RepeatUnrollStrategy</code> as the strategy was modified to be more
+restrictive in this version.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy"><span class="comment">// 3.7.4 - grateful dead graph examples producing no results due to global counters</span>
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">JAM</span><span class="delimiter">'</span></span>).repeat(out(<span class="string"><span class="delimiter">'</span><span class="content">followedBy</span><span class="delimiter">'</span></span>).limit(<span class="integer">2</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+gremlin>
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">DRUMS</span><span class="delimiter">'</span></span>).repeat(__.in(<span class="string"><span class="delimiter">'</span><span class="content">followedBy</span><span class="delimiter">'</span></span>).range(<span class="integer">1</span>,<span class="integer">3</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+gremlin>
+<span class="comment">// 3.7.4 - modern graph examples demonstrating too many results with skip in repeat due to global counters</span>
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(<span class="integer">1</span>).repeat(out().skip(<span class="integer">1</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>ripple
+==>lop
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(<span class="integer">1</span>).out().skip(<span class="integer">1</span>).out().skip(<span class="integer">1</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>lop
+
+<span class="comment">// 3.8.0 - grateful dead graph examples producing results as limit counters tracked per iteration</span>
+gremlin> g.V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">JAM</span><span class="delimiter">'</span></span>).repeat(out(<span class="string"><span class="delimiter">'</span><span class="content">followedBy</span><span class="delimiter">'</span></span>).limit(<span class="integer">2</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>HURTS ME TOO
+==>BLACK THROATED WIND
+gremlin> g.V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">DRUMS</span><span class="delimiter">'</span></span>).repeat(__.in(<span class="string"><span class="delimiter">'</span><span class="content">followedBy</span><span class="delimiter">'</span></span>).range(<span class="integer">1</span>,<span class="integer">3</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>DEAL
+==>WOMEN ARE SMARTER
+<span class="comment">// 3.8.0 - modern graph examples demonstrating consistent skip semantics</span>
+gremlin> g.V(<span class="integer">1</span>).repeat(out().skip(<span class="integer">1</span>)).times(<span class="integer">2</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>lop
+gremlin> g.V(<span class="integer">1</span>).out().skip(<span class="integer">1</span>).out().skip(<span class="integer">1</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
+==>lop</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This change ensures that <code>limit()</code>, <code>skip()</code>, and <code>range()</code> steps called with default <code>Scope</code> or explicit <code>Scope.global</code>
+inside <code>repeat()</code> are more consistent with manually unrolled traversals. Before upgrading, users should determine if any
+traversals use <code>limit()</code>, skip()<code>, or `range()</code> with default <code>Scope</code> or explicit <code>Scope.global</code> inside <code>repeat()</code>. If it
+is desired that the limit or range should apply across all loops then the <code>limit()</code>, <code>skip()</code>, or <code>range()</code> step should
+be moved out of the <code>repeat()</code> step.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_upgrading_for_providers">Upgrading for Providers</h3>
+<div class="sect3">
+<h4 id="_graph_system_providers">Graph System Providers</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_type_predicate_2">Type Predicate</h4>
+<div class="paragraph">
+<p>The P.typeOf(String) predicate accepts custom type names registered in the <code>GlobalTypeCache</code>. Unregistered strings will
+throw an <code>IllegalArgumentException</code> upon execution. Providers who wish to enable type comparison with custom data types
+should register it into the cache, and provide documentations on the correct type name for users.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://tinkerpop.apache.org/docs/3.8.0/dev/provider/#_comparability_of_types">Comparability of Types</a></p>
+</div>
+<div class="sect4">
+<h5 id="_nonestep_renaming">NoneStep Renaming</h5>
+<div class="paragraph">
+<p>The <code>DiscardStep</code> is now renamed to <code>DiscardStep</code>. Providers who developed strategies or other optimizations around
+<code>DiscardStep</code> should switch to <code>DiscardStep</code>. Note that <code>DiscardStep</code> has been repurposed as <code>none(P)</code> for filtering
+collections as a complement to <code>any(P)</code> and <code>all(P)</code>.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_added_notp">Added <code>NotP</code></h5>
+<div class="paragraph">
+<p>Added a new subclass of <code>P</code> to model negated predicates. This has been introduced as the previous system of taking the
+complementary PBiPredicate during negation does not account for edge cases involving illegal comparisons:</p>
+</div>
+<div class="paragraph">
+<p><code>!(1 < NaN) != (1 >= NaN)</code> → <code>!(FALSE) != (FALSE)</code></p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3173">TINKERPOP-3173</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_set_minimum_java_version_to_11_2">Set minimum Java version to 11</h5>
+<div class="paragraph">
+<p>TinkerPop 3.8 requires a minimum of Java 11 for building and running. Support for Java 1.8 has been dropped.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_test_suite_changes">Test Suite Changes</h5>
+<div class="paragraph">
+<p>In 3.6.0, providers were encouraged to begin using the Gherkin test suite for testing Gremlin rather than the original
+Java-based testing found in the <code>ProcessStandardSuite</code> and/or the <code>ProcessComputerSuite</code>. At that stage, the Gherkin
+suite was still being developed to match the features of the earlier framework. As of 3.8.0, the Gherkin-based tests now
+represent the primary way that Gremlin tests are developed, and the old system has fallen behind. The old suites have
+been deprecated in favor of the Gherkin test suite, and providers should upgrade their implementations accordingly.
+Going forward, the expectation is that the old Java-based suite will continue to exist, but will be focused on covering
+test scenarios that cover either Java-specific syntax, lambdas, or other cases that only fall into Gremlin embedded use
+cases. Graphs that need to support those cases would implement the <code>ProcessEmbeddedStandardSuite</code> and/or
+<code>ProcessEmbeddedComputerSuite</code>.</p>
+</div>
+<div class="paragraph">
+<p>Details on implementing the Gherkin tests can be found in the
+<a href="https://tinkerpop.apache.org/docs/3.8.0/dev/provider/#gherkin-tests-suite">Provider Documentation</a>.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3136">TINKERPOP-3136</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_gherkin_syntax_for_side_effects">New Gherkin Syntax for Side Effects</h5>
+<div class="paragraph">
+<p>Added new syntax to the gherkin feature tests to directly add side effects to traversals.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Given the modern graph
+And using the side effect x defined as "v[marko].id"</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Our complete Gherkin syntax for feature tests can be found in the <a href="https://tinkerpop.apache.org/docs/3.8.0/dev/developer/#_given">Developer Documentation</a>.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_auto_promotion_of_numbers_2">Auto-promotion of Numbers</h5>
+<div class="paragraph">
+<p>Previously, operations like <code>sum</code> or <code>sack</code> that involved mathematical calculations did not automatically promote the
+result to a larger numeric type (e.g., from <code>int</code> to <code>long</code>) when needed. As a result, values could wrap around within
+their current type, leading to unexpected behavior. This issue has now been resolved by enabling automatic type
+promotion for results.</p>
+</div>
+<div class="paragraph">
+<p>Now, any mathematical operations such as <code>Add</code>, <code>Sub</code>, <code>Mul</code>, and Div will now automatically promote to the next numeric type
+if an overflow is detected. For integers, the promotion sequence is: byte → short → int → long → overflow exception. For
+floating-point numbers, the sequence is: float → double → infinity.</p>
+</div>
+<div class="paragraph">
+<p>As a example, in earlier versions, the following query:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">g.withSack(<span class="integer">32767</span>s).inject(<span class="integer">1</span>s).sack(sum).sack()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>would return a <code>short</code> overflow exception or wrap to <code>-1</code> depending on language, but now returns <code>32769i</code>.</p>
+</div>
+<div class="paragraph">
+<p>See <a href="https://issues.apache.org/jira/browse/TINKERPOP-3115">TINKERPOP-3115</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_choose_semantics_2">choose() Semantics</h5>
+<div class="paragraph">
+<p>The semantics for the <code>choose()</code> step where adjusted a bit for consistency and clarity. The current semantics can be
+found in the <a href="https://tinkerpop.apache.org/docs/3.8.0/dev/provider/#choose-step">Provider Documentation</a>. In
+addition the following points could be important for providers when upgrading.</p>
+</div>
+<div class="paragraph">
+<p><strong>T.label Usage</strong></p>
+</div>
+<div class="paragraph">
+<p>When using <code>T.label</code> with <code>choose()</code>, the implementation now uses a more efficient <code>TokenTraversal</code> instead of a
+<code>LambdaMapTraversal</code>.</p>
+</div>
+<div class="paragraph">
+<p><strong>Predicate Usage</strong></p>
+</div>
+<div class="paragraph">
+<p>When using predicates (<code>P</code>) with <code>choose()</code>, the implementation now prefers the use of <code>is()</code> for more concrete
+predicate handling rather than using a more abstract <code>PredicateTraverser</code>.</p>
+</div>
+<div class="paragraph">
+<p><strong>ChooseSemantics enum</strong></p>
+</div>
+<div class="paragraph">
+<p>The <code>ChooseStep</code> now provides a <code>ChooseSemantics</code> enum which helps indicate if the step is configured to work with
+<code>IF_THEN</code> or <code>SWITCH</code> semantics which might be helpful in trying to optimize the step.</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3178">TINKERPOP-3178</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_prefer_offsetdatetime_2">Prefer OffsetDateTime</h5>
+<div class="paragraph">
+<p>The default implementation for date type in Gremlin is now changed from the deprecated <code>java.util.Date</code> to the more
+encompassing <code>java.time.OffsetDateTime</code>. This means the reference implementation for all date manipulation steps,
+<code>asDate()</code>, <code>dateAdd()</code>, and <code>dateDiff()</code>, as well as helper methods <code>datetime()</code>, will return <code>OffsetDateTime</code>, whose
+string representation will be in ISO 8601 format.</p>
+</div>
+<div class="paragraph">
+<p><code>Date</code> is still supported as incoming traverser results for these steps, as well as input into <code>dateDiff()</code> for
+compatibility purposes. All dates are assumed to be in <code>UTC</code> (given epoch time).</p>
+</div>
+<div class="paragraph">
+<p>This may impact providers who use TinkerGraph or whose implementation store dates as <code>java.util.Date</code>. While steps will
+support <code>Date</code>, all date manipulations will output <code>OffsetDateTime</code>. If a user had persisted <code>Date</code> objects in the
+database, upgrading to 3.8 may lead to the database having both types stored. It is recommended for users to perform
+transformation of <code>Date</code> to <code>OffsetDateTime</code> to retain consistency.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_propertymapstep_semantics">PropertyMapStep Semantics</h5>
+<div class="paragraph">
+<p>The semantics have changed for the handling of by modulators to the <code>valueMap</code> and <code>propertyMap</code> steps. Only one by
+modulator is required to be accepted and an exception should be thrown when there are more than one <code>by()</code> modulators.
+The exception thrown should contain the following: <code>valueMap()</code> and <code>propertyMap()</code> step can only have one by
+modulator".</p>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-2974">TINKERPOP-2974</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_grammar_type_renaming">Grammar Type Renaming</h5>
+<div class="paragraph">
+<p>All the following types in the grammar have been renamed to follow consistent rules:</p>
+</div>
+<div class="paragraph">
+<p><code>genericLiteralArgument</code> → <code>genericArgument</code>
+<code>stringLiteralVarargsArgument</code> → <code>stringNullableArgumentVarargs</code>
+<code>genericLiteralMapArgument</code> → <code>genericMapArgument</code>
+<code>genericLiteralMapNullable</code> → <code>genericMapNullableLiteral</code>
+<code>genericLiteralMapNullableArgument</code> → <code>genericMapNullableArgument</code>
+<code>traversalStrategyList</code> → <code>traversalStrategyVarargs</code>
+<code>genericLiteralVarargs</code> → <code>genericArgumentVarags</code>
+<code>genericLiteralCollection</code> → <code>genericCollectionLiteral</code>
+<code>genericLiteralList</code> → <code>genericLiteralVarargs</code>
+<code>genericLiteralRange</code> → <code>genericRangeLiteral</code>
+<code>stringLiteralVarargs</code> → <code>stringNullableLiteralVarargs</code>
+<code>genericLiteralMap</code> → <code>genericMapLiteral</code></p>
+</div>
+<div class="paragraph">
+<p>Additionally, <code>genericLiteralListArgument</code> and <code>stringLiteralList</code> have been removed in favor of <code>genericArgumentVarags</code>
+and <code>stringNullableLiteralVarargs</code> respectively.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_removal_of_p_getoriginalvalue_2">Removal of P.getOriginalValue()</h5>
+<div class="paragraph">
+<p><code>P.getOriginalValue()</code> has been removed as it was not offering much value and was often confused with <code>P.getValue()</code>.
+Usage of <code>P.getOriginalValue()</code> often leads to unexpected results if called on a predicate which has had its value reset
+after construction. All usages of <code>P.getOriginalValue()</code> should be replaced with <code>P.getValue()</code>.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_introduction_of_step_interfaces">Introduction of Step Interfaces</h5>
+<div class="paragraph">
+<p>New interfaces step classes have been introduced to make it easier to supply alternative step class implementations.
+Interfaces have been introduced for <code>AddEdgeStep</code>, <code>AddPropertyStep</code>, <code>AddVertexStep</code>, <code>CallStep</code>, <code>GraphStep</code>,
+<code>IsStep</code>, <code>RangeGlobalStep</code>, <code>RangeLocalStep</code>, <code>TailGlobalStep</code>, <code>TailLocalStep</code>, and <code>VertexStep</code>.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_gvalue_step_parameterization">GValue Step Parameterization</h5>
+<div class="paragraph">
+<p>This release introduces <code>GValue</code> as a new representation of query parameters. GValue is designed to enable query caching
+capabilities by persisting query parameters further in the traversal lifecycle. Parameters in a <code>gremlin-lang</code> script
+are constructed into GValues and passed into <code>GraphTraversal</code>. The traversal is then populated with special
+<code>GValueHolder</code> placeholder steps, which are temporary non-executable steps which implement a corresponding step
+interface. TraversalStrategies are able to operate on these placeholder steps and update the traversal as normal. By
+default, there is a new <code>OptimizationStrategy</code>, <code>GValueReductionStrategy</code> which cleans up the traversal by reducing all
+<code>GValueHolder</code> steps with their corresponding concrete step object. Providers may choose disable this strategy in order
+to store a fully constructed and optimized traversal with parameters into a query cache.</p>
+</div>
+<div class="paragraph">
+<p>Some OptimizingStrategies will mutate the traversal based on the current value of a parameter. A simple example is
+<code>CountStrategy</code> which will replace <code>outE("knows").count().is(0)</code> with <code>not(outE("knows"))</code>. This sort
+of optimization presents a challenge for any provider who intends to swap the value of a parameter in the optimized
+traversal. To resolve this issue, each <code>Traversal</code> is now bound to a <code>GValueManager</code>, whose purpose is to track if a
+variable is "free" or "pinned". A "free" variable is one which can be substituted for any value without restriction. A
+pinned variable is one which must remain bound to the current value. By parameterizing the above example,
+<code>outE(GValue.of("edgeLabel", "knows")).count().is(GValue.of(count, 0))</code> will be optimized to
+<code>not(outE(GValue.of("edgeLabel", "knows")))</code>. In this case, the <code>GValueManager</code> will report "edgeLabel" as a free
+variable, as it can be substituted in the optimized traversal without any loss of meaning, however the variable "count"
+will be pinned as the optimized traversal is not valid for other values of "count".</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_decouple_internal_step_state_from_configuringparameterizing_interfaces">Decouple internal step state from <code>Configuring</code>/<code>Parameterizing</code> interfaces</h5>
+<div class="paragraph">
+<p>Previously <code>AddVertexStep</code>, <code>AddVertexStartStep</code>, <code>AddEdgeStep</code>, <code>AddEdgeStartStep</code>, and <code>AddPropertyStep</code> stored their
+internal state (id, label, properties, from/to vertices…​) in a <code>Parameters</code> object which was exposed via the
+<code>Configuring</code> and <code>Parameterizing</code> interfaces. These interfaces are primarily intended to support with()-modulation, and
+thus these steps had weird unintended behaviors when combined with with()-modulation. The following example shows how in
+3.7.4 TinkerGraph, with()-modulation can be used to append properties to an <code>addV()</code> step, which has never been an
+intended or documented behavior.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">gremlin> g.addV().with("name", "cole").valueMap()
+==>[name:[cole]]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This internal step state has now been decoupled from the <code>Configuring</code> and <code>Parameterizing</code> interfaces, which are now
+exclusively used for the purposes of with()-modulation. This change affects <code>AddVertexStep</code>, <code>AddVertexStartStep</code>,
+<code>AddEdgeStep</code>, <code>AddEdgeStartStep</code>, and <code>AddPropertyStep</code>. For all of these steps, <code>configure()</code> and <code>getParameters()</code>
+are now exclusively used for with()-modulation and cannot be used to read and write ids, labels, or properties. All
+accesses of these steps' internal data must now go through methods defined in the new <code>StepContract</code> interfaces:
+<code>AddVertexStepContract</code>, <code>AddEdgeStepContract</code>, and <code>AddPropertyStepContract</code>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="text">// Read label
+Object label = addVertexStep.getParameters().getRaw().get(T.label).get(0) // 3.7.4
+Object label = addVertexStep.getLabel() // 3.8.0
+
+// Set property
+addVertexStep.configure("name", "cole") // 3.7.4
+addVertexStep.addProperty("name", "cole") // 3.8.0
+
+// Get properties
+Map<Object, List<Object>> properties = addVertexStep.getParameters.getRaw() // 3.7.4
+Map<Object, List<Object>> properties = addVertexStep.getProperties() // 3.8.0</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-3193">TINKERPOP-3193</a></p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_graph_driver_providers">Graph Driver Providers</h4>
+<div class="sect4">
+<h5 id="_prefer_offsetdatetime_3">Prefer OffsetDateTime</h5>
+<div class="paragraph">
+<p>The default implementation for date type in Gremlin is now changed from the deprecated <code>java.util.Date</code> to the more
+encompassing <code>java.time.OffsetDateTime</code>. This means the reference implementation for all date manipulation steps,
+<code>asDate()</code>, <code>dateAdd()</code>, and <code>dateDiff()</code>, as well as helper methods <code>datetime()</code>, will return <code>OffsetDateTime</code>, whose
+string representation will be in ISO 8601 format.</p>
+</div>
+<div class="paragraph">
+<p>This means that drivers should use the extended <code>OffsetDateTime</code> type in the IO specs to serialize and deserialize
+native date objects.</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
<h1 id="_tinkerpop_3_7_0" class="sect0">TinkerPop 3.7.0</h1>
<div class="openblock partintro">
<div class="content">
@@ -1922,17 +3494,17 @@ TinkerPop exposes.
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_2">Upgrading for Users</h3>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_2">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers">Graph System Providers</h4>
+<h4 id="_graph_system_providers_2">Graph System Providers</h4>
</div>
<div class="sect3">
-<h4 id="_graph_driver_providers">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_2">Graph Driver Providers</h4>
</div>
</div>
@@ -1949,7 +3521,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_2">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_3">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_improved_server_memory_management">Improved Server Memory Management</h4>
<div class="paragraph">
@@ -2001,7 +3573,7 @@ Gremlin Javascript has been upgraded to
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_3">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_4">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_graphbinary_compatibility">GraphBinary Compatibility</h4>
<div class="paragraph">
@@ -2054,7 +3626,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_4">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_5">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_string_manipulation_steps">String Manipulation Steps</h4>
<div class="paragraph">
@@ -2436,9 +4008,9 @@ See: <a href="https://issues.apache.org/
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_2">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_3">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_2">Graph System Providers</h4>
+<h4 id="_graph_system_providers_3">Graph System Providers</h4>
<div class="sect4">
<h5 id="_multiproperty_and_metaproperty_test_tags">MultiProperty and MetaProperty Test Tags</h5>
<div class="paragraph">
@@ -2473,7 +4045,7 @@ graph. These tests should be skipped by
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_5">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_6">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_string_concat_step">String concat() Step</h4>
<div class="paragraph">
@@ -3044,9 +4616,9 @@ The following are examples used by Tinke
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_3">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_4">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_driver_providers_2">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_3">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_gremlin_net_nullable_reference_types">Gremlin.NET: Nullable Reference Types</h5>
<div class="paragraph">
@@ -3068,7 +4640,7 @@ This update also converted some of these
</div>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_3">Graph System Providers</h4>
+<h4 id="_graph_system_providers_4">Graph System Providers</h4>
<div class="sect4">
<h5 id="_reworked_gremlin_socket_server">Reworked Gremlin Socket Server</h5>
<div class="paragraph">
@@ -3141,7 +4713,7 @@ In previous version <code>toString</code
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_6">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_7">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_runtime_updates">Runtime Updates</h4>
<div class="paragraph">
@@ -3163,7 +4735,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_7">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_8">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_runtime_version_upgrades">Runtime Version Upgrades</h4>
<div class="paragraph">
@@ -3202,7 +4774,7 @@ Gremlin.Net driver expected.</p>
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_4">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_5">Upgrading for Providers</h3>
<div class="paragraph">
<p>The <code>HttpGremlinRequestEncoder</code> constructor has been deprecated in favor of one with an additional parameter
<code>boolean userAgentEnabled</code>. User agent HTTP headers can now be encoded if this flag is enabled.</p>
@@ -3221,7 +4793,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_8">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_9">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_http_plain_text">HTTP Plain Text</h4>
<div class="paragraph">
@@ -3300,7 +4872,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_9">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_10">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_deprecation_warning_for_go_1_17">Deprecation Warning for Go 1.17</h4>
<div class="paragraph">
@@ -3310,9 +4882,9 @@ supported. Upcoming releases of <code>gr
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_5">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_6">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_4">Graph System Providers</h4>
+<h4 id="_graph_system_providers_5">Graph System Providers</h4>
<div class="sect4">
<h5 id="_writing_and_deleting_extension_to_mutating_interface">Writing and Deleting Extension to Mutating Interface</h5>
<div class="paragraph">
@@ -3343,7 +4915,7 @@ with these interfaces even though they c
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_10">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_11">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_changes_to_mergeve_semantics">Changes to mergeV/E semantics</h4>
<div class="paragraph">
@@ -3371,9 +4943,9 @@ will come from <code>Merge.inV/outV</cod
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_6">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_7">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_5">Graph System Providers</h4>
+<h4 id="_graph_system_providers_6">Graph System Providers</h4>
<div class="sect4">
<h5 id="_callbacks_for_graphmanager">Callbacks for GraphManager</h5>
<div class="paragraph">
@@ -3432,7 +5004,7 @@ in this fashion (taken from TinkerGraph)
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_11">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_12">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_graphbinary_default_serialization">GraphBinary Default Serialization</h4>
<div class="paragraph">
@@ -3461,7 +5033,7 @@ serialization format.</p>
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_12">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_13">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_element_step">element() Step</h4>
<div class="paragraph">
@@ -4255,9 +5827,9 @@ is specified, that cardinality will be a
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_7">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_8">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_6">Graph System Providers</h4>
+<h4 id="_graph_system_providers_7">Graph System Providers</h4>
<div class="sect4">
<h5 id="_gherkin_tests">Gherkin Tests</h5>
<div class="paragraph">
@@ -4437,7 +6009,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_13">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_14">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_runtime_version_upgrades_2">Runtime Version Upgrades</h4>
<div class="paragraph">
@@ -4492,7 +6064,7 @@ serializer configuration.</p>
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_14">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_15">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_deprecation_warning_for_node_10_and_go_1_17">Deprecation Warning for Node 10 and Go 1.17</h4>
<div class="paragraph">
@@ -4551,9 +6123,9 @@ testing this behavior improved its compi
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_8">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_9">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_7">Graph System Providers</h4>
+<h4 id="_graph_system_providers_8">Graph System Providers</h4>
<div class="sect4">
<h5 id="_traversalstrategy_expectations">TraversalStrategy Expectations</h5>
<div class="paragraph">
@@ -4606,7 +6178,7 @@ work correctly with not only <code>Itera
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_15">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_16">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_net_add_logging">Gremlin.NET: Add logging</h4>
<div class="paragraph">
@@ -4735,7 +6307,7 @@ handshake timeout has been removed. The
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_16">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_17">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_sparkioutil_utility">SparkIOUtil utility</h4>
<div class="paragraph">
@@ -4868,7 +6440,7 @@ drc.open().<span class="keyword">catch</
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_17">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_18">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_net_websocket_compression_support">.NET WebSocket Compression Support</h4>
<div class="paragraph">
@@ -4917,7 +6489,7 @@ Console.WriteLine(translator.Translate(t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_18">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_19">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_tx_in_net_and_python">Tx() in .NET and Python</h4>
<div class="paragraph">
@@ -5150,7 +6722,7 @@ Display stack trace? [yN]</code></pre>
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_19">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_20">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_tx_in_javascript">tx() in Javascript</h4>
<div class="paragraph">
@@ -5200,7 +6772,7 @@ a worthwhile change to take, so as to he
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_20">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_21">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_host_language_runtimes">Host Language Runtimes</h4>
<div class="paragraph">
@@ -6283,9 +7855,9 @@ release:</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_9">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_10">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_8">Graph System Providers</h4>
+<h4 id="_graph_system_providers_9">Graph System Providers</h4>
<div class="sect4">
<h5 id="_server_authorization">Server Authorization</h5>
<div class="paragraph">
@@ -6695,7 +8267,7 @@ volatile and may change.</p>
</div>
</div>
<div class="sect3">
-<h4 id="_graph_driver_providers_3">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_4">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_traversalopprocessor_side_effects">TraversalOpProcessor Side-effects</h5>
<div class="paragraph">
@@ -6770,7 +8342,7 @@ complete list of all the modifications t
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_21">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_22">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_barrier_control">barrier() Control</h4>
<div class="paragraph">
@@ -6853,7 +8425,7 @@ Final Traversal [Tink
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_22">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_23">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_python_timeout_issue">Python Timeout Issue</h4>
<div class="paragraph">
@@ -6907,7 +8479,7 @@ configuration described in <a href="http
</table>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_23">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_24">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_translator_implementations">Translator Implementations</h4>
<div class="paragraph">
@@ -7187,9 +8759,9 @@ requests.) As a final note, <code>Defaul
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_10">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_11">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_9">Graph System Providers</h4>
+<h4 id="_graph_system_providers_10">Graph System Providers</h4>
<div class="sect4">
<h5 id="_custom_traverserset">Custom TraverserSet</h5>
<div class="paragraph">
@@ -7217,7 +8789,7 @@ constructing their own <code>Traversal</
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_24">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_25">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_net_automatic_reconnect">Gremlin.NET: Automatic Reconnect</h4>
<div class="paragraph">
@@ -7243,7 +8815,7 @@ server has closed connections which some
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_25">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_26">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_clear_screen_command">Clear Screen Command</h4>
<div class="paragraph">
@@ -7268,7 +8840,7 @@ specific clear operations and provides a
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_26">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_27">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_drop_properties">drop() Properties</h4>
<div class="paragraph">
@@ -7313,7 +8885,7 @@ was quickly patched. Users and providers
</table>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_27">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_28">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_bystring_modulator">by(String) Modulator</h4>
<div class="paragraph">
@@ -7571,9 +9143,9 @@ gremlin> g.E().properties().dedup()
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_11">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_12">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_driver_providers_4">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_5">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_graphbinary_api_change">GraphBinary API Change</h5>
<div class="paragraph">
@@ -7608,7 +9180,7 @@ own <code>SerializationException</code>.
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_28">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_29">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_python_graphbinary">Python GraphBinary</h4>
<div class="paragraph">
@@ -7719,7 +9291,7 @@ gremlin> g.E(11).elementMap()
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.4.3/CHANGELOG.asciidoc#release-3-4-3">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_29">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_30">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_deprecated_store">Deprecated store()</h4>
<div class="paragraph">
@@ -7750,9 +9322,9 @@ GraphBinary. Note that Gremlin Console i
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_12">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_13">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_driver_providers_5">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_6">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_gremlin_server_test_configuration">Gremlin Server Test Configuration</h5>
<div class="paragraph">
@@ -7793,7 +9365,7 @@ hopefully reduce development friction.</
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.4.2/CHANGELOG.asciidoc#release-3-4-2">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_30">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_31">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_per_request_options_2">Per Request Options</h4>
<div class="paragraph">
@@ -7831,9 +9403,9 @@ consistent and intuitive behavior.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_13">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_14">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_10">Graph System Providers</h4>
+<h4 id="_graph_system_providers_11">Graph System Providers</h4>
<div class="sect4">
<h5 id="_warnings">Warnings</h5>
<div class="paragraph">
@@ -7848,7 +9420,7 @@ will print the messages to the console a
</div>
</div>
<div class="sect3">
-<h4 id="_graph_driver_providers_6">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_7">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_graphbinary_api_change_2">GraphBinary API Change</h5>
<div class="paragraph">
@@ -7874,7 +9446,7 @@ of a message. Additionally, the unused p
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.4.1/CHANGELOG.asciidoc#release-3-4-1">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_31">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_32">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_mix_sparql_and_gremlin">Mix SPARQL and Gremlin</h4>
<div class="paragraph">
@@ -7919,7 +9491,7 @@ gremlin> g.sparql("SELECT * WHER
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_14">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_15">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_graph_database_providers">Graph Database Providers</h4>
<div class="sect4">
@@ -7948,7 +9520,7 @@ of a message. Additionally, the unused p
complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_32">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_33">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_sparql_gremlin">sparql-gremlin</h4>
<div class="paragraph">
@@ -8866,7 +10438,7 @@ pom.xml).</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_15">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_16">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_graph_database_providers_2">Graph Database Providers</h4>
<div class="sect4">
@@ -9061,7 +10633,7 @@ the extension model described above is t
</div>
</div>
<div class="sect3">
-<h4 id="_graph_driver_providers_7">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_8">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_deprecation_removal_in_remoteconnection">Deprecation Removal in RemoteConnection</h5>
<div class="paragraph">
@@ -9100,7 +10672,7 @@ so.</p>
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.11/CHANGELOG.asciidoc#release-3-3-11">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_33">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_34">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_glv_sessions">GLV Sessions</h4>
<div class="paragraph">
@@ -9149,7 +10721,7 @@ connection.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_16">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_17">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_gremlin_driver_providers">Gremlin Driver Providers</h4>
<div class="sect4">
@@ -9179,7 +10751,7 @@ resources.</p>
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.10/CHANGELOG.asciidoc#release-3-3-10">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_34">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_35">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_traversal_clone">Traversal Clone</h4>
<div class="paragraph">
@@ -9240,7 +10812,7 @@ such.</p>
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.9/CHANGELOG.asciidoc#release-3-3-9">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_35">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_36">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_reservedkeysverificationstrategy">ReservedKeysVerificationStrategy</h4>
<div class="paragraph">
@@ -9321,7 +10893,7 @@ replaced by <code>evaluationTimeout</cod
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.8/CHANGELOG.asciidoc#release-3-3-8">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_36">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_37">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_branch_steps_accept_predicates_and_traversals">Branch Steps Accept Predicates and Traversals</h4>
<div class="paragraph">
@@ -9461,7 +11033,7 @@ gremlin> t.getSideEffects().get('p')
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.7/CHANGELOG.asciidoc#release-3-3-7">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_37">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_38">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_javascript_dsl_pattern">JavaScript DSL Pattern</h4>
<div class="paragraph">
@@ -9542,7 +11114,7 @@ gremlin> :install org.gperfutils gpro
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_17">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_18">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_graph_database_providers_3">Graph Database Providers</h4>
<div class="sect4">
@@ -9598,7 +11170,7 @@ WARN org.apache.tinkerpop.gremlin.proce
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.6/CHANGELOG.asciidoc#release-3-3-6">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_38">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_39">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_anti_patterns_documentation">Anti-Patterns Documentation</h4>
<div class="paragraph">
@@ -9624,7 +11196,7 @@ traversals. The new Anti-Patterns Sectio
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.5/CHANGELOG.asciidoc#release-3-3-5">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_39">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_40">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_anonymoustraversalsource">AnonymousTraversalSource</h4>
<div class="paragraph">
@@ -9711,7 +11283,7 @@ for the least amount of data necessary t
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_18">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_19">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_graph_database_providers_4">Graph Database Providers</h4>
<div class="sect4">
@@ -9743,7 +11315,7 @@ Hopefully, this feature will make multip
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.4/CHANGELOG.asciidoc#release-3-3-4">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_40">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_41">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_introducing_order_asc_and_order_desc">Introducing Order.asc and Order.desc</h4>
<div class="paragraph">
@@ -9780,7 +11352,7 @@ can compete with the <code>scriptEvaluat
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.3/CHANGELOG.asciidoc#release-3-3-3">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_41">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_42">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_credential_dsl_changes">Credential DSL Changes</h4>
<div class="paragraph">
@@ -9816,7 +11388,7 @@ credentials.users(<span class="string"><
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.2/CHANGELOG.asciidoc#release-3-3-2">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_42">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_43">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_python_sets">Gremlin Python Sets</h4>
<div class="paragraph">
@@ -9858,7 +11430,7 @@ require a <code>Set</code> will need to
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asciidoc#release-3-3-1">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_43">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_44">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_python_path">Gremlin Python path()</h4>
<div class="paragraph">
@@ -10046,7 +11618,7 @@ the old versions. The defaults have now
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_19">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_20">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -10101,7 +11673,7 @@ information, the provider could then ass
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.3.0/CHANGELOG.asciidoc#release-3-3-0">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_44">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_45">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_packaged_data_files">Packaged Data Files</h4>
<div class="paragraph">
@@ -10900,7 +12472,7 @@ the script.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_20">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_21">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -10915,7 +12487,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_11">Graph System Providers</h4>
+<h4 id="_graph_system_providers_12">Graph System Providers</h4>
<div class="sect4">
<h5 id="_gremlinplugin">GremlinPlugin</h5>
<div class="paragraph">
@@ -11039,7 +12611,7 @@ authentication messages. It only accepts
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.10/CHANGELOG.asciidoc#release-3-2-10">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_45">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_46">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_sasl_in_gremlin_javascript">SASL in Gremlin-Javascript</h4>
<div class="paragraph">
@@ -11187,7 +12759,7 @@ client.submit(script)
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_21">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_22">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_graph_database_providers_7">Graph Database Providers</h4>
<div class="sect4">
@@ -11217,7 +12789,7 @@ a easy way to get such a feature.</p>
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.9/CHANGELOG.asciidoc#release-3-2-9">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_46">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_47">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_lambda_construction">Lambda Construction</h4>
<div class="paragraph">
@@ -11251,7 +12823,7 @@ Display stack trace? [yN]n</code></pre>
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.8/CHANGELOG.asciidoc#release-3-2-8">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_47">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_48">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_improved_connection_monitoring">Improved Connection Monitoring</h4>
<div class="paragraph">
@@ -11310,9 +12882,9 @@ implementation to now use <code>P</code>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_22">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_23">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_12">Graph System Providers</h4>
+<h4 id="_graph_system_providers_13">Graph System Providers</h4>
<div class="sect4">
<h5 id="_kitchen_sink_test_graph">Kitchen Sink Test Graph</h5>
<div class="paragraph">
@@ -11340,7 +12912,7 @@ loading of the graph test data outside o
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.7/CHANGELOG.asciidoc#release-3-2-7">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_48">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_49">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_python_core_types">Gremlin-Python Core Types</h4>
<div class="paragraph">
@@ -11533,7 +13105,7 @@ implementations can simply add the new m
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_23">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_24">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_direction_both_requires_duplication_of_self_edges">Direction.BOTH Requires Duplication of Self-Edges</h4>
<div class="paragraph">
@@ -11555,7 +13127,7 @@ is both an incoming edge and an outgoing
<p><strong>Release Date: August 21, 2017</strong></p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_49">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_50">Upgrading for Users</h3>
<div class="paragraph">
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.6/CHANGELOG.asciidoc#release-3-2-6">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
@@ -11583,7 +13155,7 @@ authentication for both protocols in con
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_24">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_25">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_referencevertex_label">ReferenceVertex Label</h4>
<div class="paragraph">
@@ -11609,7 +13181,7 @@ different. If the vertex does not have a
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.5/CHANGELOG.asciidoc#release-3-2-5">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_50">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_51">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_dsl_support">DSL Support</h4>
<div class="paragraph">
@@ -11827,7 +13399,7 @@ client.close() <span class="comment">#
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_25">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_26">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -11877,7 +13449,7 @@ some <code>ProviderStrategies</code>. Mo
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.4/CHANGELOG.asciidoc#release-3-2-4">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_51">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_52">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_tinkergraph_deserialization">TinkerGraph Deserialization</h4>
<div class="paragraph">
@@ -12016,7 +13588,7 @@ removed.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_26">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_27">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -12206,7 +13778,7 @@ Base64 encoded string however as the old
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.3/CHANGELOG.asciidoc#release-3-2-3">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_52">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_53">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_renamed_null_result_preference">Renamed Null Result Preference</h4>
<div class="paragraph">
@@ -12356,7 +13928,7 @@ formats: GraphML, GraphSON and Gryo.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_27">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_28">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -12371,7 +13943,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_13">Graph System Providers</h4>
+<h4 id="_graph_system_providers_14">Graph System Providers</h4>
<div class="sect4">
<h5 id="_default_lazybarrierstrategy">Default LazyBarrierStrategy</h5>
<div class="paragraph">
@@ -12540,7 +14112,7 @@ and can simplify any and/or-tree walking
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.2/CHANGELOG.asciidoc#release-3-2-2">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_53">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_54">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_graphson_2_0">GraphSON 2.0</h4>
<div class="paragraph">
@@ -12625,7 +14197,7 @@ Console Preferences</a></p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_28">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_29">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -12640,7 +14212,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_14">Graph System Providers</h4>
+<h4 id="_graph_system_providers_15">Graph System Providers</h4>
<div class="sect4">
<h5 id="_deprecated_io_builder_registry">Deprecated Io.Builder.registry()</h5>
<div class="paragraph">
@@ -12710,7 +14282,7 @@ specific approach of serializing <code>B
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asciidoc#release-3-2-1">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_54">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_55">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gephi_plugin">Gephi Plugin</h4>
<div class="paragraph">
@@ -12826,7 +14398,7 @@ have to use the <code>-e</code> option.<
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_29">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_30">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -12841,7 +14413,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_15">Graph System Providers</h4>
+<h4 id="_graph_system_providers_16">Graph System Providers</h4>
<div class="sect4">
<h5 id="_vertexcomputing_api_change">VertexComputing API Change</h5>
<div class="paragraph">
@@ -12984,7 +14556,7 @@ to take arguments for the <code>Traversa
<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.0-incubating/CHANGELOG.asciidoc#tinkerpop-320-release-date-april-8-2016">changelog</a> for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_55">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_56">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_hadoop_filesystem_variable">Hadoop FileSystem Variable</h4>
<div class="paragraph">
@@ -13220,7 +14792,7 @@ to Gremlin Server (via driver or HTTP).<
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_30">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_31">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -13235,7 +14807,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_16">Graph System Providers</h4>
+<h4 id="_graph_system_providers_17">Graph System Providers</h4>
<div class="sect4">
<h5 id="_graphstep_compilation_requirement">GraphStep Compilation Requirement</h5>
<div class="paragraph">
@@ -13540,7 +15112,7 @@ for a complete list of all the modificat
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_56">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_57">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_graphml_xslt">GraphML XSLT</h4>
<div class="paragraph">
@@ -13567,7 +15139,7 @@ making it possible easily read in legacy
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_31">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_32">Upgrading for Providers</h3>
<div class="sect3">
<h4 id="_driver_providers_2">Driver Providers</h4>
<div class="sect4">
@@ -13598,7 +15170,7 @@ to proceed only when the server was full
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_57">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_58">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_java_driver_and_close">Java Driver and close()</h4>
<div class="paragraph">
@@ -13627,7 +15199,7 @@ potential to open additional resources d
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_58">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_59">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_server_workers">Gremlin Server Workers</h4>
<div class="paragraph">
@@ -13654,7 +15226,7 @@ acceptable even in that specific case.</
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_59">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_60">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_reserved_gremlin_server_keys">Reserved Gremlin Server Keys</h4>
<div class="paragraph">
@@ -13711,7 +15283,7 @@ those that block for an extended period
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_32">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_33">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -13797,7 +15369,7 @@ other implementations might, so the driv
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_60">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_61">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_aliasing_sessions">Aliasing Sessions</h4>
<div class="paragraph">
@@ -13886,7 +15458,7 @@ the server will either eventually close
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_33">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_34">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -13915,7 +15487,7 @@ has been moved to its own documentation
</div>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_17">Graph System Providers</h4>
+<h4 id="_graph_system_providers_18">Graph System Providers</h4>
<div class="sect4">
<h5 id="_graphprovider_clear_semantics">GraphProvider.clear() Semantics</h5>
<div class="paragraph">
@@ -13986,7 +15558,7 @@ local variable bindings in the console i
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_61">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_62">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_storage_io">Storage I/O</h4>
<div class="paragraph">
@@ -14156,7 +15728,7 @@ If using <code>supportsAddProperty()</co
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_34">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_35">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -14171,7 +15743,7 @@ changes there may prove important for th
</table>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_18">Graph System Providers</h4>
+<h4 id="_graph_system_providers_19">Graph System Providers</h4>
<div class="sect4">
<h5 id="_data_types_in_tests">Data Types in Tests</h5>
<div class="paragraph">
@@ -14291,7 +15863,7 @@ for a complete list of all the modificat
</ul>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_62">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_63">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_shading_jackson">Shading Jackson</h4>
<div class="paragraph">
@@ -14594,7 +16166,7 @@ script. For example once a <code>:remot
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_35">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_36">Upgrading for Providers</h3>
<div class="admonitionblock important">
<table>
<tr>
@@ -14614,7 +16186,7 @@ there was usage of the dependency by way
provider’s side.</p>
</div>
<div class="sect3">
-<h4 id="_graph_system_providers_19">Graph System Providers</h4>
+<h4 id="_graph_system_providers_20">Graph System Providers</h4>
<div class="sect4">
<h5 id="_graphstep_alterations">GraphStep Alterations</h5>
<div class="ulist">
@@ -14786,7 +16358,7 @@ made in the scope of that session.</p>
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_63">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_64">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_bulkloadervertexprogram_blvp">BulkLoaderVertexProgram (BLVP)</h4>
<div class="paragraph">
@@ -14832,9 +16404,9 @@ bug fixes around the protocol as it pert
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_36">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_37">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_driver_providers_8">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_9">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_gremlin_server_close_operation">Gremlin Server close Operation</h5>
<div class="paragraph">
@@ -14863,7 +16435,7 @@ explicitly and as needed.</p>
for a complete list of all the modifications that are part of this release.</p>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_users_64">Upgrading for Users</h3>
+<h3 id="_upgrading_for_users_65">Upgrading for Users</h3>
<div class="sect3">
<h4 id="_gremlin_server_2">Gremlin Server</h4>
<div class="paragraph">
@@ -14895,9 +16467,9 @@ resolved.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_upgrading_for_providers_37">Upgrading for Providers</h3>
+<h3 id="_upgrading_for_providers_38">Upgrading for Providers</h3>
<div class="sect3">
-<h4 id="_graph_system_providers_20">Graph System Providers</h4>
+<h4 id="_graph_system_providers_21">Graph System Providers</h4>
<div class="sect4">
<h5 id="_graphfactoryclass_annotation">GraphFactoryClass Annotation</h5>
<div class="paragraph">
@@ -14956,7 +16528,7 @@ there.</p>
</div>
</div>
<div class="sect3">
-<h4 id="_graph_driver_providers_9">Graph Driver Providers</h4>
+<h4 id="_graph_driver_providers_10">Graph Driver Providers</h4>
<div class="sect4">
<h5 id="_authentication">Authentication</h5>
<div class="paragraph">
@@ -15083,7 +16655,7 @@ gremlin> g.E()
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-10-21 19:51:57 UTC
+Last updated 2025-10-27 14:05:16 -0700
</div>
</div>
</body>