diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index dc4d68b..f75c9dc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -330,21 +330,6 @@
   public boolean incompatibleDisallowLegacyJavaInfo;
 
   @Option(
-      name = "incompatible_string_join_requires_strings",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
-      effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
-      metadataTags = {
-        OptionMetadataTag.INCOMPATIBLE_CHANGE,
-        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
-      },
-      help =
-          "If set to true, the argument of `string.join` must be an iterable whose elements are "
-              + "strings. If set to false, elements are first converted to string. "
-              + "See https://github.com/bazelbuild/bazel/issues/7802")
-  public boolean incompatibleStringJoinRequiresStrings;
-
-  @Option(
       name = "incompatible_disallow_struct_provider_syntax",
       defaultValue = "false",
       documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
@@ -646,7 +631,6 @@
             .incompatibleRemoveNativeMavenJar(incompatibleRemoveNativeMavenJar)
             .incompatibleRestrictNamedParams(incompatibleRestrictNamedParams)
             .incompatibleRunShellCommandString(incompatibleRunShellCommandString)
-            .incompatibleStringJoinRequiresStrings(incompatibleStringJoinRequiresStrings)
             .incompatibleVisibilityPrivateAttributesAtDefinition(
                 incompatibleVisibilityPrivateAttributesAtDefinition)
             .internalSkylarkFlagTestCanary(internalSkylarkFlagTestCanary)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index 5dfed56..8ffd56d 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -190,8 +190,6 @@
 
   public abstract boolean incompatibleRunShellCommandString();
 
-  public abstract boolean incompatibleStringJoinRequiresStrings();
-
   public abstract boolean incompatibleVisibilityPrivateAttributesAtDefinition();
 
   public abstract boolean internalSkylarkFlagTestCanary();
@@ -273,7 +271,6 @@
           .incompatibleRemoveNativeMavenJar(true)
           .incompatibleRunShellCommandString(false)
           .incompatibleRestrictNamedParams(true)
-          .incompatibleStringJoinRequiresStrings(true)
           .incompatibleVisibilityPrivateAttributesAtDefinition(false)
           .internalSkylarkFlagTestCanary(false)
           .incompatibleDoNotSplitLinkingCmdline(true)
@@ -353,8 +350,6 @@
 
     public abstract Builder incompatibleRunShellCommandString(boolean value);
 
-    public abstract Builder incompatibleStringJoinRequiresStrings(boolean value);
-
     public abstract Builder incompatibleVisibilityPrivateAttributesAtDefinition(boolean value);
 
     public abstract Builder internalSkylarkFlagTestCanary(boolean value);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
index da8be49..01781c4 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
@@ -109,22 +109,19 @@
             type = Object.class,
             doc = "The objects to join.")
       },
-      useLocation = true,
-      useStarlarkThread = true)
-  public String join(String self, Object elements, Location loc, StarlarkThread thread)
-      throws EvalException {
+      useLocation = true)
+  public String join(String self, Object elements, Location loc) throws EvalException {
     Collection<?> items = EvalUtils.toCollection(elements, loc);
-    if (thread.getSemantics().incompatibleStringJoinRequiresStrings()) {
-      for (Object item : items) {
-        if (!(item instanceof String)) {
-          throw new EvalException(
-              loc,
-              "sequence element must be a string (got '"
-                  + EvalUtils.getDataTypeName(item)
-                  + "'). See https://github.com/bazelbuild/bazel/issues/7802 for information about "
-                  + "--incompatible_string_join_requires_strings.");
-        }
+    int i = 0;
+    for (Object item : items) {
+      if (!(item instanceof String)) {
+        throw new EvalException(
+            loc,
+            String.format(
+                "expected string for sequence element %d, got '%s'",
+                i, EvalUtils.getDataTypeName(item)));
       }
+      i++;
     }
     return Joiner.on(self).join(items);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index 7a31a81..8dc3743 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -155,7 +155,6 @@
         "--incompatible_remove_native_maven_jar=" + rand.nextBoolean(),
         "--incompatible_restrict_named_params=" + rand.nextBoolean(),
         "--incompatible_run_shell_command_string=" + rand.nextBoolean(),
-        "--incompatible_string_join_requires_strings=" + rand.nextBoolean(),
         "--incompatible_visibility_private_attributes_at_definition=" + rand.nextBoolean(),
         "--incompatible_restrict_string_escapes=" + rand.nextBoolean(),
         "--incompatible_disallow_dict_lookup_unhashable_keys=" + rand.nextBoolean(),
@@ -205,7 +204,6 @@
         .incompatibleRemoveNativeMavenJar(rand.nextBoolean())
         .incompatibleRestrictNamedParams(rand.nextBoolean())
         .incompatibleRunShellCommandString(rand.nextBoolean())
-        .incompatibleStringJoinRequiresStrings(rand.nextBoolean())
         .incompatibleVisibilityPrivateAttributesAtDefinition(rand.nextBoolean())
         .incompatibleRestrictStringEscapes(rand.nextBoolean())
         .incompatibleDisallowDictLookupUnhashableKeys(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index 4f4f473..4459d1d 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -748,15 +748,9 @@
 
   @Test
   public void testStringJoinRequiresStrings() throws Exception {
-    new SkylarkTest("--incompatible_string_join_requires_strings")
+    new SkylarkTest()
         .testIfErrorContains(
-            "sequence element must be a string (got 'int')", "', '.join(['foo', 2])");
-  }
-
-  @Test
-  public void testStringJoinDoesNotRequireStrings() throws Exception {
-    new SkylarkTest("--incompatible_string_join_requires_strings=false")
-        .testEval("', '.join(['foo', 2])", "'foo, 2'");
+            "expected string for sequence element 1, got 'int'", "', '.join(['foo', 2])");
   }
 
   @Test
