[7.1.1] Revert "[7.1.0] Fix `bazel fetch` by replacing query with cquery for … (#21735)

…underlying implementation (#21567)"

This reverts commit bbd608c3b6f96d25decce91eec742fbf4a3535c2.

See
https://github.com/bazelbuild/bazel/issues/21728#issuecomment-2007967169
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 482444d..716b26c4 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -383,7 +383,6 @@
         "//src/main/java/com/google/devtools/build/lib/profiler/memory:allocationtracker",
         "//src/main/java/com/google/devtools/build/lib/query2",
         "//src/main/java/com/google/devtools/build/lib/query2:aquery-utils",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/query2/query/output",
         "//src/main/java/com/google/devtools/build/lib/runtime/events",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index c5e79a9..1a0b1ba 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.util.FileType;
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
index 26dc193..ca1a6e6 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.actions.Artifact.SourceArtifact;
 import com.google.devtools.build.lib.cmdline.LabelConstants;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.FileRootApi;
 import com.google.devtools.build.lib.vfs.Path;
@@ -165,7 +164,7 @@
     return INTERNER.intern(new ArtifactRoot(Root.fromPath(root), execPath, rootType));
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec.Instantiator
   static ArtifactRoot createForSerialization(
       Root rootForSerialization, PathFragment execPath, RootType rootType) {
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index 71ea06e..c8c6e19 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -179,7 +179,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:sane_analysis_exception",
         "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_aware_action",
         "//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_value",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
@@ -320,7 +319,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:detailed_exceptions",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
@@ -401,7 +399,6 @@
         ":has_digest",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/io:inconsistent_filesystem_exception",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileValue.java b/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
index 1453b49..3d26ea9 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
@@ -19,7 +19,6 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -151,7 +150,7 @@
   }
 
   /** Key type for FileValue. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<RootedPath> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -160,7 +159,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RootedPath arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index a82b60e..ec9dcde 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -17,8 +17,8 @@
 import com.google.auto.value.extension.memoized.Memoized;
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index a1ab16b..4d31fd6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -407,7 +407,6 @@
         "//src/main/java/com/google/devtools/build/lib/profiler",
         "//src/main/java/com/google/devtools/build/lib/profiler:google-auto-profiler-utils",
         "//src/main/java/com/google/devtools/build/lib/profiler/memory:current_rule_tracker",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/shell",
         "//src/main/java/com/google/devtools/build/lib/skyframe:aspect_key_creator",
         "//src/main/java/com/google/devtools/build/lib/skyframe:build_info_collection_value",
@@ -417,7 +416,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:starlark_builtins_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:workspace_status_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
@@ -694,7 +692,6 @@
         ":transitive_info_collection",
         "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
         "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
@@ -1229,7 +1226,6 @@
         ":transitive_info_provider_map",
         "//src/main/java/com/google/devtools/build/lib/collect",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -1385,7 +1381,6 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util",
@@ -2497,14 +2492,12 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/net/starlark/java/eval",
         "//src/main/java/net/starlark/java/syntax",
-        "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index aafa9ae..2a48c40 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -50,7 +50,7 @@
 import com.google.devtools.build.lib.packages.TestSize;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.packages.Type.ConversionException;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import javax.annotation.Nullable;
@@ -63,7 +63,7 @@
 
   private BaseRuleClasses() {}
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Attribute.ComputedDefault testonlyDefault =
       new Attribute.ComputedDefault() {
         @Override
@@ -77,7 +77,7 @@
         }
       };
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Attribute.ComputedDefault deprecationDefault =
       new Attribute.ComputedDefault() {
         @Override
@@ -91,7 +91,7 @@
         }
       };
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   public static final Attribute.ComputedDefault TIMEOUT_DEFAULT =
       new Attribute.ComputedDefault() {
         @Override
@@ -112,7 +112,7 @@
         }
       };
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   public static final Attribute.ComputedDefault packageMetadataDefault =
       new Attribute.ComputedDefault() {
         @Override
@@ -135,7 +135,7 @@
    * they only run on the target configuration and should not operate on action_listeners and
    * extra_actions themselves (to avoid cycles).
    */
-  @SerializationConstant @VisibleForSerialization @VisibleForTesting
+  @SerializationConstant @AutoCodec.VisibleForSerialization @VisibleForTesting
   static final LabelListLateBoundDefault<?> ACTION_LISTENER =
       LabelListLateBoundDefault.fromTargetConfiguration(
           BuildConfigurationValue.class,
@@ -143,7 +143,7 @@
 
   public static final String DEFAULT_COVERAGE_SUPPORT_VALUE = "//tools/test:coverage_support";
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Resolver<TestConfiguration, Label> COVERAGE_SUPPORT_CONFIGURATION_RESOLVER =
       (rule, attributes, configuration) -> configuration.getCoverageSupport();
 
@@ -156,7 +156,7 @@
   public static final String DEFAULT_COVERAGE_REPORT_GENERATOR_VALUE =
       "//tools/test:coverage_report_generator";
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Resolver<CoverageConfiguration, Label>
       COVERAGE_REPORT_GENERATOR_CONFIGURATION_RESOLVER =
           (rule, attributes, configuration) -> configuration.reportGenerator();
@@ -174,13 +174,13 @@
         CoverageConfiguration.class, null, COVERAGE_OUTPUT_GENERATOR_RESOLVER);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Resolver<CoverageConfiguration, Label> COVERAGE_OUTPUT_GENERATOR_RESOLVER =
       (rule, attributes, configuration) -> configuration.outputGenerator();
 
   // TODO(b/65746853): provide a way to do this without passing the entire configuration
   /** Implementation for the :run_under attribute. */
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   public static final LabelLateBoundDefault<?> RUN_UNDER =
       LabelLateBoundDefault.fromTargetConfiguration(
           BuildConfigurationValue.class,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
index af72a30..3db2dec 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
 import javax.annotation.Nullable;
 import net.starlark.java.eval.Dict;
@@ -36,7 +35,7 @@
  * their direct dependencies, only the corresponding {@link TransitiveInfoCollection}s. Also, {@link
  * ConfiguredTarget} objects should not be accessible from the action graph.
  */
-public interface ConfiguredTarget extends TransitiveInfoCollection, Structure, CqueryNode {
+public interface ConfiguredTarget extends TransitiveInfoCollection, Structure {
 
   /** All <code>ConfiguredTarget</code>s have a "label" field. */
   String LABEL_FIELD = "label";
@@ -45,7 +44,6 @@
   String FILES_FIELD = "files";
 
   /** Returns a key that may be used to lookup this {@link ConfiguredTarget}. */
-  @Override
   ActionLookupKey getLookupKey();
 
   @Override
@@ -53,7 +51,6 @@
     return getLookupKey().getLabel();
   }
 
-  @Override
   @Nullable
   default String getConfigurationChecksum() {
     return getConfigurationKey() == null ? null : getConfigurationKey().getOptions().checksum();
@@ -68,9 +65,8 @@
    * com.google.devtools.build.lib.analysis.configuredtargets.PackageGroupConfiguredTarget} for
    * which it is always <b>null</b>.
    *
-   * <p>If this changes, {@link AspectResolver#aspectMatchesConfiguredTarget} should be updated.
+   * <p>If this changes, {@link AspectResolver#aspecMatchesConfiguredTarget} should be updated.
    */
-  @Override
   @Nullable
   default BuildConfigurationKey getConfigurationKey() {
     return getLookupKey().getConfigurationKey();
@@ -93,7 +89,6 @@
    * If the configured target is an alias, return the actual target, otherwise return the current
    * target. This follows alias chains.
    */
-  @Override
   default ConfiguredTarget getActual() {
     return this;
   }
@@ -103,7 +98,6 @@
    * label. This is not the same as {@code getActual().getLabel()}, because it does not follow alias
    * chains.
    */
-  @Override
   default Label getOriginalLabel() {
     return getLabel();
   }
@@ -112,12 +106,10 @@
    * The configuration conditions that trigger this configured target's configurable attributes. For
    * targets that do not support configurable attributes, this will be an empty map.
    */
-  @Override
   default ImmutableMap<Label, ConfigMatchingProvider> getConfigConditions() {
     return ImmutableMap.of();
   }
 
-  @Override
   default boolean isRuleConfiguredTarget() {
     return false;
   }
@@ -127,7 +119,6 @@
    *
    * <p>Unwrapping is recursive if there are multiple layers.
    */
-  @Override
   default ConfiguredTarget unwrapIfMerged() {
     return this;
   }
@@ -137,7 +128,6 @@
    *
    * @return a map of provider names to their values, or null if there are no providers
    */
-  @Override
   @Nullable
   default Dict<String, Object> getProvidersDictForQuery() {
     return null;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
index a3458a5..7499663 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.server.FailureDetails.Execution;
 import com.google.devtools.build.lib.server.FailureDetails.Execution.Code;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.protobuf.Extension;
@@ -41,10 +41,11 @@
  * about rules to extra_actions.
  */
 public class PseudoAction<InfoType extends MessageLite> extends AbstractAction {
-  @VisibleForSerialization protected final UUID uuid;
+  @AutoCodec.VisibleForSerialization protected final UUID uuid;
   private final String mnemonic;
 
-  @VisibleForSerialization protected final Extension<ExtraActionInfo, InfoType> infoExtension;
+  @AutoCodec.VisibleForSerialization
+  protected final Extension<ExtraActionInfo, InfoType> infoExtension;
 
   private final InfoType info;
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 04854ed..91fcc27 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -38,7 +38,7 @@
 import com.google.devtools.build.lib.events.EventKind;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
 import com.google.devtools.build.lib.util.Fingerprint;
@@ -88,7 +88,7 @@
     }
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final EmptyFilesSupplier DUMMY_EMPTY_FILES_SUPPLIER = new DummyEmptyFilesSupplier();
 
   // It is important to declare this *after* the DUMMY_SYMLINK_EXPANDER to avoid NPEs
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
index 9560b21..cbe7eb5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
@@ -30,7 +30,6 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.profiler.AutoProfiler;
 import com.google.devtools.build.lib.profiler.GoogleAutoProfilerUtils;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -244,7 +243,7 @@
    *
    * <p>Always returns false for hidden rules and source file targets.
    */
-  public static boolean shouldConsiderForDisplay(CqueryNode configuredTarget) {
+  public static boolean shouldConsiderForDisplay(ConfiguredTarget configuredTarget) {
     // TODO(bazel-team): this is quite ugly. Add a marker provider for this check.
     if (configuredTarget instanceof InputFileConfiguredTarget) {
       // Suppress display of source files (because we do no work to build them).
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
index 9234406..3d3969a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.collect.ImmutableSharedKeyMap;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.packages.Provider;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import java.util.Map;
 import javax.annotation.Nullable;
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
index 0514de1..ab26b32 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
@@ -37,7 +37,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.OnDemandString;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
index ca9668e..889111f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -25,11 +25,12 @@
     ),
     deps = [
         "//src/main/java/com/google/devtools/build/lib/analysis:config/config_matching_provider",
+        "//src/main/java/com/google/devtools/build/lib/analysis:required_config_fragments_provider",
         "//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_provider",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:string",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
index 9f88d0e..9ee99af 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
 import java.util.Map;
 import net.starlark.java.eval.Dict;
@@ -59,7 +59,7 @@
     }
   }
 
-  @VisibleForSerialization final ImmutableSortedMap<String, Object> values;
+  @AutoCodec.VisibleForSerialization final ImmutableSortedMap<String, Object> values;
   private ImmutableSet<String> fieldNames; // initialized lazily (with monitor synchronization)
 
   /** Constructs a ToolchainInfo. The {@code values} map itself is not retained. */
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
index d00394c..44ff502 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
@@ -67,7 +67,7 @@
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.Interrupted;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
@@ -273,7 +273,7 @@
     registerAction(action);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final GeneratedMessage.GeneratedExtension<ExtraActionInfo, SpawnInfo> SPAWN_INFO =
       SpawnInfo.spawnInfo;
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
index 2ae61bdb..b72bde0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
@@ -35,7 +35,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.DirectoryExpander;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
@@ -113,7 +112,7 @@
       this.features = features;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static VectorArg create(int features) {
       return interner.intern(new VectorArg(features));
@@ -598,7 +597,7 @@
       this.hasFormat = hasFormat;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static ScalarArg create(boolean hasFormat) {
       return interner.intern(new ScalarArg(hasFormat));
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
index 2e23da9..9d44412 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
@@ -157,7 +157,6 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repo_recorded_input",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -252,10 +251,11 @@
     ],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllValue.java
index a0eaa8f..7e28315 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllValue.java
@@ -19,7 +19,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -48,7 +47,7 @@
   }
 
   /** Key type for BazelFetchAllValue. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<Boolean> {
     private static final SkyKeyInterner<BazelFetchAllValue.Key> interner = SkyKey.newInterner();
@@ -57,7 +56,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static BazelFetchAllValue.Key create(Boolean arg) {
       return interner.intern(new BazelFetchAllValue.Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleValue.java
index 77d9c06..54debf5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleValue.java
@@ -17,7 +17,6 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -69,7 +68,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RepositoryName arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
index 5c074c8..0ace636 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
@@ -45,10 +45,11 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
+        "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
-        "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
+        "//src/main/java/com/google/devtools/build/lib/query2/common:abstract-blaze-query-env",
+        "//src/main/java/com/google/devtools/build/lib/query2/common:universe-scope",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java
index d9d6447..f1cd851 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java
@@ -30,7 +30,6 @@
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
-import com.google.devtools.build.lib.query2.cquery.CqueryOptions;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
 import com.google.devtools.build.lib.runtime.BlazeCommand;
@@ -39,18 +38,17 @@
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
 import com.google.devtools.build.lib.runtime.LoadingPhaseThreadsOption;
-import com.google.devtools.build.lib.runtime.commands.TestCommand;
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.FetchCommand.Code;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
 import com.google.devtools.build.lib.skyframe.RepositoryMappingValue.RepositoryMappingResolutionException;
+import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.InterruptedFailureDetails;
 import com.google.devtools.build.skyframe.EvaluationContext;
 import com.google.devtools.build.skyframe.EvaluationResult;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.OptionsParsingResult;
 import java.util.List;
 import javax.annotation.Nullable;
@@ -58,16 +56,12 @@
 /** Fetches external repositories. Which is so fetch. */
 @Command(
     name = FetchCommand.NAME,
-    builds = true,
-    inherits = {TestCommand.class},
     options = {
       FetchOptions.class,
-      CqueryOptions.class,
       PackageOptions.class,
       KeepGoingOption.class,
       LoadingPhaseThreadsOption.class
     },
-    usesConfigurationOptions = true,
     help = "resource:fetch.txt",
     shortDescription = "Fetches external repositories that are prerequisites to the targets.",
     allowResidue = true,
@@ -77,14 +71,6 @@
   public static final String NAME = "fetch";
 
   @Override
-  public void editOptions(OptionsParser optionsParser) {
-    // We only need to inject these options with fetch target (when there is a residue)
-    if (!optionsParser.getResidue().isEmpty()) {
-      TargetFetcher.injectOptionsToFetchTarget(optionsParser);
-    }
-  }
-
-  @Override
   public BlazeCommandResult exec(CommandEnvironment env, OptionsParsingResult options) {
     BlazeCommandResult invalidResult = validateOptions(env, options);
     if (invalidResult != null) {
@@ -114,6 +100,7 @@
     BlazeCommandResult result;
     LoadingPhaseThreadsOption threadsOption = options.getOptions(LoadingPhaseThreadsOption.class);
     try {
+      env.syncPackageLoading(options);
       if (!options.getResidue().isEmpty()) {
         result = fetchTarget(env, options, options.getResidue());
       } else if (!fetchOptions.repos.isEmpty()) {
@@ -121,6 +108,9 @@
       } else { // --all, --configure, or just 'fetch'
         result = fetchAll(env, threadsOption, fetchOptions.configure);
       }
+    } catch (AbruptExitException e) {
+      return createFailedBlazeCommandResult(
+          env.getReporter(), e.getMessage(), e.getDetailedExitCode());
     } catch (InterruptedException e) {
       return createFailedBlazeCommandResult(
           env.getReporter(), "Fetch interrupted: " + e.getMessage());
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/TargetFetcher.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/TargetFetcher.java
index 71df720..94de6ab 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/TargetFetcher.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/TargetFetcher.java
@@ -14,39 +14,30 @@
 
 package com.google.devtools.build.lib.bazel.commands;
 
-import static com.google.common.collect.ImmutableMap.toImmutableMap;
-
 import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.buildtool.BuildRequest;
-import com.google.devtools.build.lib.buildtool.BuildResult;
-import com.google.devtools.build.lib.buildtool.BuildTool;
-import com.google.devtools.build.lib.buildtool.CqueryProcessor;
 import com.google.devtools.build.lib.cmdline.RepositoryMapping;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.cmdline.TargetPattern;
 import com.google.devtools.build.lib.cmdline.TargetPattern.Parser;
-import com.google.devtools.build.lib.query2.NamedThreadSafeOutputFormatterCallback;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
-import com.google.devtools.build.lib.query2.cquery.ConfiguredTargetQueryEnvironment;
-import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
+import com.google.devtools.build.lib.packages.LabelPrinter;
+import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.query2.common.AbstractBlazeQueryEnvironment;
+import com.google.devtools.build.lib.query2.common.UniverseScope;
+import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
+import com.google.devtools.build.lib.query2.engine.QueryEvalResult;
+import com.google.devtools.build.lib.query2.engine.QueryException;
 import com.google.devtools.build.lib.query2.engine.QueryExpression;
-import com.google.devtools.build.lib.query2.engine.QueryParser;
 import com.google.devtools.build.lib.query2.engine.QuerySyntaxException;
+import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
 import com.google.devtools.build.lib.runtime.LoadingPhaseThreadsOption;
+import com.google.devtools.build.lib.runtime.commands.QueryCommand;
 import com.google.devtools.build.lib.skyframe.RepositoryMappingValue.RepositoryMappingResolutionException;
-import com.google.devtools.common.options.OptionPriority.PriorityCategory;
-import com.google.devtools.common.options.OptionsParser;
-import com.google.devtools.common.options.OptionsParsingException;
 import com.google.devtools.common.options.OptionsParsingResult;
-import java.util.Collection;
+import java.io.IOException;
+import java.util.EnumSet;
 import java.util.List;
-import java.util.Optional;
-import java.util.function.Function;
-import java.util.stream.Stream;
 
 /** Fetches all repos needed for building a given set of targets. */
 public class TargetFetcher {
@@ -56,7 +47,7 @@
     this.env = env;
   }
 
-  /** Uses cquery to find and fetch all repos needed to build these targets */
+  /** Uses `deps` query to find and fetch all repos needed for these targets */
   public static void fetchTargets(
       CommandEnvironment env, OptionsParsingResult options, List<String> targets)
       throws RepositoryMappingResolutionException, InterruptedException, TargetFetcherException {
@@ -65,17 +56,28 @@
 
   private void fetchTargets(OptionsParsingResult options, List<String> targets)
       throws InterruptedException, TargetFetcherException, RepositoryMappingResolutionException {
-    QueryExpression expr = createQueryExpression(targets);
-    BuildRequest request = createBuildRequest(env, options, targets);
-    TargetPattern.Parser mainRepoTargetParser = getMainRepoMappingParser(env);
+    AbstractBlazeQueryEnvironment<Target> queryEnv = getQueryEnv(options);
+    QueryExpression expr = createQueryExpression(targets, queryEnv);
+    QueryEvalResult queryEvalResult;
+    try {
+      queryEvalResult =
+          queryEnv.evaluateQuery(
+              expr,
+              new ThreadSafeOutputFormatterCallback<>() {
+                @Override
+                public void processOutput(Iterable<Target> partialResult) {}
+              });
+    } catch (IOException e) {
+      // Should be impossible since our OutputFormatterCallback doesn't throw IOException.
+      throw new IllegalStateException(e);
+    } catch (QueryException e) {
+      throw new TargetFetcherException(
+          String.format(
+              "Fetching target dependencies for %s encountered an error: %s",
+              expr, e.getMessage()));
+    }
 
-    BuildResult result =
-        new BuildTool(
-                env,
-                new CqueryProcessor(
-                    expr, mainRepoTargetParser, Optional.of(createNoOutputFormatter())))
-            .processRequest(request, /* validator= */ null);
-    if (!result.getSuccess()) {
+    if (!queryEvalResult.getSuccess()) {
       throw new TargetFetcherException(
           String.format(
               "Fetching some target dependencies for %s failed, but --keep_going specified. "
@@ -84,59 +86,33 @@
     }
   }
 
-  /** Creates special output formatter for fetch that doesn't print anything */
-  private NamedThreadSafeOutputFormatterCallback<CqueryNode> createNoOutputFormatter() {
-    return new NamedThreadSafeOutputFormatterCallback<CqueryNode>() {
-      @Override
-      public String getName() {
-        return "no_output";
-      }
-
-      @Override
-      public void processOutput(Iterable<CqueryNode> partialResult) {
-        // Just do nothing!
-        // This will be later used to collect repos for vendoring
-      }
-    };
-  }
-
-  private BuildRequest createBuildRequest(
-      CommandEnvironment env, OptionsParsingResult options, List<String> targets) {
-    return BuildRequest.builder()
-        .setCommandName(env.getCommandName())
-        .setId(env.getCommandId())
-        .setOptions(options)
-        .setStartupOptions(env.getRuntime().getStartupOptionsProvider())
-        .setOutErr(env.getReporter().getOutErr())
-        .setTargets(targets)
-        .setStartTimeMillis(env.getCommandStartTime())
-        .setCheckforActionConflicts(false)
-        .setReportIncompatibleTargets(false)
-        .build();
-  }
-
-  private Parser getMainRepoMappingParser(CommandEnvironment env)
+  AbstractBlazeQueryEnvironment<Target> getQueryEnv(OptionsParsingResult options)
       throws RepositoryMappingResolutionException, InterruptedException {
+    boolean keepGoing = options.getOptions(KeepGoingOption.class).keepGoing;
+    LoadingPhaseThreadsOption threadsOption = options.getOptions(LoadingPhaseThreadsOption.class);
     RepositoryMapping repoMapping =
         env.getSkyframeExecutor()
-            .getMainRepoMapping(
-                env.getOptions().getOptions(KeepGoingOption.class).keepGoing,
-                env.getOptions().getOptions(LoadingPhaseThreadsOption.class).threads,
-                env.getReporter());
-    return new Parser(env.getRelativeWorkingDirectory(), RepositoryName.MAIN, repoMapping);
+            .getMainRepoMapping(keepGoing, threadsOption.threads, env.getReporter());
+    TargetPattern.Parser targetParser =
+        new Parser(env.getRelativeWorkingDirectory(), RepositoryName.MAIN, repoMapping);
+    return QueryCommand.newQueryEnvironment(
+        env,
+        keepGoing,
+        false,
+        UniverseScope.EMPTY,
+        threadsOption.threads,
+        EnumSet.noneOf(Setting.class),
+        /* useGraphlessQuery= */ true,
+        targetParser,
+        LabelPrinter.legacy());
   }
 
-  private QueryExpression createQueryExpression(List<String> targets)
+  private QueryExpression createQueryExpression(
+      List<String> targets, AbstractBlazeQueryEnvironment<Target> queryEnv)
       throws TargetFetcherException {
     String query = "deps(" + Joiner.on(" union ").join(targets) + ")";
-
-    ImmutableMap<String, QueryFunction> functions =
-        Stream.of(ConfiguredTargetQueryEnvironment.FUNCTIONS, env.getRuntime().getQueryFunctions())
-            .flatMap(Collection::stream)
-            .collect(toImmutableMap(QueryFunction::getName, Function.identity()));
-
     try {
-      return QueryParser.parse(query, functions);
+      return QueryExpression.parse(query, queryEnv);
     } catch (QuerySyntaxException e) {
       throw new TargetFetcherException(
           String.format(
@@ -145,29 +121,6 @@
     }
   }
 
-  static void injectOptionsToFetchTarget(OptionsParser optionsParser) {
-    try {
-      optionsParser.parse(
-          PriorityCategory.COMPUTED_DEFAULT,
-          "Options required to fetch target",
-          ImmutableList.of("--nobuild"));
-      optionsParser.parse(
-          PriorityCategory.COMPUTED_DEFAULT,
-          "Fetch target should include 'tags = [\"manual\"]' targets by default",
-          ImmutableList.of("--build_manual_tests"));
-      optionsParser.parse(
-          PriorityCategory.SOFTWARE_REQUIREMENT,
-          "Fetch target should not exclude test_suite rules",
-          ImmutableList.of("--noexpand_test_suites"));
-      optionsParser.parse(
-          PriorityCategory.SOFTWARE_REQUIREMENT,
-          "Fetch target should not exclude tests",
-          ImmutableList.of("--nobuild_tests_only"));
-    } catch (OptionsParsingException e) {
-      throw new IllegalStateException("Fetch target needed options failed to parse", e);
-    }
-  }
-
   static class TargetFetcherException extends Exception {
     public TargetFetcherException(String message) {
       super(message);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BUILD
index 900f1ab..72e5894 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BUILD
@@ -40,7 +40,6 @@
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
         "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation",
         "//src/main/java/com/google/devtools/build/lib/rules/java:java-rules",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
index d837998..dba04ab 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
@@ -19,14 +19,14 @@
 import com.google.devtools.build.lib.rules.java.BuildInfoPropertiesTranslator;
 import com.google.devtools.build.lib.rules.java.GenericBuildInfoPropertiesTranslator;
 import com.google.devtools.build.lib.rules.java.JavaBuildInfoFactory;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 
 /**
  * BuildInfoFactory for Java.
  */
 public class BazelJavaBuildInfoFactory extends JavaBuildInfoFactory {
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final GenericBuildInfoPropertiesTranslator VOLATILE_KEYS =
       new GenericBuildInfoPropertiesTranslator(
           ImmutableMap.<String, String>builder()
@@ -35,12 +35,12 @@
               .put("build.timestamp", "%BUILD_TIMESTAMP%")
               .buildOrThrow());
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final GenericBuildInfoPropertiesTranslator NONVOLATILE_KEYS =
       new GenericBuildInfoPropertiesTranslator(
           ImmutableMap.of("build.label", "%" + BuildInfo.BUILD_EMBED_LABEL + "|%"));
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final GenericBuildInfoPropertiesTranslator REDACTED_KEYS =
       new GenericBuildInfoPropertiesTranslator(
           ImmutableMap.<String, String>builder()
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/CqueryProcessor.java b/src/main/java/com/google/devtools/build/lib/buildtool/CqueryProcessor.java
index 64fac98..d2a6079 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/CqueryProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/CqueryProcessor.java
@@ -14,11 +14,10 @@
 package com.google.devtools.build.lib.buildtool;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.cmdline.TargetPattern;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.query2.NamedThreadSafeOutputFormatterCallback;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.ConfiguredTargetQueryEnvironment;
 import com.google.devtools.build.lib.query2.cquery.CqueryOptions;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
@@ -27,30 +26,14 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.WalkableGraph;
 import java.util.Collection;
-import java.util.Optional;
 import net.starlark.java.eval.StarlarkSemantics;
 
 /** Performs {@code cquery} processing. */
-public final class CqueryProcessor extends PostAnalysisQueryProcessor<CqueryNode> {
-
-  /**
-   * Only passed when this is a call from a non query command like Fetch or Vendor, where we don't
-   * need the output printed
-   */
-  private Optional<NamedThreadSafeOutputFormatterCallback<CqueryNode>> noOutputFormatter;
+public final class CqueryProcessor extends PostAnalysisQueryProcessor<ConfiguredTarget> {
 
   public CqueryProcessor(
       QueryExpression queryExpression, TargetPattern.Parser mainRepoTargetParser) {
     super(queryExpression, mainRepoTargetParser);
-    this.noOutputFormatter = Optional.empty();
-  }
-
-  public CqueryProcessor(
-      QueryExpression queryExpression,
-      TargetPattern.Parser mainRepoTargetParser,
-      Optional<NamedThreadSafeOutputFormatterCallback<CqueryNode>> noOutputFormatter) {
-    this(queryExpression, mainRepoTargetParser);
-    this.noOutputFormatter = noOutputFormatter;
   }
 
   @Override
@@ -83,7 +66,6 @@
         request.getTopLevelArtifactContext(),
         request
             .getOptions(CqueryOptions.class)
-            .getLabelPrinter(starlarkSemantics, mainRepoTargetParser.getRepoMapping()),
-        noOutputFormatter);
+            .getLabelPrinter(starlarkSemantics, mainRepoTargetParser.getRepoMapping()));
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/collect/BUILD b/src/main/java/com/google/devtools/build/lib/collect/BUILD
index c9b0dae..41cfc7c 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/collect/BUILD
@@ -26,10 +26,8 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib/collect/compacthashset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
-        "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
         "//third_party/protobuf:protobuf_java",
diff --git a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
index cc0ef62..ded1fa7 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
@@ -19,7 +19,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java b/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java
index 092a42c..4061fa2 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.protobuf.CodedInputStream;
 import com.google.protobuf.CodedOutputStream;
@@ -94,5 +94,5 @@
    *
    * <p>We use this instead of emitting a count to avoid possibly running deduplication twice.
    */
-  @SerializationConstant @VisibleForSerialization static final Object DONE = new Object();
+  @SerializationConstant @AutoCodec.VisibleForSerialization static final Object DONE = new Object();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
index c1402b6..66db3d2 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
@@ -33,7 +33,6 @@
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:constants",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
index 0af3626..d7a5df7 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
@@ -29,8 +29,8 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.Interrupted;
 import com.google.devtools.build.lib.server.FailureDetails.Interrupted.Code;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java
index 70200b6..fe290b5 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java
@@ -15,7 +15,7 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import java.util.HashMap;
 
@@ -120,28 +120,28 @@
     this.emptyDepset = new Depset(null, this.emptySet);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Order STABLE_ORDER_CONSTANT = STABLE_ORDER;
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Order COMPILE_ORDER_CONSTANT = COMPILE_ORDER;
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Order LINK_ORDER_CONSTANT = LINK_ORDER;
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Order NAIVE_LINK_ORDER_CONSTANT = NAIVE_LINK_ORDER;
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final NestedSet<?> EMPTY_STABLE = STABLE_ORDER.emptySet();
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final NestedSet<?> EMPTY_COMPILE = COMPILE_ORDER.emptySet();
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final NestedSet<?> EMPTY_LINK = LINK_ORDER.emptySet();
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final NestedSet<?> EMPTY_NAIVE_LINK = NAIVE_LINK_ORDER.emptySet();
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/io/BUILD b/src/main/java/com/google/devtools/build/lib/io/BUILD
index 4a80a07..5803260 100644
--- a/src/main/java/com/google/devtools/build/lib/io/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/io/BUILD
@@ -60,7 +60,7 @@
     srcs = ["FileSymlinkCycleUniquenessFunction.java"],
     deps = [
         ":abstract_chain_uniqueness_function",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -73,7 +73,7 @@
     srcs = ["FileSymlinkInfiniteExpansionException.java"],
     deps = [
         ":file_symlink_exception",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//third_party:guava",
     ],
@@ -84,7 +84,7 @@
     srcs = ["FileSymlinkInfiniteExpansionUniquenessFunction.java"],
     deps = [
         ":abstract_chain_uniqueness_function",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
diff --git a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkCycleUniquenessFunction.java b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkCycleUniquenessFunction.java
index 6a26c05..7479bf9 100644
--- a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkCycleUniquenessFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkCycleUniquenessFunction.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.io;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -35,7 +34,7 @@
     return Key.create(AbstractFileChainUniquenessFunction.canonicalize(cycle));
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey.WithCachedHashCode<ImmutableList<RootedPath>> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -44,7 +43,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(ImmutableList<RootedPath> arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionException.java b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionException.java
index d33283b..cc2a02d 100644
--- a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionException.java
+++ b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionException.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.vfs.RootedPath;
 
 /** Exception indicating that a symlink has an unbounded expansion on resolution. */
diff --git a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionUniquenessFunction.java b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionUniquenessFunction.java
index 0a32173..fac0ee3 100644
--- a/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionUniquenessFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/io/FileSymlinkInfiniteExpansionUniquenessFunction.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.io;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -36,7 +35,7 @@
     return Key.create(AbstractFileChainUniquenessFunction.canonicalize(cycle));
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey.WithCachedHashCode<ImmutableList<RootedPath>> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -45,7 +44,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(ImmutableList<RootedPath> arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectsList.java b/src/main/java/com/google/devtools/build/lib/packages/AspectsList.java
index fe50baf..9d355d5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectsList.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectsList.java
@@ -21,7 +21,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index fefdf56..16cf08c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -37,7 +37,7 @@
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
 import com.google.devtools.build.lib.packages.Type.ConversionException;
 import com.google.devtools.build.lib.packages.Type.LabelClass;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.starlarkbuildapi.NativeComputedDefaultApi;
 import com.google.devtools.build.lib.util.FileType;
@@ -1657,9 +1657,9 @@
     }
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static class AlwaysNullLateBoundDefault extends SimpleLateBoundDefault<Void, Void> {
-    @SerializationConstant @VisibleForSerialization
+    @SerializationConstant @AutoCodec.VisibleForSerialization
     static final AlwaysNullLateBoundDefault INSTANCE = new AlwaysNullLateBoundDefault();
 
     private AlwaysNullLateBoundDefault() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BUILD b/src/main/java/com/google/devtools/build/lib/packages/BUILD
index 24b258a..04366d6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/BUILD
@@ -83,7 +83,6 @@
         "//src/main/java/com/google/devtools/build/lib/profiler",
         "//src/main/java/com/google/devtools/build/lib/skyframe:detailed_exceptions",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
index ca51895..320ee9b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PredicatesWithMessage.java b/src/main/java/com/google/devtools/build/lib/packages/PredicatesWithMessage.java
index aa553d1..b8fb3ad 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PredicatesWithMessage.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PredicatesWithMessage.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 
 /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
index fab9448..9195a4f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
@@ -19,7 +19,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import java.util.Objects;
 import java.util.function.Function;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index f6cc9b7..ca9dac1 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -47,7 +47,7 @@
 import com.google.devtools.build.lib.packages.Package.ConfigSettingVisibilityPolicy;
 import com.google.devtools.build.lib.packages.RuleClass.ToolchainResolutionMode;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 50a3f38..0ed3b6d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -50,8 +50,8 @@
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
 import com.google.devtools.build.lib.packages.RuleFactory.AttributeValues;
 import com.google.devtools.build.lib.packages.Type.ConversionException;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkSubruleApi;
 import com.google.devtools.build.lib.util.HashCodes;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
index d498649..2e5aed5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
@@ -16,13 +16,13 @@
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import net.starlark.java.eval.Printer;
 
 /** A natively-defined aspect that is may be referenced by Starlark attribute definitions. */
 public abstract class StarlarkNativeAspect extends NativeAspectClass implements StarlarkAspect {
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Function<Rule, AspectParameters> EMPTY_FUNCTION = input -> AspectParameters.EMPTY;
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
index 386110a..efa5166 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -18,7 +18,6 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -52,7 +51,7 @@
       this.idx = idx;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static WorkspaceFileKey create(RootedPath path, int idx) {
       return interner.intern(new WorkspaceFileKey(path, idx));
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
index e0aa19b..3d52551 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
@@ -36,7 +36,6 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/skyframe:detailed_exceptions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
index ac15341..f72338e 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.packages.TestSize;
 import com.google.devtools.build.lib.packages.TestTimeout;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import java.util.HashSet;
 import java.util.List;
@@ -55,7 +54,7 @@
   private final ImmutableList<String> testLangFilterList;
   private final Predicate<Target> impl;
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   TestFilter(
       ImmutableSet<TestSize> testSizeFilterSet,
       ImmutableSet<TestTimeout> testTimeoutFilterSet,
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BUILD b/src/main/java/com/google/devtools/build/lib/query2/BUILD
index 8c3327c..d5bd7fd 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/BUILD
@@ -27,7 +27,6 @@
     ),
     deps = [
         "//src/main/java/com/google/devtools/build/lib/actions",
-        "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
@@ -75,7 +74,6 @@
         "//src/main/java/com/google/devtools/build/lib/query2/common:QueryTransitivePackagePreloader",
         "//src/main/java/com/google/devtools/build/lib/query2/common:UniverseSkyKey",
         "//src/main/java/com/google/devtools/build/lib/query2/common:abstract-blaze-query-env",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/common:options",
         "//src/main/java/com/google/devtools/build/lib/query2/common:universe-scope",
         "//src/main/java/com/google/devtools/build/lib/query2/compat:fake-load-target",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
index 0b9c1af..74b8498 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
@@ -24,9 +24,7 @@
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.analysis.AliasProvider;
-import com.google.devtools.build.lib.analysis.AspectValue;
 import com.google.devtools.build.lib.analysis.ConfiguredTargetValue;
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
@@ -76,7 +74,6 @@
 import com.google.devtools.build.lib.supplier.InterruptibleSupplier;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
 import com.google.devtools.build.skyframe.WalkableGraph;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -147,7 +144,7 @@
 
   public abstract String getOutputFormat();
 
-  protected abstract KeyExtractor<T, ActionLookupKey> getConfiguredTargetKeyExtractor();
+  protected abstract KeyExtractor<T, ConfiguredTargetKey> getConfiguredTargetKeyExtractor();
 
   @Override
   public QueryEvalResult evaluateQuery(
@@ -220,18 +217,12 @@
   protected abstract T getNullConfiguredTarget(Label label) throws InterruptedException;
 
   @Nullable
-  public SkyValue getConfiguredTargetValue(SkyKey key) throws InterruptedException {
-    return walkableGraphSupplier.get().getValue(key);
-  }
-
-  @Nullable
-  public AspectValue getAspectValue(SkyKey key) throws InterruptedException {
-    return (AspectValue) walkableGraphSupplier.get().getValue(key);
+  public ConfiguredTargetValue getConfiguredTargetValue(SkyKey key) throws InterruptedException {
+    return (ConfiguredTargetValue) walkableGraphSupplier.get().getValue(key);
   }
 
   private boolean isAliasConfiguredTarget(ConfiguredTargetKey key) throws InterruptedException {
-    return AliasProvider.isAlias(
-        ((ConfiguredTargetValue) getConfiguredTargetValue(key)).getConfiguredTarget());
+    return AliasProvider.isAlias(getConfiguredTargetValue(key).getConfiguredTarget());
   }
 
   public InterruptibleSupplier<ImmutableSet<PathFragment>>
@@ -371,7 +362,7 @@
       if (!rdep.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
         continue;
       }
-      var actualParentKey = getConfiguredTargetKey(getValueFromKey(rdep));
+      ConfiguredTargetKey actualParentKey = getConfiguredTargetKey(getValueFromKey(rdep));
       if (actualParentKey.equals(child)) {
         // The parent has the same value as the child because it is delegating.
         foundDelegatingRdep = true;
@@ -395,7 +386,7 @@
         output.add(rdep);
         continue;
       }
-      var actualParentKey = getConfiguredTargetKey(getValueFromKey(rdep));
+      ConfiguredTargetKey actualParentKey = getConfiguredTargetKey(getValueFromKey(rdep));
       if (!actualParentKey.equals(child)) {
         output.add(rdep);
         continue;
@@ -488,24 +479,19 @@
       }
     }
 
-    boolean explicitAspects =
-        settings.containsAll(ImmutableSet.of(Setting.INCLUDE_ASPECTS, Setting.EXPLICIT_ASPECTS));
-
     ImmutableList.Builder<ClassifiedDependency<T>> values = ImmutableList.builder();
-    // TODO(bazel-team): The end-goal approach is to treat aspects and toolchains as
+    // TODO(bazel-team): An even better approach would be to treat aspects and toolchains as
     // first-class query nodes just like targets. In other words, let query expressions reference
     // them (they also have identifying labels) and make the graph connections between targets,
     // aspects, and toolchains explicit. That would permit more detailed queries and eliminate the
-    // per-key-type special casing below.
-    // This is being experimentally implemented in phases. Currently support for aspects has been
-    // implemented behind the --experimental_explicit_aspects flag.
-    // See https://github.com/bazelbuild/bazel/issues/16310 for details.
+    // per-key-type special casing below. The challenge is to generalize all query code that
+    // currently assumes its inputs are configured targets. Toolchains may have additional caveats:
+    // see b/148550864.
     for (SkyKey key : dependencies) {
       if (knownCtDeps.contains(key)) {
         continue;
       }
-      if (key.functionName().equals(SkyFunctions.CONFIGURED_TARGET)
-          || (explicitAspects && key.functionName().equals(SkyFunctions.ASPECT))) {
+      if (key.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
         T dependency = getValueFromKey(key);
         Preconditions.checkState(
             dependency != null,
@@ -515,24 +501,17 @@
                 + " configurability team.",
             key);
 
-        boolean implicitConfiguredTarget =
+        boolean implicit =
             // Check both the original guess key and the second correct key. In the case of the
             // target platform, Util.findImplicitDeps also uses the original guess key.
             implicitDeps == null
                 || implicitDeps.contains(key)
                 || implicitDeps.contains(getConfiguredTargetKey(dependency));
-
-        boolean implicit =
-            !(key.argument() instanceof ConfiguredTargetKey) || implicitConfiguredTarget;
-
         values.add(new ClassifiedDependency<>(dependency, implicit));
         knownCtDeps.add(key);
       } else if (settings.contains(Setting.INCLUDE_ASPECTS)
-          && key.functionName().equals(SkyFunctions.ASPECT)) {
-        Preconditions.checkState(!settings.contains(Setting.EXPLICIT_ASPECTS));
-        if (resolvedAspectClasses.contains(((AspectKey) key).getAspectClass())) {
-          continue;
-        }
+          && key.functionName().equals(SkyFunctions.ASPECT)
+          && !resolvedAspectClasses.contains(((AspectKey) key).getAspectClass())) {
         // When an aspect is attached to an alias configured target, it bypasses standard dependency
         // resolution and just Skyframe-loads the same aspect for the alias' referent. That means
         // the original aspect's attribute deps aren't Skyframe-resolved through AspectFunction's
@@ -571,8 +550,8 @@
           targetifyValues(
               fromTargetsByKey.get(fromKey),
               entry.getValue(),
-              /* knownCtDeps= */ new HashSet<>(),
-              /* resolvedAspectClasses= */ new HashSet<>()));
+              /*knownCtDeps=*/ new HashSet<>(),
+              /*resolvedAspectClasses=*/ new HashSet<>()));
     }
     return result;
   }
@@ -607,7 +586,7 @@
   @Nullable
   protected abstract BuildConfigurationValue getConfiguration(T target);
 
-  protected abstract ActionLookupKey getConfiguredTargetKey(T target);
+  protected abstract ConfiguredTargetKey getConfiguredTargetKey(T target);
 
   @Override
   public ThreadSafeMutableSet<T> getTransitiveClosure(
@@ -670,13 +649,11 @@
 
     /** A map of non-null configured top-level targets sorted by configuration checksum. */
     private final ImmutableMap<Label, BuildConfigurationValue> nonNulls;
-
     /**
      * {@code nonNulls} may often have many duplicate values in its value set so we store a sorted
      * set of all the non-null configurations here.
      */
     private final ImmutableSortedSet<BuildConfigurationValue> nonNullConfigs;
-
     /** A list of null configured top-level targets. */
     private final ImmutableList<Label> nulls;
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
index 4e8bcc0..f5b2e9d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
@@ -19,7 +19,6 @@
 import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.MoreExecutors;
-import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.ConfiguredTargetValue;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
@@ -71,7 +70,8 @@
   private AqueryOptions aqueryOptions;
 
   private AqueryActionFilter actionFilters;
-  private final KeyExtractor<ConfiguredTargetValue, ActionLookupKey> configuredTargetKeyExtractor;
+  private final KeyExtractor<ConfiguredTargetValue, ConfiguredTargetKey>
+      configuredTargetKeyExtractor;
   private final ConfiguredTargetValueAccessor accessor;
 
   public ActionGraphQueryEnvironment(
@@ -187,7 +187,8 @@
   }
 
   @Override
-  protected KeyExtractor<ConfiguredTargetValue, ActionLookupKey> getConfiguredTargetKeyExtractor() {
+  protected KeyExtractor<ConfiguredTargetValue, ConfiguredTargetKey>
+      getConfiguredTargetKeyExtractor() {
     return configuredTargetKeyExtractor;
   }
 
@@ -201,7 +202,7 @@
   @Nullable
   private ConfiguredTargetValue createConfiguredTargetValueFromKey(ConfiguredTargetKey key)
       throws InterruptedException {
-    ConfiguredTargetValue value = (ConfiguredTargetValue) getConfiguredTargetValue(key);
+    ConfiguredTargetValue value = getConfiguredTargetValue(key);
     if (value == null
         || !Objects.equals(
             value.getConfiguredTarget().getConfigurationKey(), key.getConfigurationKey())) {
@@ -250,7 +251,7 @@
   @Override
   protected ConfiguredTargetValue getValueFromKey(SkyKey key) throws InterruptedException {
     Preconditions.checkState(key instanceof ConfiguredTargetKey);
-    return (ConfiguredTargetValue) getConfiguredTargetValue(key);
+    return getConfiguredTargetValue(key);
   }
 
   @Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ConfiguredTargetValueAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ConfiguredTargetValueAccessor.java
index e0c9112..03c83bf 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ConfiguredTargetValueAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ConfiguredTargetValueAccessor.java
@@ -16,7 +16,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.analysis.AspectValue;
 import com.google.devtools.build.lib.analysis.ConfiguredTargetValue;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -33,6 +32,7 @@
 import com.google.devtools.build.lib.server.FailureDetails.ActionQuery;
 import com.google.devtools.build.lib.server.FailureDetails.ConfigurableQuery;
 import com.google.devtools.build.lib.skyframe.AspectKeyCreator.AspectKey;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -50,12 +50,13 @@
 
   private final WalkableGraph walkableGraph;
   private final TargetLookup targetLookup;
-  private final KeyExtractor<ConfiguredTargetValue, ActionLookupKey> configuredTargetKeyExtractor;
+  private final KeyExtractor<ConfiguredTargetValue, ConfiguredTargetKey>
+      configuredTargetKeyExtractor;
 
   public ConfiguredTargetValueAccessor(
       WalkableGraph walkableGraph,
       TargetLookup targetLookup,
-      KeyExtractor<ConfiguredTargetValue, ActionLookupKey> configuredTargetKeyExtractor) {
+      KeyExtractor<ConfiguredTargetValue, ConfiguredTargetKey> configuredTargetKeyExtractor) {
     this.walkableGraph = walkableGraph;
     this.targetLookup = targetLookup;
     this.configuredTargetKeyExtractor = configuredTargetKeyExtractor;
diff --git a/src/main/java/com/google/devtools/build/lib/query2/common/BUILD b/src/main/java/com/google/devtools/build/lib/query2/common/BUILD
index bff6ce0..331ba8d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/common/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/common/BUILD
@@ -12,23 +12,6 @@
 )
 
 java_library(
-    name = "cquery-node",
-    srcs = [
-        "CqueryNode.java",
-    ],
-    deps = [
-        "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
-        "//src/main/java/com/google/devtools/build/lib/analysis:config/config_matching_provider",
-        "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/config",
-        "//src/main/java/net/starlark/java/eval",
-        "//third_party:guava",
-        "//third_party:jsr305",
-    ],
-)
-
-java_library(
     name = "abstract-blaze-query-env",
     srcs = [
         "AbstractBlazeQueryEnvironment.java",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/common/CommonQueryOptions.java b/src/main/java/com/google/devtools/build/lib/query2/common/CommonQueryOptions.java
index a6c6077..9c534e2 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/common/CommonQueryOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/common/CommonQueryOptions.java
@@ -151,16 +151,6 @@
               + " will not be omitted.")
   public boolean incompatiblePackageGroupIncludesDoubleSlash;
 
-  @Option(
-      name = "experimental_explicit_aspects",
-      defaultValue = "false",
-      documentationCategory = OptionDocumentationCategory.QUERY,
-      effectTags = {OptionEffectTag.TERMINAL_OUTPUT},
-      help =
-          "aquery, cquery: whether to include aspect-generated actions in the output. "
-              + "query: no-op (aspects are always followed).")
-  public boolean explicitAspects;
-
   /** Return the current options as a set of QueryEnvironment settings. */
   public Set<Setting> toSettings() {
     Set<Setting> settings = EnumSet.noneOf(Setting.class);
@@ -176,9 +166,6 @@
     if (useAspects) {
       settings.add(Setting.INCLUDE_ASPECTS);
     }
-    if (explicitAspects) {
-      settings.add(Setting.EXPLICIT_ASPECTS);
-    }
     return settings;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/common/CqueryNode.java b/src/main/java/com/google/devtools/build/lib/query2/common/CqueryNode.java
deleted file mode 100644
index fef9844..0000000
--- a/src/main/java/com/google/devtools/build/lib/query2/common/CqueryNode.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2023 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.query2.common;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.actions.ActionLookupKey;
-import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.LabelPrinter;
-import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
-import javax.annotation.Nullable;
-import net.starlark.java.eval.Dict;
-
-/**
- * A {@link CqueryNode} provides information necessary to traverse different types of nodes that can
- * be visited during a {@link CqueryCommand} call. This may include {@link ConfiguredTarget}, {@link
- * AspectKey}, and transition nodes.
- */
-public interface CqueryNode {
-  /** Returns a key that may be used to lookup this {@link CqueryNode}. */
-  ActionLookupKey getLookupKey();
-
-  default Label getLabel() {
-    return getLookupKey().getLabel();
-  }
-
-  default String getDescription(LabelPrinter labelPrinter) {
-    return labelPrinter.toString(getOriginalLabel());
-  }
-
-  @Nullable
-  default String getConfigurationChecksum() {
-    return getConfigurationKey() == null ? null : getConfigurationKey().getOptions().checksum();
-  }
-
-  /**
-   * Returns the {@link BuildConfigurationKey} naming the {@link
-   * com.google.devtools.build.lib.analysis.config.BuildConfigurationValue} for which this cquery
-   * node is defined. Configuration is defined for all configured targets with exception of {@link
-   * com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget} and {@link
-   * com.google.devtools.build.lib.analysis.configuredtargets.PackageGroupConfiguredTarget} for
-   * which it is always <b>null</b>.
-   *
-   * <p>If this changes, {@link AspectResolver#aspectMatchesConfiguredTarget} should be updated.
-   */
-  @Nullable
-  default BuildConfigurationKey getConfigurationKey() {
-    return getLookupKey().getConfigurationKey();
-  }
-
-  /**
-   * If the configured target is an alias, return the actual target, otherwise return the current
-   * target. This follows alias chains.
-   */
-  default CqueryNode getActual() {
-    return this;
-  }
-
-  /**
-   * If the configured target is an alias, return the original label, otherwise return the current
-   * label. This is not the same as {@code getActual().getLabel()}, because it does not follow alias
-   * chains.
-   */
-  default Label getOriginalLabel() {
-    return getLabel();
-  }
-
-  /**
-   * The configuration conditions that trigger this configured target's configurable attributes. For
-   * targets that do not support configurable attributes, this will be an empty map.
-   */
-  default ImmutableMap<Label, ConfigMatchingProvider> getConfigConditions() {
-    return ImmutableMap.of();
-  }
-
-  default boolean isRuleConfiguredTarget() {
-    return false;
-  }
-
-  /**
-   * The base configured target if it has been merged with aspects otherwise the current value.
-   *
-   * <p>Unwrapping is recursive if there are multiple layers.
-   */
-  default CqueryNode unwrapIfMerged() {
-    return this;
-  }
-
-  /**
-   * This is only intended to be called from the query dialects of Starlark.
-   *
-   * @return a map of provider names to their values, or null if there are no providers
-   */
-  @Nullable
-  default Dict<String, Object> getProvidersDictForQuery() {
-    return null;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
index 5b4bc33..6ee85ab 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.query2.cquery;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfiguredTarget;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.packages.Attribute;
@@ -22,7 +23,6 @@
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.query2.query.output.BuildOutputFormatter;
 import com.google.devtools.build.lib.query2.query.output.BuildOutputFormatter.AttributeReader;
@@ -42,7 +42,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       LabelPrinter labelPrinter) {
     super(eventHandler, options, out, skyframeExecutor, accessor, /* uniquifyResults= */ false);
     this.labelPrinter = labelPrinter;
@@ -73,7 +73,8 @@
   }
 
   @Nullable
-  private ConfiguredAttributeMapper getAttributeMap(CqueryNode kct) throws InterruptedException {
+  private ConfiguredAttributeMapper getAttributeMap(ConfiguredTarget kct)
+      throws InterruptedException {
     Rule associatedRule = accessor.getTarget(kct).getAssociatedRule();
     if (associatedRule == null) {
       return null;
@@ -93,7 +94,7 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult)
+  public void processOutput(Iterable<ConfiguredTarget> partialResult)
       throws InterruptedException, IOException {
     BuildOutputFormatter.TargetOutputter outputter =
         new TargetOutputter(
@@ -105,7 +106,7 @@
             (rule, attr) -> false,
             System.lineSeparator(),
             labelPrinter);
-    for (CqueryNode configuredTarget : partialResult) {
+    for (ConfiguredTarget configuredTarget : partialResult) {
       Target target = accessor.getTarget(configuredTarget);
       outputter.output(target, new CqueryAttributeReader(getAttributeMap(configuredTarget)));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfigFunction.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfigFunction.java
index a31868a..1b105be 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfigFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfigFunction.java
@@ -14,8 +14,8 @@
 package com.google.devtools.build.lib.query2.cquery;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.query2.common.AbstractBlazeQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.Callback;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Argument;
@@ -59,7 +59,7 @@
 
   /**
    * This function is only viable with ConfiguredTargetQueryEnvironment which extends {@link
-   * AbstractBlazeQueryEnvironment <CqueryNode>}.
+   * AbstractBlazeQueryEnvironment <ConfiguredTarget>}.
    */
   @Override
   @SuppressWarnings("unchecked")
@@ -85,6 +85,6 @@
                 targetExpression.toString(),
                 targetsFuture,
                 configuration,
-                (Callback<CqueryNode>) callback));
+                (Callback<ConfiguredTarget>) callback));
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
index 6df105f..c25a6e6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
@@ -29,7 +29,6 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.packages.TargetUtils;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetNotFoundException;
 import com.google.devtools.build.lib.query2.engine.QueryException;
@@ -48,7 +47,7 @@
  *
  * <p>Incomplete; we'll implement getVisibility when needed.
  */
-public class ConfiguredTargetAccessor implements TargetAccessor<CqueryNode> {
+public class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
 
   private final WalkableGraph walkableGraph;
   private final ConfiguredTargetQueryEnvironment queryEnvironment;
@@ -75,55 +74,56 @@
   }
 
   @Override
-  public String getTargetKind(CqueryNode target) {
+  public String getTargetKind(ConfiguredTarget target) {
     Target actualTarget = getTarget(target);
     return actualTarget.getTargetKind();
   }
 
   @Override
-  public String getLabel(CqueryNode target) {
+  public String getLabel(ConfiguredTarget target) {
     return target.getOriginalLabel().toString();
   }
 
   @Override
-  public String getPackage(CqueryNode target) {
+  public String getPackage(ConfiguredTarget target) {
     return target.getOriginalLabel().getPackageIdentifier().getPackageFragment().toString();
   }
 
   @Override
-  public boolean isRule(CqueryNode target) {
+  public boolean isRule(ConfiguredTarget target) {
     Target actualTarget = getTarget(target);
     return actualTarget instanceof Rule;
   }
 
   @Override
-  public boolean isTestRule(CqueryNode target) {
+  public boolean isTestRule(ConfiguredTarget target) {
     Target actualTarget = getTarget(target);
     return TargetUtils.isTestRule(actualTarget);
   }
 
   @Override
-  public boolean isTestSuite(CqueryNode target) {
+  public boolean isTestSuite(ConfiguredTarget target) {
     Target actualTarget = getTarget(target);
     return TargetUtils.isTestSuiteRule(actualTarget);
   }
 
   @Override
-  public List<CqueryNode> getPrerequisites(
+  public List<ConfiguredTarget> getPrerequisites(
       QueryExpression caller,
-      CqueryNode keyedConfiguredTarget,
+      ConfiguredTarget keyedConfiguredTarget,
       String attrName,
       String errorMsgPrefix)
       throws QueryException, InterruptedException {
     // Process aliases.
-    CqueryNode actual = keyedConfiguredTarget.getActual();
+    ConfiguredTarget actual = keyedConfiguredTarget.getActual();
 
     Preconditions.checkArgument(
         isRule(actual), "%s %s is not a rule configured target", errorMsgPrefix, getLabel(actual));
 
-    ImmutableListMultimap<Label, CqueryNode> depsByLabel =
+    ImmutableListMultimap<Label, ConfiguredTarget> depsByLabel =
         Multimaps.index(
-            queryEnvironment.getFwdDeps(ImmutableList.of(actual)), CqueryNode::getOriginalLabel);
+            queryEnvironment.getFwdDeps(ImmutableList.of(actual)),
+            ConfiguredTarget::getOriginalLabel);
 
     Rule rule = (Rule) getTarget(actual);
     ImmutableMap<Label, ConfigMatchingProvider> configConditions = actual.getConfigConditions();
@@ -141,39 +141,39 @@
               errorMsgPrefix, rule.getRuleClass(), attrName),
           ConfigurableQuery.Code.ATTRIBUTE_MISSING);
     }
-    ImmutableList.Builder<CqueryNode> toReturn = ImmutableList.builder();
+    ImmutableList.Builder<ConfiguredTarget> toReturn = ImmutableList.builder();
     attributeMapper.visitLabels(attrName, label -> toReturn.addAll(depsByLabel.get(label)));
     return toReturn.build();
   }
 
   @Override
-  public List<String> getStringListAttr(CqueryNode target, String attrName) {
+  public List<String> getStringListAttr(ConfiguredTarget target, String attrName) {
     Target actualTarget = getTarget(target);
     return TargetUtils.getStringListAttr(actualTarget, attrName);
   }
 
   @Override
-  public String getStringAttr(CqueryNode target, String attrName) {
+  public String getStringAttr(ConfiguredTarget target, String attrName) {
     Target actualTarget = getTarget(target);
     return TargetUtils.getStringAttr(actualTarget, attrName);
   }
 
   @Override
-  public Iterable<String> getAttrAsString(CqueryNode target, String attrName) {
+  public Iterable<String> getAttrAsString(ConfiguredTarget target, String attrName) {
     Target actualTarget = getTarget(target);
     return TargetUtils.getAttrAsString(actualTarget, attrName);
   }
 
   @Override
-  public ImmutableSet<QueryVisibility<CqueryNode>> getVisibility(
-      QueryExpression caller, CqueryNode from) throws QueryException {
+  public ImmutableSet<QueryVisibility<ConfiguredTarget>> getVisibility(
+      QueryExpression caller, ConfiguredTarget from) throws QueryException {
     // TODO(bazel-team): implement this if needed.
     throw new QueryException(
         "visible() is not supported on configured targets",
         ConfigurableQuery.Code.VISIBLE_FUNCTION_NOT_SUPPORTED);
   }
 
-  public Target getTarget(CqueryNode configuredTarget) {
+  public Target getTarget(ConfiguredTarget configuredTarget) {
     // Dereference any aliases that might be present.
     Label label = configuredTarget.getOriginalLabel();
     try {
@@ -190,7 +190,8 @@
   }
 
   /** Returns the rule that generates the given output file. */
-  RuleConfiguredTarget getGeneratingConfiguredTarget(CqueryNode kct) throws InterruptedException {
+  RuleConfiguredTarget getGeneratingConfiguredTarget(ConfiguredTarget kct)
+      throws InterruptedException {
     Preconditions.checkArgument(kct instanceof OutputFileConfiguredTarget);
     return (RuleConfiguredTarget)
         ((ConfiguredTargetValue)
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
index 1ec7f14..45284c8 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
@@ -23,8 +23,6 @@
 import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.MoreExecutors;
-import com.google.devtools.build.lib.actions.ActionLookupKey;
-import com.google.devtools.build.lib.analysis.AspectValue;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.ConfiguredTargetValue;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
@@ -42,7 +40,6 @@
 import com.google.devtools.build.lib.query2.NamedThreadSafeOutputFormatterCallback;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
 import com.google.devtools.build.lib.query2.SkyQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.ProtoOutputFormatterCallback.OutputType;
 import com.google.devtools.build.lib.query2.engine.Callback;
 import com.google.devtools.build.lib.query2.engine.KeyExtractor;
@@ -53,12 +50,10 @@
 import com.google.devtools.build.lib.query2.query.aspectresolvers.AspectResolver;
 import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
 import com.google.devtools.build.lib.server.FailureDetails.ConfigurableQuery;
-import com.google.devtools.build.lib.skyframe.AspectKeyCreator.AspectKey;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
 import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
 import com.google.devtools.build.skyframe.WalkableGraph;
 import java.io.OutputStream;
 import java.util.ArrayList;
@@ -66,7 +61,6 @@
 import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -77,11 +71,11 @@
  * {@link QueryEnvironment} that runs queries over the configured target (analysis) graph.
  *
  * <p>Aspects are partially supported. Their dependencies appear as implicit dependencies on the
- * targets they're connected to. When using the --experimental_explicit_aspects flag, the aspects
- * themselves are visible as query nodes. See https://github.com/bazelbuild/bazel/issues/16310 for
- * details.
+ * targets they're connected to, but the aspects themselves aren't visible as query nodes. See
+ * comments on {@link PostAnalysisQueryEnvironment#targetifyValues} and b/163052263 for details.
  */
-public class ConfiguredTargetQueryEnvironment extends PostAnalysisQueryEnvironment<CqueryNode> {
+public class ConfiguredTargetQueryEnvironment
+    extends PostAnalysisQueryEnvironment<ConfiguredTarget> {
   /** Common query functions and cquery specific functions. */
   public static final ImmutableList<QueryFunction> FUNCTIONS = populateFunctions();
   /** Cquery specific functions. */
@@ -91,18 +85,12 @@
 
   private final TopLevelArtifactContext topLevelArtifactContext;
 
-  private final KeyExtractor<CqueryNode, ActionLookupKey> configuredTargetKeyExtractor;
+  private final KeyExtractor<ConfiguredTarget, ConfiguredTargetKey> configuredTargetKeyExtractor;
 
   private final ConfiguredTargetAccessor accessor;
 
   /**
-   * Only passed when this is a call from a non query command like Fetch or Vendor, where we don't
-   * need the output printed
-   */
-  private Optional<NamedThreadSafeOutputFormatterCallback<CqueryNode>> noOutputFormatter;
-
-  /**
-   * F Stores every configuration in the transitive closure of the build graph as a map from its
+   * Stores every configuration in the transitive closure of the build graph as a map from its
    * user-friendly hash to the configuration itself.
    *
    * <p>This is used to find configured targets in, e.g. {@code somepath} queries. Given {@code
@@ -119,7 +107,7 @@
   private final ImmutableMap<String, BuildConfigurationValue> transitiveConfigurations;
 
   @Override
-  protected KeyExtractor<CqueryNode, ActionLookupKey> getConfiguredTargetKeyExtractor() {
+  protected KeyExtractor<ConfiguredTarget, ConfiguredTargetKey> getConfiguredTargetKeyExtractor() {
     return configuredTargetKeyExtractor;
   }
 
@@ -147,7 +135,7 @@
         settings,
         labelPrinter);
     this.accessor = new ConfiguredTargetAccessor(walkableGraphSupplier.get(), this);
-    this.configuredTargetKeyExtractor = CqueryNode::getLookupKey;
+    this.configuredTargetKeyExtractor = ConfiguredTargetKey::fromConfiguredTarget;
     this.transitiveConfigurations =
         getTransitiveConfigurations(transitiveConfigurationKeys, walkableGraphSupplier.get());
     this.topLevelArtifactContext = topLevelArtifactContext;
@@ -164,8 +152,7 @@
       Supplier<WalkableGraph> walkableGraphSupplier,
       CqueryOptions cqueryOptions,
       TopLevelArtifactContext topLevelArtifactContext,
-      LabelPrinter labelPrinter,
-      Optional<NamedThreadSafeOutputFormatterCallback<CqueryNode>> noOutputFormatter)
+      LabelPrinter labelPrinter)
       throws InterruptedException {
     this(
         keepGoing,
@@ -180,7 +167,6 @@
         topLevelArtifactContext,
         labelPrinter);
     this.cqueryOptions = cqueryOptions;
-    this.noOutputFormatter = noOutputFormatter;
   }
 
   private static ImmutableList<QueryFunction> populateFunctions() {
@@ -206,9 +192,9 @@
   }
 
   @Override
-  public ImmutableList<NamedThreadSafeOutputFormatterCallback<CqueryNode>>
+  public ImmutableList<NamedThreadSafeOutputFormatterCallback<ConfiguredTarget>>
       getDefaultOutputFormatters(
-          TargetAccessor<CqueryNode> accessor,
+          TargetAccessor<ConfiguredTarget> accessor,
           ExtendedEventHandler eventHandler,
           OutputStream out,
           SkyframeExecutor skyframeExecutor,
@@ -218,112 +204,78 @@
           throws QueryException, InterruptedException {
     AspectResolver aspectResolver =
         cqueryOptions.aspectDeps.createResolver(packageManager, eventHandler);
-    ImmutableList.Builder<NamedThreadSafeOutputFormatterCallback<CqueryNode>> formatters =
-        ImmutableList.<NamedThreadSafeOutputFormatterCallback<CqueryNode>>builder()
-            .add(
-                new LabelAndConfigurationOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    true,
-                    getLabelPrinter()),
-                new LabelAndConfigurationOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    false,
-                    getLabelPrinter()),
-                new TransitionsOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    ruleClassProvider,
-                    getLabelPrinter()),
-                new ProtoOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    aspectResolver,
-                    OutputType.BINARY,
-                    ruleClassProvider,
-                    getLabelPrinter()),
-                new ProtoOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    aspectResolver,
-                    OutputType.DELIMITED_BINARY,
-                    ruleClassProvider,
-                    labelPrinter),
-                new ProtoOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    aspectResolver,
-                    OutputType.TEXT,
-                    ruleClassProvider,
-                    getLabelPrinter()),
-                new ProtoOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    aspectResolver,
-                    OutputType.JSON,
-                    ruleClassProvider,
-                    getLabelPrinter()),
-                new BuildOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    getLabelPrinter()),
-                new GraphOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    kct -> getFwdDeps(ImmutableList.of(kct)),
-                    getLabelPrinter()),
-                new StarlarkOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    starlarkSemantics),
-                new FilesOutputFormatterCallback(
-                    eventHandler,
-                    cqueryOptions,
-                    out,
-                    skyframeExecutor,
-                    accessor,
-                    topLevelArtifactContext));
-
-    if (noOutputFormatter.isPresent()) {
-      formatters.add(noOutputFormatter.get());
-    }
-    return formatters.build();
+    return ImmutableList.of(
+        new LabelAndConfigurationOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, true, getLabelPrinter()),
+        new LabelAndConfigurationOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, false, getLabelPrinter()),
+        new TransitionsOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            ruleClassProvider,
+            getLabelPrinter()),
+        new ProtoOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            aspectResolver,
+            OutputType.BINARY,
+            ruleClassProvider,
+            getLabelPrinter()),
+        new ProtoOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            aspectResolver,
+            OutputType.DELIMITED_BINARY,
+            ruleClassProvider,
+            labelPrinter),
+        new ProtoOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            aspectResolver,
+            OutputType.TEXT,
+            ruleClassProvider,
+            getLabelPrinter()),
+        new ProtoOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            aspectResolver,
+            OutputType.JSON,
+            ruleClassProvider,
+            getLabelPrinter()),
+        new BuildOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, getLabelPrinter()),
+        new GraphOutputFormatterCallback(
+            eventHandler,
+            cqueryOptions,
+            out,
+            skyframeExecutor,
+            accessor,
+            kct -> getFwdDeps(ImmutableList.of(kct)),
+            getLabelPrinter()),
+        new StarlarkOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, starlarkSemantics),
+        new FilesOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, topLevelArtifactContext));
   }
 
   @Override
   public String getOutputFormat() {
-    return noOutputFormatter.isPresent() ? "no_output" : cqueryOptions.outputFormat;
+    return cqueryOptions.outputFormat;
   }
 
   @Override
@@ -333,7 +285,7 @@
 
   @Override
   public QueryTaskFuture<Void> getTargetsMatchingPattern(
-      QueryExpression owner, String pattern, Callback<CqueryNode> callback) {
+      QueryExpression owner, String pattern, Callback<ConfiguredTarget> callback) {
     TargetPattern patternToEval;
     try {
       patternToEval = getPattern(pattern);
@@ -359,7 +311,7 @@
                 /* excludedSubdirectories= */ ImmutableSet.of(),
                 (Callback<Target>)
                     partialResult -> {
-                      List<CqueryNode> transformedResult = new ArrayList<>();
+                      List<ConfiguredTarget> transformedResult = new ArrayList<>();
                       for (Target target : partialResult) {
                         transformedResult.addAll(
                             getConfiguredTargetsForConfigFunction(target.getLabel()));
@@ -373,13 +325,14 @@
   }
 
   /**
-   * Returns the {@link CqueryNode} for the given label and configuration if it exists, else null.
+   * Returns the {@link ConfiguredTarget} for the given label and configuration if it exists, else
+   * null.
    */
   @Nullable
-  private CqueryNode getConfiguredTarget(
+  private ConfiguredTarget getConfiguredTarget(
       Label label, @Nullable BuildConfigurationValue configuration) throws InterruptedException {
     BuildConfigurationKey configurationKey = configuration == null ? null : configuration.getKey();
-    CqueryNode target =
+    ConfiguredTarget target =
         getValueFromKey(
             ConfiguredTargetKey.builder()
                 .setLabel(label)
@@ -393,25 +346,11 @@
     return target;
   }
 
-  /**
-   * Returns the {@link CqueryNode} for the given key if its value is a supported instance of
-   * CqueryNode. This function can only receive keys of node types that the calling logic can
-   * support. For example, if the caller does not support handling of AspectKey types of
-   * CqueryNodes, then this function should not be called with an AspectKey key.
-   */
   @Override
   @Nullable
-  protected CqueryNode getValueFromKey(SkyKey key) throws InterruptedException {
-    SkyValue value = getConfiguredTargetValue(key);
-    if (value == null) {
-      return null;
-    } else if (value instanceof ConfiguredTargetValue) {
-      return ((ConfiguredTargetValue) value).getConfiguredTarget();
-    } else if (value instanceof AspectValue && key instanceof AspectKey) {
-      return (AspectKey) key;
-    } else {
-      throw new IllegalStateException("unknown value type for CqueryNode");
-    }
+  protected ConfiguredTarget getValueFromKey(SkyKey key) throws InterruptedException {
+    ConfiguredTargetValue value = getConfiguredTargetValue(key);
+    return value == null ? null : value.getConfiguredTarget();
   }
 
   /**
@@ -419,16 +358,16 @@
    *
    * <p>If there are no matches, returns an empty list.
    */
-  private ImmutableList<CqueryNode> getConfiguredTargetsForConfigFunction(Label label)
+  private ImmutableList<ConfiguredTarget> getConfiguredTargetsForConfigFunction(Label label)
       throws InterruptedException {
-    ImmutableList.Builder<CqueryNode> ans = ImmutableList.builder();
+    ImmutableList.Builder<ConfiguredTarget> ans = ImmutableList.builder();
     for (BuildConfigurationValue config : transitiveConfigurations.values()) {
-      CqueryNode kct = getConfiguredTarget(label, config);
+      ConfiguredTarget kct = getConfiguredTarget(label, config);
       if (kct != null) {
         ans.add(kct);
       }
     }
-    CqueryNode nullConfiguredTarget = getNullConfiguredTarget(label);
+    ConfiguredTarget nullConfiguredTarget = getNullConfiguredTarget(label);
     if (nullConfiguredTarget != null) {
       ans.add(nullConfiguredTarget);
     }
@@ -453,19 +392,19 @@
       String pattern,
       QueryTaskFuture<ThreadSafeMutableSet<T>> targetsFuture,
       String configPrefix,
-      Callback<CqueryNode> callback) {
+      Callback<ConfiguredTarget> callback) {
     // There's no technical reason other callers beside ConfigFunction can't call this. But they'd
     // need to adjust the error messaging below to not make it config()-specific. Please don't just
     // remove that line: the counter-priority is making error messages as clear, precise, and
     // actionable as possible.
     return () -> {
-      ThreadSafeMutableSet<CqueryNode> targets =
-          (ThreadSafeMutableSet<CqueryNode>) targetsFuture.getIfSuccessful();
-      List<CqueryNode> transformedResult = new ArrayList<>();
+      ThreadSafeMutableSet<ConfiguredTarget> targets =
+          (ThreadSafeMutableSet<ConfiguredTarget>) targetsFuture.getIfSuccessful();
+      List<ConfiguredTarget> transformedResult = new ArrayList<>();
       boolean userFriendlyConfigName = true;
-      for (CqueryNode target : targets) {
+      for (ConfiguredTarget target : targets) {
         Label label = getCorrectLabel(target);
-        CqueryNode keyedConfiguredTarget;
+        ConfiguredTarget keyedConfiguredTarget;
         switch (configPrefix) {
           case "host":
             throw new QueryException(
@@ -540,19 +479,19 @@
    * the "actual" target instead of the alias target. Grr.
    */
   @Override
-  public Label getCorrectLabel(CqueryNode target) {
+  public Label getCorrectLabel(ConfiguredTarget target) {
     // Dereference any aliases that might be present.
     return target.getOriginalLabel();
   }
 
   @Nullable
   @Override
-  protected CqueryNode getTargetConfiguredTarget(Label label) throws InterruptedException {
+  protected ConfiguredTarget getTargetConfiguredTarget(Label label) throws InterruptedException {
     if (topLevelConfigurations.isTopLevelTarget(label)) {
       return getConfiguredTarget(
           label, topLevelConfigurations.getConfigurationForTopLevelTarget(label));
     } else {
-      CqueryNode toReturn;
+      ConfiguredTarget toReturn;
       for (BuildConfigurationValue configuration : topLevelConfigurations.getConfigurations()) {
         toReturn = getConfiguredTarget(label, configuration);
         if (toReturn != null) {
@@ -565,13 +504,13 @@
 
   @Nullable
   @Override
-  protected CqueryNode getNullConfiguredTarget(Label label) throws InterruptedException {
+  protected ConfiguredTarget getNullConfiguredTarget(Label label) throws InterruptedException {
     return getConfiguredTarget(label, null);
   }
 
   @Nullable
   @Override
-  protected RuleConfiguredTarget getRuleConfiguredTarget(CqueryNode configuredTarget) {
+  protected RuleConfiguredTarget getRuleConfiguredTarget(ConfiguredTarget configuredTarget) {
     if (configuredTarget instanceof RuleConfiguredTarget) {
       return (RuleConfiguredTarget) configuredTarget;
     }
@@ -580,7 +519,7 @@
 
   @Nullable
   @Override
-  protected BuildConfigurationValue getConfiguration(CqueryNode target) {
+  protected BuildConfigurationValue getConfiguration(ConfiguredTarget target) {
     try {
       return target.getConfigurationKey() == null
           ? null
@@ -591,13 +530,15 @@
   }
 
   @Override
-  protected ActionLookupKey getConfiguredTargetKey(CqueryNode target) {
-    return target.getLookupKey();
+  protected ConfiguredTargetKey getConfiguredTargetKey(ConfiguredTarget target) {
+    return ConfiguredTargetKey.fromConfiguredTarget(target);
   }
 
   @Override
-  public ThreadSafeMutableSet<CqueryNode> createThreadSafeMutableSet() {
+  public ThreadSafeMutableSet<ConfiguredTarget> createThreadSafeMutableSet() {
     return new ThreadSafeMutableKeyExtractorBackedSetImpl<>(
-        configuredTargetKeyExtractor, CqueryNode.class, SkyQueryEnvironment.DEFAULT_THREAD_COUNT);
+        configuredTargetKeyExtractor,
+        ConfiguredTarget.class,
+        SkyQueryEnvironment.DEFAULT_THREAD_COUNT);
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
index 73f92b2..178eee9 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
@@ -15,10 +15,10 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.query2.NamedThreadSafeOutputFormatterCallback;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
@@ -42,7 +42,7 @@
  * focused on completeness, should output full configuration checksums.
  */
 public abstract class CqueryThreadsafeCallback
-    extends NamedThreadSafeOutputFormatterCallback<CqueryNode> {
+    extends NamedThreadSafeOutputFormatterCallback<ConfiguredTarget> {
 
   protected final ExtendedEventHandler eventHandler;
   protected final CqueryOptions options;
@@ -64,7 +64,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       boolean uniquifyResults) {
     this.eventHandler = eventHandler;
     this.options = options;
@@ -119,3 +119,4 @@
     return config == null ? "null" : config.shortId();
   }
 }
+
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java
index f9e9acf..16ae3e2 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java
@@ -24,6 +24,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimaps;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.DependencyKind;
 import com.google.devtools.build.lib.analysis.DependencyKind.NonAttributeDependencyKind;
 import com.google.devtools.build.lib.analysis.DependencyKind.ToolchainDependencyKind;
@@ -42,7 +43,6 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetEvaluationExceptions.ReportedException;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetEvaluationExceptions.UnreportedException;
@@ -126,7 +126,7 @@
    * @see ResolvedTransition for more details.
    * @param configuredTarget the configured target whose dependencies are being looked up.
    */
-  public ImmutableSet<ResolvedTransition> dependencies(CqueryNode configuredTarget)
+  public ImmutableSet<ResolvedTransition> dependencies(ConfiguredTarget configuredTarget)
       throws EvaluateException, InterruptedException {
     if (!(configuredTarget instanceof RuleConfiguredTarget)) {
       return ImmutableSet.of();
@@ -250,7 +250,7 @@
   }
 
   @Nullable
-  private ConfigurationTransition getRuleTransition(CqueryNode configuredTarget) {
+  private ConfigurationTransition getRuleTransition(ConfiguredTarget configuredTarget) {
     if (configuredTarget instanceof RuleConfiguredTarget) {
       return computeTransition(
           accessor.getTarget(configuredTarget).getAssociatedRule(),
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
index eafe800..f873120 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper;
 import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import java.io.IOException;
@@ -37,7 +36,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       TopLevelArtifactContext topLevelArtifactContext) {
     // Different targets may provide the same artifact, so we deduplicate the collection of all
     // results at the end.
@@ -51,17 +50,14 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult)
+  public void processOutput(Iterable<ConfiguredTarget> partialResult)
       throws IOException, InterruptedException {
-    for (CqueryNode target : partialResult) {
-      if (!(target instanceof ConfiguredTarget)
-          || (!TopLevelArtifactHelper.shouldConsiderForDisplay(target)
-              && !(target instanceof InputFileConfiguredTarget))) {
+    for (ConfiguredTarget target : partialResult) {
+      if (!TopLevelArtifactHelper.shouldConsiderForDisplay(target)
+          && !(target instanceof InputFileConfiguredTarget)) {
         continue;
       }
-
-      var cf = (ConfiguredTarget) target;
-      TopLevelArtifactHelper.getAllArtifactsToBuild(cf, topLevelArtifactContext)
+      TopLevelArtifactHelper.getAllArtifactsToBuild(target, topLevelArtifactContext)
           .getImportantArtifacts()
           .toList()
           .stream()
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallback.java
index a03dfcf..d42edca 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallback.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.query2.cquery;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.graph.Digraph;
 import com.google.devtools.build.lib.graph.Node;
 import com.google.devtools.build.lib.packages.LabelPrinter;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.query2.query.output.GraphOutputWriter;
 import com.google.devtools.build.lib.query2.query.output.GraphOutputWriter.NodeReader;
@@ -38,15 +38,15 @@
   /** Interface for finding a configured target's direct dependencies. */
   @FunctionalInterface
   public interface DepsRetriever {
-    Iterable<CqueryNode> getDirectDeps(CqueryNode target) throws InterruptedException;
+    Iterable<ConfiguredTarget> getDirectDeps(ConfiguredTarget target) throws InterruptedException;
   }
 
   private final DepsRetriever depsRetriever;
 
-  private final GraphOutputWriter.NodeReader<CqueryNode> nodeReader =
-      new NodeReader<CqueryNode>() {
+  private final GraphOutputWriter.NodeReader<ConfiguredTarget> nodeReader =
+      new NodeReader<ConfiguredTarget>() {
 
-        private final Comparator<CqueryNode> configuredTargetOrdering =
+        private final Comparator<ConfiguredTarget> configuredTargetOrdering =
             (ct1, ct2) -> {
               // Order graph output first by target label, then by configuration hash.
               Label label1 = ct1.getOriginalLabel();
@@ -66,18 +66,18 @@
             };
 
         @Override
-        public String getLabel(Node<CqueryNode> node, LabelPrinter labelPrinter) {
+        public String getLabel(Node<ConfiguredTarget> node, LabelPrinter labelPrinter) {
           // Node payloads are ConfiguredTargets. Output node labels are target labels + config
           // hashes.
-          CqueryNode kct = node.getLabel();
+          ConfiguredTarget kct = node.getLabel();
           return String.format(
               "%s (%s)",
-              kct.getDescription(labelPrinter),
+              labelPrinter.toString(kct.getOriginalLabel()),
               shortId(getConfiguration(kct.getConfigurationKey())));
         }
 
         @Override
-        public Comparator<CqueryNode> comparator() {
+        public Comparator<ConfiguredTarget> comparator() {
           return configuredTargetOrdering;
         }
       };
@@ -89,7 +89,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       DepsRetriever depsRetriever,
       LabelPrinter labelPrinter) {
     super(eventHandler, options, out, skyframeExecutor, accessor, /* uniquifyResults= */ false);
@@ -98,23 +98,23 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult) throws InterruptedException {
+  public void processOutput(Iterable<ConfiguredTarget> partialResult) throws InterruptedException {
     // Transform the cquery-backed graph into a Digraph to make it suitable for GraphOutputWriter.
     // Note that this involves an extra iteration over the entire query result subgraph. We could
     // conceptually merge transformation and output writing into the same iteration if needed.
-    Digraph<CqueryNode> graph = new Digraph<>();
-    ImmutableSet<CqueryNode> allNodes = ImmutableSet.copyOf(partialResult);
-    for (CqueryNode configuredTarget : partialResult) {
-      Node<CqueryNode> node = graph.createNode(configuredTarget);
-      for (CqueryNode dep : depsRetriever.getDirectDeps(configuredTarget)) {
+    Digraph<ConfiguredTarget> graph = new Digraph<>();
+    ImmutableSet<ConfiguredTarget> allNodes = ImmutableSet.copyOf(partialResult);
+    for (ConfiguredTarget configuredTarget : partialResult) {
+      Node<ConfiguredTarget> node = graph.createNode(configuredTarget);
+      for (ConfiguredTarget dep : depsRetriever.getDirectDeps(configuredTarget)) {
         if (allNodes.contains(dep)) {
-          Node<CqueryNode> depNode = graph.createNode(dep);
+          Node<ConfiguredTarget> depNode = graph.createNode(dep);
           graph.addEdge(node, depNode);
         }
       }
     }
 
-    GraphOutputWriter<CqueryNode> graphWriter =
+    GraphOutputWriter<ConfiguredTarget> graphWriter =
         new GraphOutputWriter<>(
             nodeReader,
             options.getLineTerminator(),
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
index b9a411e..3aa922b 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.util.ClassName;
@@ -38,7 +37,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       boolean showKind,
       LabelPrinter labelPrinter) {
     super(eventHandler, options, out, skyframeExecutor, accessor, /* uniquifyResults= */ false);
@@ -52,8 +51,8 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult) {
-    for (CqueryNode keyedConfiguredTarget : partialResult) {
+  public void processOutput(Iterable<ConfiguredTarget> partialResult) {
+    for (ConfiguredTarget keyedConfiguredTarget : partialResult) {
       StringBuilder output = new StringBuilder();
       if (showKind) {
         Target actualTarget = accessor.getTarget(keyedConfiguredTarget);
@@ -61,7 +60,7 @@
       }
       output =
           output
-              .append(keyedConfiguredTarget.getDescription(labelPrinter))
+              .append(labelPrinter.toString(keyedConfiguredTarget.getOriginalLabel()))
               .append(" (")
               .append(shortId(getConfiguration(keyedConfiguredTarget.getConfigurationKey())))
               .append(")");
@@ -75,13 +74,9 @@
   }
 
   private static ImmutableSortedSet<String> requiredFragmentStrings(
-      CqueryNode keyedConfiguredTarget) {
-    if (!(keyedConfiguredTarget instanceof ConfiguredTarget)) {
-      return ImmutableSortedSet.of();
-    }
-
+      ConfiguredTarget keyedConfiguredTarget) {
     RequiredConfigFragmentsProvider requiredFragments =
-        ((ConfiguredTarget) keyedConfiguredTarget)
+        keyedConfiguredTarget
             .getProvider(RequiredConfigFragmentsProvider.class);
     if (requiredFragments == null) {
       return ImmutableSortedSet.of();
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
index df4b277..c9b63cd 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.Configuration;
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.CqueryResult;
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.CqueryResultOrBuilder;
-import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
@@ -37,7 +37,6 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.CqueryOptions.Transitions;
 import com.google.devtools.build.lib.query2.cquery.CqueryTransitionResolver.EvaluateException;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
@@ -57,7 +56,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Function;
 
 /** Proto output formatter for cquery results. */
 class ProtoOutputFormatterCallback extends CqueryThreadsafeCallback {
@@ -82,24 +80,11 @@
 
   private static class ConfigurationCache {
     private final Map<BuildConfigurationEvent, Integer> cache = new HashMap<>();
-    private final Function<BuildConfigurationKey, BuildConfigurationValue> configurationGetter;
-
-    private ConfigurationCache(
-        Function<BuildConfigurationKey, BuildConfigurationValue> configurationGetter) {
-      this.configurationGetter = configurationGetter;
-    }
 
     public int getId(BuildConfigurationEvent buildConfigurationEvent) {
       return cache.computeIfAbsent(buildConfigurationEvent, event -> cache.size() + 1);
     }
 
-    public int getId(BuildOptions options) {
-      BuildConfigurationValue configurationValue =
-          configurationGetter.apply(BuildConfigurationKey.create(options));
-      BuildConfigurationEvent buildConfigurationEvent = configurationValue.toBuildEvent();
-      return getId(buildConfigurationEvent);
-    }
-
     public ImmutableList<Configuration> getConfigurations() {
       return cache.entrySet().stream()
           .map(
@@ -125,21 +110,20 @@
   private final OutputType outputType;
   private final AspectResolver resolver;
   private final SkyframeExecutor skyframeExecutor;
-  private final ConfigurationCache configurationCache =
-      new ConfigurationCache(this::getConfiguration);
+  private final ConfigurationCache configurationCache = new ConfigurationCache();
   private final JsonFormat.Printer jsonPrinter = JsonFormat.printer();
   private final RuleClassProvider ruleClassProvider;
 
   private final Map<Label, Target> partialResultMap;
   private final LabelPrinter labelPrinter;
-  private CqueryNode currentTarget;
+  private ConfiguredTarget currentTarget;
 
   ProtoOutputFormatterCallback(
       ExtendedEventHandler eventHandler,
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       AspectResolver resolver,
       OutputType outputType,
       RuleClassProvider ruleClassProvider,
@@ -238,7 +222,7 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult)
+  public void processOutput(Iterable<ConfiguredTarget> partialResult)
       throws InterruptedException, IOException {
     partialResult.forEach(
         kct -> partialResultMap.put(kct.getOriginalLabel(), accessor.getTarget(kct)));
@@ -253,7 +237,7 @@
 
     ConfiguredProtoOutputFormatter formatter = new ConfiguredProtoOutputFormatter();
     formatter.setOptions(options, resolver, skyframeExecutor.getDigestFunction().getHashFunction());
-    for (CqueryNode keyedConfiguredTarget : partialResult) {
+    for (ConfiguredTarget keyedConfiguredTarget : partialResult) {
       AnalysisProtosV2.ConfiguredTarget.Builder builder =
           AnalysisProtosV2.ConfiguredTarget.newBuilder();
 
@@ -277,7 +261,9 @@
                           .setLabel(labelPrinter.toString(resolvedTransition.label())));
             } else {
               for (BuildOptions options : resolvedTransition.options()) {
-                int configurationId = configurationCache.getId(options);
+                BuildConfigurationEvent buildConfigurationEvent =
+                    getConfiguration(BuildConfigurationKey.create(options)).toBuildEvent();
+                int configurationId = configurationCache.getId(buildConfigurationEvent);
 
                 targetBuilder
                     .getRuleBuilder()
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
index e744685..a4ecf87 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
@@ -17,6 +17,7 @@
 import static com.google.devtools.build.lib.analysis.config.StarlarkDefinedConfigTransition.COMMAND_LINE_OPTION_PREFIX;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.FragmentOptions;
@@ -24,7 +25,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.query2.engine.QueryException;
 import com.google.devtools.build.lib.server.FailureDetails.ConfigurableQuery;
@@ -64,7 +64,7 @@
         parameters = {
           @Param(name = "target"),
         })
-    public Object buildOptions(CqueryNode target) {
+    public Object buildOptions(ConfiguredTarget target) {
       BuildConfigurationValue config = getConfiguration(target.getConfigurationKey());
 
       if (config == null) {
@@ -118,7 +118,7 @@
         parameters = {
           @Param(name = "target"),
         })
-    public Object providers(CqueryNode target) {
+    public Object providers(ConfiguredTarget target) {
       Dict<String, Object> ret = target.getProvidersDictForQuery();
       if (ret == null) {
         return Starlark.NONE;
@@ -129,7 +129,7 @@
 
   private static final Object[] NO_ARGS = new Object[0];
 
-  // Starlark function with single required parameter "target", a CqueryNode query result.
+  // Starlark function with single required parameter "target", a ConfiguredTarget query result.
   private final StarlarkFunction formatFn;
   private final StarlarkSemantics starlarkSemantics;
 
@@ -138,7 +138,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       StarlarkSemantics starlarkSemantics)
       throws QueryException, InterruptedException {
     super(eventHandler, options, out, skyframeExecutor, accessor, /* uniquifyResults= */ false);
@@ -227,8 +227,8 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult) throws InterruptedException {
-    for (CqueryNode target : partialResult) {
+  public void processOutput(Iterable<ConfiguredTarget> partialResult) throws InterruptedException {
+    for (ConfiguredTarget target : partialResult) {
       try {
         StarlarkThread thread =
             new StarlarkThread(Mutability.create("cquery evaluation"), starlarkSemantics);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
index cd0393c..b1d5992 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -17,6 +17,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.BuildOptions.OptionsDiff;
@@ -31,7 +32,6 @@
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.packages.RuleTransitionData;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.CqueryTransitionResolver.EvaluateException;
 import com.google.devtools.build.lib.query2.cquery.CqueryTransitionResolver.ResolvedTransition;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
@@ -63,7 +63,7 @@
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<CqueryNode> accessor,
+      TargetAccessor<ConfiguredTarget> accessor,
       RuleClassProvider ruleClassProvider,
       LabelPrinter labelPrinter) {
     super(eventHandler, options, out, skyframeExecutor, accessor, /* uniquifyResults= */ false);
@@ -74,7 +74,7 @@
   }
 
   @Override
-  public void processOutput(Iterable<CqueryNode> partialResult) throws InterruptedException {
+  public void processOutput(Iterable<ConfiguredTarget> partialResult) throws InterruptedException {
     CqueryOptions.Transitions verbosity = options.transitions;
     if (verbosity.equals(CqueryOptions.Transitions.NONE)) {
       eventHandler.handle(
@@ -85,7 +85,7 @@
     }
     partialResult.forEach(
         kct -> partialResultMap.put(kct.getOriginalLabel(), accessor.getTarget(kct)));
-    for (CqueryNode keyedConfiguredTarget : partialResult) {
+    for (ConfiguredTarget keyedConfiguredTarget : partialResult) {
       Target target = partialResultMap.get(keyedConfiguredTarget.getOriginalLabel());
       BuildConfigurationValue config =
           getConfiguration(keyedConfiguredTarget.getConfigurationKey());
@@ -130,7 +130,7 @@
     }
   }
 
-  private static String getRuleClassTransition(CqueryNode ct, Target target) {
+  private static String getRuleClassTransition(ConfiguredTarget ct, Target target) {
     String output = "";
     if (ct instanceof RuleConfiguredTarget) {
       TransitionFactory<RuleTransitionData> factory =
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
index 6ae3a13..87b6e1e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
@@ -647,10 +647,7 @@
     NO_NODEP_DEPS,
 
     /** Include aspect-generated output. No-op for query, which always follows aspects. */
-    INCLUDE_ASPECTS,
-
-    /** Include configured aspect targets in cquery output. */
-    EXPLICIT_ASPECTS;
+    INCLUDE_ASPECTS;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD
index 9ffaae3..96acbd1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD
@@ -255,7 +255,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
@@ -393,13 +393,12 @@
     srcs = ["repository/RepositoryDirectoryValue.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe:directory_listing_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
-        "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -464,7 +463,6 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java b/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
index f86b8ee..35634ce 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.ToolchainResolutionMode;
 import com.google.devtools.build.lib.rules.LateBoundAlias.AbstractAliasRule;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import net.starlark.java.eval.Starlark;
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
index 5bee3a2..f23d9f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.rules.android.AndroidDataConverter.JoinerType;
 import com.google.devtools.build.lib.rules.android.databinding.DataBindingContext;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import java.util.Collections;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
index b3162f6..f37c4d7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -69,6 +69,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:platform_configuration",
         "//src/main/java/com/google/devtools/build/lib/analysis:platform_options",
         "//src/main/java/com/google/devtools/build/lib/analysis:required_config_fragments_provider",
+        "//src/main/java/com/google/devtools/build/lib/analysis:resolved_toolchain_context",
         "//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
         "//src/main/java/com/google/devtools/build/lib/analysis:rule_error_consumer",
         "//src/main/java/com/google/devtools/build/lib/analysis:starlark/function_transition_util",
@@ -92,7 +93,6 @@
         "//src/main/java/com/google/devtools/build/lib/rules/java:java-rules",
         "//src/main/java/com/google/devtools/build/lib/rules/proto",
         "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
index 598b167..b4a2ff6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
@@ -15,7 +15,7 @@
 
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.rules.android.AndroidDataConverter.JoinerType;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
index 9fd5171..12717d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
@@ -26,6 +26,7 @@
         ":config_feature_flag_options",
         ":feature_flag_value",
         "//src/main/java/com/google/devtools/build/lib/actions",
+        "//src/main/java/com/google/devtools/build/lib/actions:artifact_owner",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:build_setting_provider",
@@ -37,6 +38,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:config/core_options",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/invalid_configuration_exception",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/starlark_defined_config_transition",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/toolchain_type_requirement",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/no_transition",
@@ -61,7 +63,6 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/rules/core",
         "//src/main/java/com/google/devtools/build/lib/rules/platform",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
index f7767d2..2597279 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
@@ -32,7 +32,7 @@
 import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 
 /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 8ec70b0..0da6a4f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -111,7 +111,6 @@
         "//src/main/java/com/google/devtools/build/lib/shell",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_value",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index f61334a..70b2471 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -36,8 +36,8 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.SingleVariables;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.StringChunk;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.StringValueParser;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/BUILD b/src/main/java/com/google/devtools/build/lib/rules/genquery/BUILD
index a08c5d6..6df1f3f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/BUILD
@@ -91,7 +91,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:target_loading_util",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_key",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_value",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
index 0594d42..e6c6ab7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
@@ -36,7 +36,6 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skyframe.TargetLoadingUtil;
 import com.google.devtools.build.lib.skyframe.TargetLoadingUtil.TargetAndErrorIfAny;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.PartialReevaluationMailbox;
@@ -80,7 +79,7 @@
       super(ImmutableList.sortedCopyOf(arg));
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(ImmutableList<Label> arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 6ad4258..3a42d65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -154,7 +154,6 @@
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
         "//src/main/java/com/google/devtools/build/lib/shell",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java
index 54b3125..a13a862 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import javax.annotation.Nullable;
@@ -119,7 +119,7 @@
     return VectorArg.of(jarsToCheck).mapped(EXPAND_TO_JAR_AND_TARGET);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final CommandLineItem.MapFn<Artifact> EXPAND_TO_JAR_AND_TARGET =
       (jar, args) ->
           args.accept(jar.getExecPathString() + "," + getArtifactOwnerGeneralizedLabel(jar));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
index efd6e5a..6b8e4b1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
@@ -26,21 +26,27 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/build_options_cache",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/core_option_converters",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/configuration_transition",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/no_transition",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/patch_transition",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/transition_factory",
         "//src/main/java/com/google/devtools/build/lib/analysis:file_provider",
         "//src/main/java/com/google/devtools/build/lib/analysis:repo_mapping_manifest_action",
         "//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
         "//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_collection",
+        "//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_provider",
         "//src/main/java/com/google/devtools/build/lib/analysis/starlark/annotations",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
+        "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python",
@@ -54,6 +60,7 @@
         "//src/main/java/net/starlark/java/eval",
         "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:extra_actions_base_java_proto",
+        "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
         "//third_party/protobuf:protobuf_java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
index 91a8651..7d8663a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.protobuf.GeneratedMessage.GeneratedExtension;
 import java.util.Collection;
@@ -104,7 +104,7 @@
         info);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final GeneratedExtension<ExtraActionInfo, PythonInfo> PYTHON_INFO = PythonInfo.pythonInfo;
 
   // Used purely to set the legacy ActionType of the ExtraActionInfo.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
index e646faf..82be0a6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -181,7 +180,7 @@
   }
 
   /** The SkyKey for retrieving the local directory of an external repository. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<RepositoryName> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -190,7 +189,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RepositoryName arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
index 3099ed6..ddbfc6c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
@@ -16,7 +16,6 @@
 
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -50,7 +49,7 @@
       this.path = path;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static ResolvedFileKey create(RootedPath path) {
       return interner.intern(new ResolvedFileKey(path));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionEnvironmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionEnvironmentFunction.java
index 6e0f758..dc4246e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionEnvironmentFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionEnvironmentFunction.java
@@ -18,7 +18,6 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.bugreport.BugReport;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -52,7 +51,7 @@
     return Key.create(variable);
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<String> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -61,7 +60,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(String arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionLookupConflictFindingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionLookupConflictFindingValue.java
index 35dd401..fe5ee5d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionLookupConflictFindingValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionLookupConflictFindingValue.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.actions.ActionLookupValue;
 import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -46,7 +45,7 @@
         ((Artifact.DerivedArtifact) artifact).getGeneratingActionKey().getActionLookupKey());
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<ActionLookupKey> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -55,7 +54,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(ActionLookupKey arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
index cbdd287..a80ba14 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
@@ -16,14 +16,15 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionLookupKey;
 import com.google.devtools.build.lib.actions.BasicActionLookupValue;
 import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyFunctionName;
-import com.google.devtools.build.skyframe.SkyKey;
 
 /** Value that stores expanded actions from ActionTemplate. */
 public final class ActionTemplateExpansionValue extends BasicActionLookupValue {
@@ -39,7 +40,8 @@
   /** Key for {@link ActionTemplateExpansionValue} nodes. */
   @AutoCodec
   public static final class ActionTemplateExpansionKey implements ActionLookupKey {
-    private static final SkyKeyInterner<ActionTemplateExpansionKey> interner = SkyKey.newInterner();
+    private static final Interner<ActionTemplateExpansionKey> interner =
+        BlazeInterners.newWeakInterner();
 
     private final ActionLookupKey actionLookupKey;
     private final int actionIndex;
@@ -83,11 +85,6 @@
     }
 
     @Override
-    public SkyKeyInterner<ActionTemplateExpansionKey> getSkyKeyInterner() {
-      return interner;
-    }
-
-    @Override
     public int hashCode() {
       return 37 * actionLookupKey.hashCode() + actionIndex;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
index 8f5947e..8c2a068 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
@@ -18,6 +18,7 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.actions.Action;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionExecutionException;
@@ -35,6 +36,7 @@
 import com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode;
 import com.google.devtools.build.lib.bugreport.BugReport;
 import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.server.FailureDetails.Execution;
 import com.google.devtools.build.lib.server.FailureDetails.Execution.Code;
@@ -584,8 +586,8 @@
 
   private static final class DirectoryArtifactTraversalRequest extends TraversalRequest {
 
-    private static final SkyKeyInterner<DirectoryArtifactTraversalRequest> interner =
-        SkyKey.newInterner();
+    private static final Interner<DirectoryArtifactTraversalRequest> interner =
+        BlazeInterners.newWeakInterner();
 
     static DirectoryArtifactTraversalRequest create(
         DirectTraversalRoot root, boolean skipTestingForSubpackage, Artifact artifact) {
@@ -646,11 +648,6 @@
     }
 
     @Override
-    public SkyKeyInterner<DirectoryArtifactTraversalRequest> getSkyKeyInterner() {
-      return interner;
-    }
-
-    @Override
     public int hashCode() {
       // Artifact is only for error info and not considered in hash code or equality.
       return root.hashCode() * 31 + Boolean.hashCode(skipTestingForSubpackage);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
index 3f4d7fb..72473ac 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
@@ -24,10 +24,7 @@
 import com.google.devtools.build.lib.packages.AspectClass;
 import com.google.devtools.build.lib.packages.AspectDescriptor;
 import com.google.devtools.build.lib.packages.AspectParameters;
-import com.google.devtools.build.lib.packages.LabelPrinter;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.HashCodes;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -97,7 +94,7 @@
    * aspects and its {@code baseKeys} list will be empty.
    */
   @AutoCodec
-  public abstract static class AspectKey extends AspectBaseKey implements CqueryNode {
+  public abstract static class AspectKey extends AspectBaseKey {
     private static final SkyKeyInterner<AspectKey> interner = SkyKey.newInterner();
 
     private final AspectDescriptor aspectDescriptor;
@@ -110,7 +107,7 @@
       this.aspectDescriptor = aspectDescriptor;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static AspectKey createAspectKey(
         ConfiguredTargetKey baseConfiguredTargetKey,
@@ -148,11 +145,6 @@
     public abstract String getDescription();
 
     @Override
-    public String getDescription(LabelPrinter labelPrinter) {
-      return getDescription();
-    }
-
-    @Override
     public SkyFunctionName functionName() {
       return SkyFunctions.ASPECT;
     }
@@ -172,16 +164,6 @@
       return getBaseConfiguredTargetKey().getLabel();
     }
 
-    @Override
-    public SkyKeyInterner<AspectKey> getSkyKeyInterner() {
-      return interner;
-    }
-
-    @Override
-    public ActionLookupKey getLookupKey() {
-      return this;
-    }
-
     public AspectClass getAspectClass() {
       return aspectDescriptor.getAspectClass();
     }
@@ -232,15 +214,11 @@
           getLabel(), aspectDescriptor.getAspectClass().getName(), baseKeysString);
     }
 
-    public String getAspectLabel() {
-      return (getBaseKeys().isEmpty() ? getLabel() : getBaseKeys().toString())
-          + "#"
-          + aspectDescriptor;
-    }
-
     @Override
     public String toString() {
-      return getAspectLabel()
+      return (getBaseKeys().isEmpty() ? getLabel() : getBaseKeys().toString())
+          + "#"
+          + aspectDescriptor
           + " "
           + getBaseConfiguredTargetKey()
           + " "
@@ -260,6 +238,11 @@
           aspectDescriptor);
     }
 
+    @Override
+    public SkyKeyInterner<AspectKey> getSkyKeyInterner() {
+      return interner;
+    }
+
     static class SimpleAspectKey extends AspectKey {
       SimpleAspectKey(
           ConfiguredTargetKey baseConfiguredTargetKey,
@@ -298,10 +281,7 @@
 
       @Override
       public String getDescription() {
-        return String.format(
-            "%s on top of %s",
-            getAspectClass().getName(),
-            baseKeys.stream().map(AspectKey::getDescription).collect(toImmutableList()));
+        return String.format("%s on top of %s", getAspectClass().getName(), baseKeys);
       }
     }
   }
@@ -319,7 +299,7 @@
     private final ImmutableMap<String, String> topLevelAspectsParameters;
 
     @AutoCodec.Instantiator
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     static TopLevelAspectsKey createInternal(
         ImmutableList<AspectClass> topLevelAspectsClasses,
         Label targetLabel,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 8a9d613..ecd48b6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -321,7 +321,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/rewinding",
         "//src/main/java/com/google/devtools/build/lib/skyframe/rewinding:action_rewound_event",
         "//src/main/java/com/google/devtools/build/lib/skyframe/rewinding:rewindable_graph_inconsistency_receiver",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:registered_execution_platforms_function",
@@ -412,7 +411,7 @@
         ":precomputed_value",
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/bugreport",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -498,7 +497,6 @@
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -747,10 +745,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util:hash_codes",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -771,9 +766,9 @@
         ":starlark_builtins_value",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -813,7 +808,7 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
@@ -973,10 +968,11 @@
     deps = [
         ":client_environment_value",
         ":sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
         "//third_party:jsr305",
     ],
 )
@@ -1017,7 +1013,6 @@
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -1052,8 +1047,8 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -1098,8 +1093,8 @@
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util:hash_codes",
@@ -1151,7 +1146,7 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -1241,7 +1236,6 @@
         ":dirents",
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -1259,10 +1253,10 @@
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
     ],
 )
 
@@ -1584,11 +1578,12 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
     ],
 )
 
@@ -1629,8 +1624,8 @@
         ":package_value",
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -1659,10 +1654,11 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
     ],
 )
 
@@ -1718,9 +1714,9 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -1806,9 +1802,9 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -1827,7 +1823,6 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -1865,7 +1860,6 @@
         ":target_pattern_value",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/query2/common:UniverseSkyKey",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -2039,16 +2033,15 @@
         "//src/main/java/com/google/devtools/build/lib/io:file_symlink_infinite_expansion_uniqueness_function",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/profiler",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
+        "//src/main/java/com/google/devtools/build/skyframe:execution_phase_skykey",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/protobuf:failure_details_java_proto",
-        "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -2129,7 +2122,6 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -2426,7 +2418,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/net/starlark/java/eval",
@@ -2464,11 +2456,12 @@
     deps = [
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//third_party:guava",
         "//third_party:jsr305",
     ],
 )
@@ -2540,7 +2533,7 @@
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/analysis:top_level_artifact_context",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//third_party:auto_value",
@@ -2833,7 +2826,6 @@
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
         "//src/main/java/com/google/devtools/build/lib/actions:has_digest",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util",
@@ -2883,7 +2875,6 @@
     srcs = ["WorkspaceNameValue.java"],
     deps = [
         ":sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -2945,7 +2936,6 @@
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
index 181cd8f..b6a1393 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.Root;
@@ -57,7 +56,7 @@
   public abstract String getError(); // on failure
 
   /** If the file is compiled successfully, this class encapsulates the compiled program. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   public static class Success extends BzlCompileValue {
     private final Program prog;
     private final byte[] digest;
@@ -90,7 +89,7 @@
   }
 
   /** If the file isn't found or has errors, this class encapsulates a message with the reason. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   public static class Failure extends BzlCompileValue {
     private final String errorMsg;
 
@@ -176,7 +175,7 @@
       }
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(Root root, Label label, Kind kind) {
       return interner.intern(new Key(root, label, kind));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
index bd87eac..e92d018 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.BzlVisibility;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -202,7 +202,7 @@
 
   /** A key for loading a .bzl during package loading (BUILD evaluation). */
   @Immutable
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static final class KeyForBuild extends Key {
     private final Label label;
 
@@ -260,7 +260,7 @@
   // are we reevaluating whether its loads are still valid? AI: fix if broken, improve this comment
   // if not broken.
   @Immutable
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static final class KeyForWorkspace extends Key {
     private final Label label;
     private final int workspaceChunk;
@@ -322,7 +322,7 @@
    */
   // TODO(#11437): Prevent users from trying to declare a repo named "@_builtins".
   @Immutable
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static final class KeyForBuiltins extends Key {
     private final Label label;
 
@@ -356,7 +356,7 @@
 
   /** A key for loading a .bzl to get the repo rule required by Bzlmod generated repositories. */
   @Immutable
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static class KeyForBzlmod extends Key {
     private final Label label;
 
@@ -381,7 +381,7 @@
   }
 
   @Immutable
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static class KeyForBzlmodBootstrap extends KeyForBzlmod {
     private KeyForBzlmodBootstrap(Label label) {
       super(label);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
index b996d82..01adbd4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.lib.skyframe;
 
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -32,7 +31,7 @@
   }
 
   /** The Skyframe key for the client environment function. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<String> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -41,7 +40,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(String arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
index f0ebeed..403009f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
@@ -17,9 +17,10 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -53,7 +54,7 @@
  * directories above that one, but they don't need to be re-run.
  */
 public abstract class CollectPackagesUnderDirectoryValue implements SkyValue {
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   protected final ImmutableMap<RootedPath, Boolean>
       subdirectoryTransitivelyContainsPackagesOrErrors;
 
@@ -235,10 +236,10 @@
     return Key.create(repository, rootedPath, excludedPaths);
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends RecursivePkgSkyKey {
-    private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
+    private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
 
     private Key(
         RepositoryName repositoryName,
@@ -247,7 +248,7 @@
       super(repositoryName, rootedPath, excludedPaths);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(
         RepositoryName repositoryName,
@@ -260,10 +261,5 @@
     public SkyFunctionName functionName() {
       return SkyFunctions.COLLECT_PACKAGES_UNDER_DIRECTORY;
     }
-
-    @Override
-    public SkyKeyInterner<Key> getSkyKeyInterner() {
-      return interner;
-    }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageValue.java
index 52e1afd..dcf5763 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageValue.java
@@ -16,7 +16,6 @@
 import com.google.auto.value.AutoValue;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -45,7 +44,7 @@
   public abstract static class CollectTargetsInPackageKey implements SkyKey {
     private static final SkyKeyInterner<CollectTargetsInPackageKey> interner = SkyKey.newInterner();
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     public static CollectTargetsInPackageKey create(
         PackageIdentifier packageId, FilteringPolicy filteringPolicy) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
index 0b9c344..335d652 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
@@ -19,9 +19,9 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.devtools.build.lib.actions.ActionLookupKey;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
 import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
@@ -234,7 +234,7 @@
   }
 
   /** Returns the {@link ConfiguredTargetKey} that owns {@code configuredTarget}. */
-  public static ConfiguredTargetKey fromConfiguredTarget(CqueryNode configuredTarget) {
+  public static ConfiguredTargetKey fromConfiguredTarget(ConfiguredTarget configuredTarget) {
     // If configuredTarget is a MergedConfiguredTarget unwraps it first. MergedConfiguredTarget is
     // ephemeral and does not have a directly corresponding entry in Skyframe.
     //
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
index a2595a0..444c15b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
@@ -18,7 +18,6 @@
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -114,7 +113,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(PackageIdentifier arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
index ddb1294..14975e3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
@@ -17,7 +17,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -38,7 +37,7 @@
  *
  * <p>This class is an implementation detail of {@link DirectoryListingValue}.
  */
-@VisibleForSerialization
+@AutoCodec.VisibleForSerialization
 public final class DirectoryListingStateValue implements SkyValue {
 
   private final CompactSortedDirents compactSortedDirents;
@@ -58,7 +57,7 @@
   }
 
   /** Key type for DirectoryListingStateValue. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<RootedPath> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -67,7 +66,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RootedPath arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
index e131030..8ec47233 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
@@ -16,7 +16,6 @@
 import com.google.devtools.build.lib.actions.FileValue;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -63,7 +62,7 @@
   }
 
   /** Key type for DirectoryListingValue. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   public static class Key extends AbstractSkyKey<RootedPath> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -72,7 +71,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RootedPath arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
index d6bfbd4..a593b51 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.packages.WorkspaceFileValue;
 import com.google.devtools.build.lib.repository.ExternalPackageHelper;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -31,7 +31,7 @@
  * that will contain all the bind statements from the WORKSPACE file.
  */
 public class ExternalPackageFunction implements SkyFunction {
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final SkyKey KEY = () -> SkyFunctions.EXTERNAL_PACKAGE;
 
   private final ExternalPackageHelper externalPackageHelper;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
index 89b58b0..71c5716 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
@@ -16,7 +16,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -29,7 +28,7 @@
 public class IgnoredPackagePrefixesValue implements SkyValue {
   private final ImmutableSet<PathFragment> patterns;
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   public static final IgnoredPackagePrefixesValue EMPTY_LIST =
       new IgnoredPackagePrefixesValue(ImmutableSet.of());
 
@@ -69,7 +68,7 @@
     return false;
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<RepositoryName> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -78,7 +77,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RepositoryName arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
index 2137731..7f597c6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -35,7 +34,7 @@
     return Key.create(directory);
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<RootedPath> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -44,7 +43,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(RootedPath arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/NonRuleConfiguredTargetValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/NonRuleConfiguredTargetValue.java
index 446ca39..f71c2d7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/NonRuleConfiguredTargetValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/NonRuleConfiguredTargetValue.java
@@ -22,8 +22,8 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import javax.annotation.Nullable;
 
 /** A non-rule configured target in the context of a Skyframe graph. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorFunction.java
index 9c9ee45..b2cfb77 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorFunction.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -45,7 +44,7 @@
     return Key.create(packageIdentifier);
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<PackageIdentifier> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -54,7 +53,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(PackageIdentifier arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
index 400c65e..54c68a6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -75,7 +74,7 @@
     return Key.create(pkgId);
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<PackageIdentifier> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -84,7 +83,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(PackageIdentifier arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
index a773362..170bd16 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
@@ -20,7 +20,6 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.BuildFileName;
 import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -136,7 +135,7 @@
   }
 
   /** {@link SkyKey} for {@link PackageLookupValue} computation. */
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<PackageIdentifier> {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -145,7 +144,7 @@
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(PackageIdentifier arg) {
       return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
index 9ebeaa3..5ef5c37 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
@@ -22,8 +22,8 @@
 import com.google.devtools.build.lib.packages.Package.ConfigSettingVisibilityPolicy;
 import com.google.devtools.build.lib.packages.RuleVisibility;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.Differencer.DiffWithDelta.Delta;
 import com.google.devtools.build.skyframe.Injectable;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
index a310d0e..c691a3e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
 import com.google.devtools.build.lib.server.FailureDetails.TargetPatterns;
 import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -198,7 +197,7 @@
         super(arg);
       }
 
-      @VisibleForSerialization
+      @AutoCodec.VisibleForSerialization
       @AutoCodec.Instantiator
       static Key create(TargetPatternKey arg) {
         return interner.intern(new Key(arg));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
index 3324eaa..cd0492d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
@@ -16,11 +16,12 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Interner;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.query2.common.UniverseSkyKey;
 import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -61,10 +62,11 @@
 
   /** The argument value for {@link SkyKey}s of {@link PrepareDepsOfPatternsFunction}. */
   @ThreadSafe
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class TargetPatternSequence implements UniverseSkyKey {
-    private static final SkyKeyInterner<TargetPatternSequence> interner = SkyKey.newInterner();
+    private static final Interner<TargetPatternSequence> interner =
+        BlazeInterners.newWeakInterner();
 
     private final ImmutableList<String> patterns;
     private final PathFragment offset;
@@ -74,7 +76,7 @@
       this.offset = Preconditions.checkNotNull(offset);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static TargetPatternSequence create(ImmutableList<String> patterns, PathFragment offset) {
       return interner.intern(new TargetPatternSequence(patterns, offset));
@@ -90,11 +92,6 @@
     }
 
     @Override
-    public SkyKeyInterner<TargetPatternSequence> getSkyKeyInterner() {
-      return interner;
-    }
-
-    @Override
     public boolean equals(Object o) {
       if (this == o) {
         return true;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
index 86b253c..70fa69d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
@@ -44,7 +44,7 @@
 import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.FileType;
 import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile;
 import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactory;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.Dirent;
@@ -75,7 +75,7 @@
   private static final byte[] MISSING_FINGERPRINT =
       new BigInteger(1, "NonexistentFileStateValue".getBytes(UTF_8)).toByteArray();
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final HasDigest NON_EXISTENT_HAS_DIGEST = () -> MISSING_FINGERPRINT;
 
   private static final FileInfo NON_EXISTENT_FILE_INFO =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
index f0539bf..7e190be 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
@@ -14,19 +14,19 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
-import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 
 /**
@@ -72,10 +72,10 @@
     return hasErrors;
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends RecursivePkgSkyKey {
-    private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
+    private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
 
     private Key(
         RepositoryName repositoryName,
@@ -84,7 +84,7 @@
       super(repositoryName, rootedPath, excludedPaths);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(
         RepositoryName repositoryName,
@@ -97,10 +97,5 @@
     public SkyFunctionName functionName() {
       return SkyFunctions.RECURSIVE_PKG;
     }
-
-    @Override
-    public SkyKeyInterner<Key> getSkyKeyInterner() {
-      return interner;
-    }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
index 07b0361..8b77993 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -38,7 +37,7 @@
     return Key.create(e.getMessage(), e.getDetailedExitCode());
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key implements SkyKey {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
@@ -50,7 +49,7 @@
       this.detailedExitCode = detailedExitCode;
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(String message, DetailedExitCode detailedExitCode) {
       return interner.intern(new Key(message, detailedExitCode));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
index a809433..8ad9fba 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
@@ -14,10 +14,11 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.auto.value.AutoValue;
+import com.google.common.collect.Interner;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -57,9 +58,9 @@
   @AutoCodec
   @AutoValue
   public abstract static class TestCompletionKey implements SkyKey {
-    private static final SkyKeyInterner<TestCompletionKey> interner = SkyKey.newInterner();
+    private static final Interner<TestCompletionKey> interner = BlazeInterners.newWeakInterner();
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static TestCompletionKey create(
         ConfiguredTargetKey configuredTargetKey,
@@ -84,10 +85,5 @@
     public final boolean valueIsShareable() {
       return false;
     }
-
-    @Override
-    public final SkyKeyInterner<TestCompletionKey> getSkyKeyInterner() {
-      return interner;
-    }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
index 1ba1353..58f0add 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.concurrent.ErrorClassifier;
 import com.google.devtools.build.lib.concurrent.NamedForkJoinPool;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.Dirent;
@@ -68,13 +68,12 @@
   private static final ForkJoinPool VISITOR_POOL =
       NamedForkJoinPool.newNamedPool(
           "tree-artifact-visitor", Runtime.getRuntime().availableProcessors());
-
   /**
    * Comparator based on exec path which works on {@link ActionInput} as opposed to {@link
    * com.google.devtools.build.lib.actions.Artifact}. This way, we can use an {@link ActionInput} to
    * search {@link #childData}.
    */
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final Comparator<ActionInput> EXEC_PATH_COMPARATOR =
       (input1, input2) -> input1.getExecPath().compareTo(input2.getExecPath());
 
@@ -183,15 +182,15 @@
 
   @SuppressWarnings("WeakerAccess") // Serialization constant.
   @SerializationConstant
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static final TreeArtifactValue EMPTY =
       new TreeArtifactValue(
           MetadataDigestUtils.fromMetadata(ImmutableMap.of()),
           EMPTY_MAP,
           0L,
-          /* archivedRepresentation= */ null,
-          /* materializationExecPath= */ null,
-          /* entirelyRemote= */ false);
+          /*archivedRepresentation=*/ null,
+          /*materializationExecPath=*/ null,
+          /*entirelyRemote=*/ false);
 
   private final byte[] digest;
   private final ImmutableSortedMap<TreeFileArtifact, FileArtifactValue> childData;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
index b5cca7d..62a55f4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.common.base.Preconditions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
@@ -29,7 +29,7 @@
  * the WORKSPACE file.
  */
 public class WorkspaceNameValue implements SkyValue {
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final SkyKey KEY = () -> SkyFunctions.WORKSPACE_NAME;
 
   private final String workspaceName;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/config/BUILD
index 563158e..0293d95 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/BUILD
@@ -72,7 +72,6 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
index 3fa55dd..6e2b173 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
@@ -33,7 +33,6 @@
 import com.google.devtools.build.lib.cmdline.RepositoryMapping;
 import com.google.devtools.build.lib.concurrent.ThreadSafety;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -84,7 +83,7 @@
     }
 
     @AutoCodec.Instantiator
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     static Key create(PathFragment workspaceRelativeMappingPath, boolean wasExplicitlySetByUser) {
       return interner.intern(new Key(workspaceRelativeMappingPath, wasExplicitlySetByUser));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
index d05bc91..8f33abb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -26,7 +26,6 @@
         exclude = [
             "SerializationConstants.java",
             "CodecScanningConstants.java",
-            "VisibleForSerialization.java",
         ],
     ),
     add_opens = [
@@ -54,8 +53,3 @@
         "//src/main/java/com/google/devtools/build/lib/util:resource_usage",
     ],
 )
-
-java_library(
-    name = "visible-for-serialization",
-    srcs = ["VisibleForSerialization.java"],
-)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/VisibleForSerialization.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/VisibleForSerialization.java
deleted file mode 100644
index 15551aa..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/VisibleForSerialization.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2023 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.skyframe.serialization;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Signals that the annotated element is only visible for use by serialization. It should not be
- * used by other callers.
- *
- * <p>TODO(janakr): Add an ErrorProne checker to enforce this.
- */
-@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
-@Retention(RetentionPolicy.SOURCE) // Documentation only.
-public @interface VisibleForSerialization {}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
index eb3a7ea0..0fe0dd1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
@@ -98,4 +98,13 @@
    * com.google.devtools.build.lib.skyframe.serialization.SerializationContext#addExplicitlyAllowedClass}.
    */
   Class<?>[] explicitlyAllowClass() default {};
+
+  /**
+   * Signals that the annotated element is only visible for use by serialization. It should not be
+   * used by other callers.
+   *
+   * <p>TODO(janakr): Add an ErrorProne checker to enforce this.
+   */
+  @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
+  @interface VisibleForSerialization {}
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/BUILD
index ae29a94..e08f783 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/BUILD
@@ -122,7 +122,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_key",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//third_party:auto_value",
@@ -192,7 +191,6 @@
         "//src/main/java/com/google/devtools/build/lib/analysis/platform",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
index 8470966..b9178a9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -39,7 +38,7 @@
 
   /** {@link SkyKey} implementation used for {@link RegisteredExecutionPlatformsFunction}. */
   @AutoCodec
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static class Key implements SkyKey {
     private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
 
@@ -50,7 +49,7 @@
     }
 
     @AutoCodec.Instantiator
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     static Key of(BuildConfigurationKey configurationKey) {
       return interner.intern(new Key(configurationKey));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
index 513a1fb..6356593 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.skyframe.config.BuildConfigurationKey;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -49,7 +48,7 @@
     }
 
     @AutoCodec.Instantiator
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     static Key of(BuildConfigurationKey configurationKey) {
       return interner.intern(new Key(configurationKey));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/util/BUILD b/src/main/java/com/google/devtools/build/lib/util/BUILD
index bc801a4..e7c57f3 100644
--- a/src/main/java/com/google/devtools/build/lib/util/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/util/BUILD
@@ -226,7 +226,6 @@
     ],
     deps = [
         ":string",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/vfs:ospathpolicy",
diff --git a/src/main/java/com/google/devtools/build/lib/util/FileType.java b/src/main/java/com/google/devtools/build/lib/util/FileType.java
index af9f86f..31b134e 100644
--- a/src/main/java/com/google/devtools/build/lib/util/FileType.java
+++ b/src/main/java/com/google/devtools/build/lib/util/FileType.java
@@ -19,7 +19,7 @@
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.vfs.OsPathPolicy;
 import java.util.ArrayList;
diff --git a/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java b/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java
index 323b786..0a81056 100644
--- a/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java
+++ b/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java
@@ -17,7 +17,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/BUILD b/src/main/java/com/google/devtools/build/lib/vfs/BUILD
index 141ce7f..f80997f 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/vfs/BUILD
@@ -68,7 +68,6 @@
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/io:file_symlink_exception",
         "//src/main/java/com/google/devtools/build/lib/profiler",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
index 74fdb77..c74062e 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
@@ -15,7 +15,6 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyKey;
 import java.util.Comparator;
@@ -52,7 +51,7 @@
 
   /** Constructs a {@link RootedPath} from a {@link Root} and path fragment relative to the root. */
   @AutoCodec.Instantiator
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static RootedPath createInternal(Root root, PathFragment rootRelativePath) {
     checkArgument(
         rootRelativePath.isAbsolute() == root.isAbsolute(),
diff --git a/src/main/java/com/google/devtools/build/skyframe/BUILD b/src/main/java/com/google/devtools/build/skyframe/BUILD
index 7b07ff1..d9c920b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/skyframe/BUILD
@@ -28,7 +28,7 @@
         "//src/main/java/com/google/devtools/build/lib/bugreport",
         "//src/main/java/com/google/devtools/build/lib/collect/compacthashset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util:TestType",
         "//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java b/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
index d396012..e9d1ebf 100644
--- a/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
+++ b/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
@@ -22,7 +22,7 @@
 import com.google.common.collect.Lists;
 import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadHostile;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
@@ -338,7 +338,7 @@
     return elements.contains(key);
   }
 
-  @SerializationConstant @VisibleForSerialization
+  @SerializationConstant @AutoCodec.VisibleForSerialization
   static final @Compressed Object EMPTY_COMPRESSED = new Object();
 
   /**
diff --git a/src/main/java/net/starlark/java/eval/Dict.java b/src/main/java/net/starlark/java/eval/Dict.java
index d782efa..6ff9a7e 100644
--- a/src/main/java/net/starlark/java/eval/Dict.java
+++ b/src/main/java/net/starlark/java/eval/Dict.java
@@ -453,13 +453,13 @@
               Starlark.checkValid(v);
             });
         @SuppressWarnings("unchecked")
-        ImmutableMap<K, V> immutableMap = (ImmutableMap<K, V>) m;
+        var immutableMap = (ImmutableMap<K, V>) m;
         return new Dict<>(immutableMap);
       }
 
       if (m instanceof Dict && ((Dict<?, ?>) m).isImmutable()) {
         @SuppressWarnings("unchecked")
-        Dict<K, V> dict = (Dict<K, V>) m;
+        var dict = (Dict<K, V>) m;
         return dict;
       }
 
diff --git a/src/main/java/net/starlark/java/eval/Module.java b/src/main/java/net/starlark/java/eval/Module.java
index b7279a2..740f275 100644
--- a/src/main/java/net/starlark/java/eval/Module.java
+++ b/src/main/java/net/starlark/java/eval/Module.java
@@ -184,7 +184,7 @@
    */
   @Nullable
   public Object getPredeclared(String name) {
-    Object value = predeclared.get(name);
+    var value = predeclared.get(name);
     if (value == null) {
       return null;
     }
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
index cf2af7d..c95ca9d 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
@@ -474,6 +474,7 @@
         "//src/main/protobuf:invocation_policy_java_proto",
         "//src/test/java/com/google/devtools/build/lib/buildtool/util",
         "//src/test/java/com/google/devtools/build/lib/events:testutil",
+        "//src/test/java/com/google/devtools/build/lib/testutil:TestConstants",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestUtils",
         "//src/test/java/com/google/devtools/build/skyframe:testutil",
         "//third_party:guava",
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
index d3bd09d..9e1d90b 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
@@ -19,11 +19,11 @@
     deps = [
         ":configured_target_query_helper",
         ":configured_target_query_test",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
@@ -42,10 +42,11 @@
     deps = [
         ":configured_target_query_helper",
         ":configured_target_query_test",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
+        "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//third_party:guava",
         "//third_party:junit4",
@@ -66,12 +67,11 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transition_factories",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/patch_transition",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/analysis:test/test_configuration",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -89,9 +89,9 @@
     testonly = 1,
     srcs = ["ConfiguredTargetQueryHelper.java"],
     deps = [
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
@@ -111,9 +111,9 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/split_transition",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
         "//src/test/java/com/google/devtools/build/lib/query2/testutil",
@@ -133,11 +133,11 @@
         ":configured_target_query_test",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
@@ -164,11 +164,12 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transition_factories",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/no_transition",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/transitions/transition_factory",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
+        "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:label_printer",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
@@ -187,10 +188,10 @@
         ":configured_target_query_helper",
         ":configured_target_query_test",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
+        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/analysis:top_level_artifact_context",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/query2",
-        "//src/main/java/com/google/devtools/build/lib/query2/common:cquery-node",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//third_party:guava",
         "//third_party:junit4",
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallbackTest.java
index fc3672a..b5fb358 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallbackTest.java
@@ -19,12 +19,12 @@
 import static com.google.devtools.build.lib.packages.BuildType.OUTPUT;
 
 import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.util.MockRule;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
 import com.google.devtools.build.lib.query2.engine.QueryExpression;
 import com.google.devtools.build.lib.query2.engine.QueryParser;
@@ -75,7 +75,7 @@
     Set<String> targetPatternSet = new LinkedHashSet<>();
     expression.collectTargetPatterns(targetPatternSet);
     helper.setQuerySettings(Setting.NO_IMPLICIT_DEPS);
-    PostAnalysisQueryEnvironment<CqueryNode> env =
+    PostAnalysisQueryEnvironment<ConfiguredTarget> env =
         ((ConfiguredTargetQueryHelper) helper).getPostAnalysisQueryEnvironment(targetPatternSet);
 
     ByteArrayOutputStream output = new ByteArrayOutputStream();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryHelper.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryHelper.java
index 9fe9d68..b1be089 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryHelper.java
@@ -14,10 +14,10 @@
 package com.google.devtools.build.lib.query2.cquery;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
 import com.google.devtools.build.lib.query2.testutil.AbstractQueryTest.QueryHelper;
 import com.google.devtools.build.lib.query2.testutil.PostAnalysisQueryHelper;
@@ -32,7 +32,7 @@
  * AnalysisTestCase} must be run manually. @BeforeClass and @AfterClass are completely ignored for
  * now.
  */
-public class ConfiguredTargetQueryHelper extends PostAnalysisQueryHelper<CqueryNode> {
+public class ConfiguredTargetQueryHelper extends PostAnalysisQueryHelper<ConfiguredTarget> {
   @Override
   protected ConfiguredTargetQueryEnvironment getPostAnalysisQueryEnvironment(
       WalkableGraph walkableGraph,
@@ -56,7 +56,7 @@
   }
 
   @Override
-  public String getLabel(CqueryNode target) {
+  public String getLabel(ConfiguredTarget target) {
     return target.getOriginalLabel().toString();
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQuerySemanticsTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQuerySemanticsTest.java
index 23c4d76..c81f3e5 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQuerySemanticsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQuerySemanticsTest.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.query2.cquery;
 
-import static com.google.common.collect.ImmutableList.toImmutableList;
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.devtools.build.lib.packages.Attribute.attr;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL;
@@ -24,6 +23,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.BuildOptionsView;
@@ -38,8 +38,6 @@
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.LabelPrinter;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
 import com.google.devtools.build.lib.query2.engine.QueryException;
 import com.google.devtools.build.lib.server.FailureDetails;
@@ -123,8 +121,9 @@
     setUpLabelsFunctionTests();
 
     // Test that this retrieves the correctly configured version(s) of the dep(s).
-    CqueryNode patchDep = Iterables.getOnlyElement(eval("labels('patch_dep', //test:my_rule)"));
-    CqueryNode myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
+    ConfiguredTarget patchDep =
+        Iterables.getOnlyElement(eval("labels('patch_dep', //test:my_rule)"));
+    ConfiguredTarget myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
     String targetConfiguration = myRule.getConfigurationChecksum();
     assertThat(patchDep.getConfigurationChecksum()).doesNotMatch(targetConfiguration);
   }
@@ -133,12 +132,12 @@
   public void testLabelsFunction_splitTransitionAttribute() throws Exception {
     setUpLabelsFunctionTests();
 
-    CqueryNode myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
+    ConfiguredTarget myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
     String targetConfiguration = myRule.getConfigurationChecksum();
 
-    Set<CqueryNode> splitDeps = eval("labels('split_dep', //test:my_rule)");
+    Set<ConfiguredTarget> splitDeps = eval("labels('split_dep', //test:my_rule)");
     assertThat(splitDeps).hasSize(2);
-    for (CqueryNode kct : splitDeps) {
+    for (ConfiguredTarget kct : splitDeps) {
       assertThat(kct.getConfigurationChecksum()).doesNotMatch(targetConfiguration);
     }
   }
@@ -147,13 +146,13 @@
   public void testLabelsFunction_labelListAttribute() throws Exception {
     setUpLabelsFunctionTests();
 
-    CqueryNode myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
+    ConfiguredTarget myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
     String targetConfiguration = myRule.getConfigurationChecksum();
 
     // Test that this works for label_lists as well.
-    Set<CqueryNode> deps = eval("labels('patch_dep_list', //test:my_rule)");
+    Set<ConfiguredTarget> deps = eval("labels('patch_dep_list', //test:my_rule)");
     assertThat(deps).hasSize(2);
-    for (CqueryNode kct : deps) {
+    for (ConfiguredTarget kct : deps) {
       assertThat(kct.getConfigurationChecksum()).doesNotMatch(targetConfiguration);
     }
   }
@@ -196,7 +195,7 @@
         "rule_with_dep(name = 'actual', dep = ':dep')",
         "rule_with_dep(name = 'dep')");
 
-    CqueryNode dep = Iterables.getOnlyElement(eval("labels('dep', '//test:alias')"));
+    ConfiguredTarget dep = Iterables.getOnlyElement(eval("labels('dep', '//test:alias')"));
     assertThat(dep.getLabel()).isEqualTo(Label.parseCanonicalUnchecked("//test:dep"));
   }
 
@@ -224,8 +223,8 @@
         "alias(name = 'other_impl_dep', actual = 'impl_dep')",
         "simple_rule(name='impl_dep')");
 
-    CqueryNode other = Iterables.getOnlyElement(eval("//test:other_my_rule"));
-    CqueryNode myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
+    ConfiguredTarget other = Iterables.getOnlyElement(eval("//test:other_my_rule"));
+    ConfiguredTarget myRule = Iterables.getOnlyElement(eval("//test:my_rule"));
     // Note: {@link ConfiguredTarget#getLabel} returns the label of the "actual" value not the
     // label of the alias, so we need to check the underlying label.
     assertThat(other.getLabel()).isEqualTo(myRule.getLabel());
@@ -250,7 +249,7 @@
 
     writeFile("test/BUILD", "rule_class_transition(name='rule_class')");
 
-    Set<CqueryNode> ruleClass = eval("//test:rule_class");
+    Set<ConfiguredTarget> ruleClass = eval("//test:rule_class");
     DummyTestOptions testOptions =
         getConfiguration(Iterables.getOnlyElement(ruleClass))
             .getOptions()
@@ -377,10 +376,10 @@
     // setting --universe_scope we ensure only the transitioned version exists.
     helper.setUniverseScope("//test:buildme");
     helper.setQuerySettings(Setting.ONLY_TARGET_DEPS, Setting.NO_IMPLICIT_DEPS);
-    Set<CqueryNode> result = eval("deps(//test:buildme, 1)");
+    Set<ConfiguredTarget> result = eval("deps(//test:buildme, 1)");
     assertThat(result).hasSize(2);
 
-    ImmutableList<CqueryNode> stableOrderList = ImmutableList.copyOf(result);
+    ImmutableList<ConfiguredTarget> stableOrderList = ImmutableList.copyOf(result);
     int myDepIndex = stableOrderList.get(0).getLabel().toString().equals("//test:mydep") ? 0 : 1;
     BuildConfigurationValue myDepConfig = getConfiguration(stableOrderList.get(myDepIndex));
     BuildConfigurationValue stringFlagConfig =
@@ -405,11 +404,11 @@
     createConfigRulesAndBuild();
     writeFile("mytest/BUILD", "simple_rule(name = 'mytarget')");
 
-    Set<CqueryNode> result = eval("//mytest:mytarget");
+    Set<ConfiguredTarget> result = eval("//mytest:mytarget");
     String configHash = getConfiguration(Iterables.getOnlyElement(result)).checksum();
     String hashPrefix = configHash.substring(0, configHash.length() / 2);
 
-    Set<CqueryNode> resultFromPrefix = eval("config(//mytest:mytarget," + hashPrefix + ")");
+    Set<ConfiguredTarget> resultFromPrefix = eval("config(//mytest:mytarget," + hashPrefix + ")");
     assertThat(resultFromPrefix).containsExactlyElementsIn(result);
   }
 
@@ -418,7 +417,7 @@
     createConfigRulesAndBuild();
     writeFile("mytest/BUILD", "simple_rule(name = 'mytarget')");
 
-    Set<CqueryNode> result = eval("//mytest:mytarget");
+    Set<ConfiguredTarget> result = eval("//mytest:mytarget");
     String configHash = getConfiguration(Iterables.getOnlyElement(result)).checksum();
     String rightPrefix = configHash.substring(0, configHash.length() / 2);
     char lastChar = rightPrefix.charAt(rightPrefix.length() - 1);
@@ -441,7 +440,7 @@
     EvalThrowsResult evalThrowsResult =
         evalThrows(
             "config(filter(\"??not-a-valid-regex\", //test:foo.java), null)",
-            /* unconditionallyThrows= */ true);
+            /*unconditionallyThrows=*/ true);
     assertThat(evalThrowsResult.getMessage())
         .startsWith("illegal 'filter' pattern regexp '??not-a-valid-regex'");
     assertThat(evalThrowsResult.getFailureDetail().hasQuery()).isTrue();
@@ -504,12 +503,12 @@
   public void testMultipleTopLevelConfigurations_nullConfigs() throws Exception {
     writeFile("test/BUILD", "java_library(name='my_java',", "  srcs = ['foo.java'],", ")");
 
-    Set<CqueryNode> result = eval("//test:my_java+//test:foo.java");
+    Set<ConfiguredTarget> result = eval("//test:my_java+//test:foo.java");
 
     assertThat(result).hasSize(2);
 
-    Iterator<CqueryNode> resultIterator = result.iterator();
-    CqueryNode first = resultIterator.next();
+    Iterator<ConfiguredTarget> resultIterator = result.iterator();
+    ConfiguredTarget first = resultIterator.next();
     if (first.getLabel().toString().equals("//test:foo.java")) {
       assertThat(getConfiguration(first)).isNull();
       assertThat(getConfiguration(resultIterator.next())).isNotNull();
@@ -539,7 +538,7 @@
     // cases cquery prefers the top-level configured one, which won't produce a match since that's
     // not the one down this dependency path.
     helper.setUniverseScope("//test:buildme");
-    Set<CqueryNode> result = eval("somepath(//test:buildme, //test:mydep)");
+    Set<ConfiguredTarget> result = eval("somepath(//test:buildme, //test:mydep)");
     assertThat(result.stream().map(kct -> kct.getLabel().toString()).collect(Collectors.toList()))
         .contains("//test:mydep");
   }
@@ -585,7 +584,8 @@
         "simple_rule(name='foo', deps = [':bar'])",
         "simple_rule(name='bar')");
 
-    Set<CqueryNode> result = eval("somepath(//test:top, filter(//test:bar, deps(//test:top)))");
+    Set<ConfiguredTarget> result =
+        eval("somepath(//test:top, filter(//test:bar, deps(//test:top)))");
     assertThat(result).isNotEmpty();
   }
 
@@ -604,7 +604,7 @@
         "simple_rule(name = 'simple')");
 
     helper.setUniverseScope("//test:transitioner,//test:simple");
-    Set<CqueryNode> result = eval("//test:simple");
+    Set<ConfiguredTarget> result = eval("//test:simple");
     assertThat(result.size()).isEqualTo(2);
   }
 
@@ -626,243 +626,7 @@
         "simple_rule(name = 'simple')");
 
     helper.setUniverseScope("//test:transitioner,//test:simple");
-    Set<CqueryNode> result = eval("config(//test:simple, target)");
+    Set<ConfiguredTarget> result = eval("config(//test:simple, target)");
     assertThat(result.size()).isEqualTo(1);
   }
-
-  @Test
-  public void testAspectDepsAppearInCqueryDeps() throws Exception {
-    writeFile(
-        "donut/test.bzl",
-        "TestAspectInfo = provider('TestAspectInfo', fields = ['info'])",
-        "def _test_aspect_impl(target, ctx):",
-        "    return [",
-        "        TestAspectInfo(",
-        "            info = depset([target.label]),",
-        "        ),",
-        "    ]",
-        "",
-        "_test_aspect = aspect(",
-        "    implementation = _test_aspect_impl,",
-        "    attr_aspects = ['deps'],",
-        "    attrs = {",
-        "        '_test_attr': attr.label(",
-        "            allow_files = True,",
-        "            default = Label('//donut:test_filegroup'),",
-        "        ),",
-        "    },",
-        "    provides = [TestAspectInfo],",
-        ")",
-        "def _test_impl(ctx):",
-        "    pass",
-        "test_rule = rule(",
-        "    _test_impl,",
-        "    attrs = {",
-        "        'deps': attr.label_list(",
-        "            aspects = [_test_aspect],",
-        "        ),",
-        "    },",
-        ")");
-    writeFile(
-        "donut/BUILD",
-        "load(':test.bzl', 'test_rule')",
-        "filegroup(",
-        "    name = 'test_filegroup',",
-        "    srcs = ['test.bzl'],",
-        ")",
-        "test_rule(",
-        "    name = 'test_rule_dep',",
-        ")",
-        "test_rule(",
-        "    name = 'test_rule',",
-        "    deps = [':test_rule_dep'],",
-        ")");
-
-    helper.setQuerySettings(Setting.INCLUDE_ASPECTS, Setting.EXPLICIT_ASPECTS);
-    var result =
-        eval("filter(//donut, deps(//donut:test_rule))").stream()
-            .map(cf -> cf.getDescription(LabelPrinter.legacy()))
-            .collect(ImmutableList.toImmutableList());
-    assertThat(result)
-        .containsExactly(
-            "//donut:test_rule",
-            "//donut:test_rule_dep",
-            "//donut:test.bzl%_test_aspect of //donut:test_rule_dep",
-            "//donut:test.bzl",
-            "//donut:test_filegroup");
-  }
-
-  // TODO: Disable this due to https://github.com/bazelbuild/bazel/pull/21567#issuecomment-1978992760
-  //       Re-enable once the problem is understood and fixed.
-  // @Test
-  // public void testAspectOnAspectDepsAppearInCqueryDeps() throws Exception {
-  //   writeFile(
-  //       "donut/test.bzl",
-  //       "TestAspectInfo = provider('TestAspectInfo', fields = ['info'])",
-  //       "TestAspectOnAspectInfo = provider('TestAspectOnAspectInfo', fields = ['info'])",
-  //       "def _test_aspect_impl(target, ctx):",
-  //       "    return [",
-  //       "        TestAspectInfo(",
-  //       "            info = depset([target.label]),",
-  //       "        ),",
-  //       "    ]",
-  //       "_test_aspect = aspect(",
-  //       "    implementation = _test_aspect_impl,",
-  //       "    attr_aspects = ['deps'],",
-  //       "    attrs = {",
-  //       "        '_test_attr': attr.label(",
-  //       "            allow_files = True,",
-  //       "            default = Label('//donut:test_aspect_filegroup'),",
-  //       "        ),",
-  //       "    },",
-  //       "    provides = [TestAspectInfo],",
-  //       ")",
-  //       "def _test_aspect_on_aspect_impl(target, ctx):",
-  //       "    return [",
-  //       "        TestAspectOnAspectInfo(",
-  //       "            info = depset(",
-  //       "                direct = [target.label],",
-  //       "                transitive = [target[TestAspectInfo].info],",
-  //       "            ),",
-  //       "        ),",
-  //       "    ]",
-  //       "_test_aspect_on_aspect = aspect(",
-  //       "    implementation = _test_aspect_on_aspect_impl,",
-  //       "    attr_aspects = ['deps'],",
-  //       "    attrs = {",
-  //       "        '_test_attr': attr.label(",
-  //       "            allow_files = True,",
-  //       "            default = Label('//donut:test_aspect_on_aspect_filegroup'),",
-  //       "        ),",
-  //       "    },",
-  //       "    required_aspect_providers = [TestAspectInfo],",
-  //       "    provides = [TestAspectOnAspectInfo],",
-  //       ")",
-  //       "def _test_impl(ctx):",
-  //       "    pass",
-  //       "test_rule = rule(",
-  //       "    _test_impl,",
-  //       "    attrs = {",
-  //       "        'deps': attr.label_list(",
-  //       "            aspects = [_test_aspect],",
-  //       "        ),",
-  //       "    },",
-  //       ")",
-  //       "def _test_aspect_on_aspect_rule_impl(ctx):",
-  //       "    pass",
-  //       "test_aspect_on_aspect_rule = rule(",
-  //       "    _test_aspect_on_aspect_rule_impl,",
-  //       "    attrs = {",
-  //       "        'deps': attr.label_list(",
-  //       "            aspects = [_test_aspect, _test_aspect_on_aspect],",
-  //       "        ),",
-  //       "    },",
-  //       ")");
-  //   writeFile("donut/test_aspect.file");
-  //   writeFile("donut/test_aspect_on_aspect.file");
-  //   writeFile(
-  //       "donut/BUILD",
-  //       "load(':test.bzl', 'test_rule', 'test_aspect_on_aspect_rule')",
-  //       "filegroup(",
-  //       "    name = 'test_aspect_filegroup',",
-  //       "    srcs = ['test_aspect.file'],",
-  //       ")",
-  //       "filegroup(",
-  //       "    name = 'test_aspect_on_aspect_filegroup',",
-  //       "    srcs = ['test_aspect_on_aspect.file'],",
-  //       ")",
-  //       "test_rule(",
-  //       "    name = 'test_rule_dep',",
-  //       ")",
-  //       "test_rule(",
-  //       "    name = 'test_rule',",
-  //       "    deps = [':test_rule_dep'],",
-  //       ")",
-  //       "test_aspect_on_aspect_rule(",
-  //       "    name = 'test_aspect_on_aspect_rule',",
-  //       "    deps = ['test_rule'],",
-  //       ")");
-
-  //   helper.setUniverseScope("//donut/...");
-  //   helper.setQuerySettings(Setting.INCLUDE_ASPECTS, Setting.EXPLICIT_ASPECTS);
-  //   var result =
-  //       eval("filter(//donut, deps(//donut:test_aspect_on_aspect_rule))").stream()
-  //           .map(cf -> cf.getDescription(LabelPrinter.legacy()))
-  //           .collect(toImmutableList());
-  //   assertThat(result)
-  //       .containsExactly(
-  //           "//donut:test.bzl%_test_aspect_on_aspect on top of"
-  //               + " [//donut:test.bzl%_test_aspect of //donut:test_rule_dep]",
-  //           "//donut:test.bzl%_test_aspect_on_aspect on top of"
-  //               + " [//donut:test.bzl%_test_aspect of //donut:test_rule]",
-  //           "//donut:test_rule_dep",
-  //           "//donut:test_rule",
-  //           "//donut:test.bzl%_test_aspect of //donut:test_rule_dep",
-  //           "//donut:test.bzl%_test_aspect of //donut:test_rule",
-  //           "//donut:test_aspect_on_aspect_rule",
-  //           "//donut:test_aspect.file",
-  //           "//donut:test_aspect_on_aspect_filegroup",
-  //           "//donut:test_aspect_on_aspect.file",
-  //           "//donut:test_aspect_filegroup");
-  // }
-
-  @Test
-  public void testAspectDepsAppearInCqueryRdeps() throws Exception {
-    writeFile(
-        "donut/test.bzl",
-        "TestAspectInfo = provider('TestAspectInfo', fields = ['info'])",
-        "def _test_aspect_impl(target, ctx):",
-        "    return [",
-        "        TestAspectInfo(",
-        "            info = depset([target.label]),",
-        "        ),",
-        "    ]",
-        "",
-        "_test_aspect = aspect(",
-        "    implementation = _test_aspect_impl,",
-        "    attr_aspects = ['deps'],",
-        "    attrs = {",
-        "        '_test_attr': attr.label(",
-        "            allow_files = True,",
-        "            default = Label('//donut:test_filegroup'),",
-        "        ),",
-        "    },",
-        "    provides = [TestAspectInfo],",
-        ")",
-        "def _test_impl(ctx):",
-        "    pass",
-        "test_rule = rule(",
-        "    _test_impl,",
-        "    attrs = {",
-        "        'deps': attr.label_list(",
-        "            aspects = [_test_aspect],",
-        "        ),",
-        "    },",
-        ")");
-    writeFile(
-        "donut/BUILD",
-        "load(':test.bzl', 'test_rule')",
-        "filegroup(",
-        "    name = 'test_filegroup',",
-        "    srcs = ['test.bzl'],",
-        ")",
-        "test_rule(",
-        "    name = 'test_rule_dep',",
-        ")",
-        "test_rule(",
-        "    name = 'test_rule',",
-        "    deps = [':test_rule_dep'],",
-        ")");
-
-    helper.setQuerySettings(Setting.INCLUDE_ASPECTS, Setting.EXPLICIT_ASPECTS);
-    var result =
-        eval("rdeps(//donut/..., //donut:test_filegroup)").stream()
-            .map(cf -> cf.getDescription(LabelPrinter.legacy()))
-            .collect(toImmutableList());
-    assertThat(result)
-        .containsExactly(
-            "//donut:test_filegroup",
-            "//donut:test_rule",
-            "//donut:test.bzl%_test_aspect of //donut:test_rule_dep");
-  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryTest.java
index ed8e1af..7517601 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryTest.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.BuildOptionsView;
@@ -25,7 +26,6 @@
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
 import com.google.devtools.build.lib.analysis.util.DummyTestFragment.DummyTestOptions;
 import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
 import com.google.devtools.build.lib.query2.testutil.PostAnalysisQueryTest;
 import java.util.HashMap;
@@ -38,10 +38,10 @@
 
 /** Tests for {@link ConfiguredTargetQueryEnvironment}. */
 @RunWith(JUnit4.class)
-public abstract class ConfiguredTargetQueryTest extends PostAnalysisQueryTest<CqueryNode> {
+public abstract class ConfiguredTargetQueryTest extends PostAnalysisQueryTest<ConfiguredTarget> {
 
   @Override
-  protected QueryHelper<CqueryNode> createQueryHelper() {
+  protected QueryHelper<ConfiguredTarget> createQueryHelper() {
     return new ConfiguredTargetQueryHelper();
   }
 
@@ -57,7 +57,7 @@
   }
 
   @Override
-  protected final BuildConfigurationValue getConfiguration(CqueryNode kct) {
+  protected final BuildConfigurationValue getConfiguration(ConfiguredTarget kct) {
     return getHelper()
         .getSkyframeExecutor()
         .getConfiguration(getHelper().getReporter(), kct.getConfigurationKey());
@@ -93,12 +93,12 @@
   public void testMultipleTopLevelConfigurations_nullConfigs() throws Exception {
     writeFile("test/BUILD", "java_library(name='my_java',", "  srcs = ['foo.java'],", ")");
 
-    Set<CqueryNode> result = eval("//test:my_java+//test:foo.java");
+    Set<ConfiguredTarget> result = eval("//test:my_java+//test:foo.java");
 
     assertThat(result).hasSize(2);
 
-    Iterator<CqueryNode> resultIterator = result.iterator();
-    CqueryNode first = resultIterator.next();
+    Iterator<ConfiguredTarget> resultIterator = result.iterator();
+    ConfiguredTarget first = resultIterator.next();
     if (first.getLabel().toString().equals("//test:foo.java")) {
       assertThat(getConfiguration(first)).isNull();
       assertThat(getConfiguration(resultIterator.next())).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallbackTest.java
index a2b0a92..89c17b6 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallbackTest.java
@@ -18,13 +18,13 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.OutputGroupInfo;
 import com.google.devtools.build.lib.analysis.OutputGroupInfo.ValidationMode;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryExpression;
 import com.google.devtools.build.lib.query2.engine.QueryParser;
 import java.io.ByteArrayOutputStream;
@@ -112,7 +112,7 @@
     QueryExpression expression = QueryParser.parse(queryExpression, getDefaultFunctions());
     Set<String> targetPatternSet = new LinkedHashSet<>();
     expression.collectTargetPatterns(targetPatternSet);
-    PostAnalysisQueryEnvironment<CqueryNode> env =
+    PostAnalysisQueryEnvironment<ConfiguredTarget> env =
         ((ConfiguredTargetQueryHelper) helper).getPostAnalysisQueryEnvironment(targetPatternSet);
 
     ByteArrayOutputStream output = new ByteArrayOutputStream();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallbackTest.java
index 8c1ebc9..d6b2c38 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/GraphOutputFormatterCallbackTest.java
@@ -17,11 +17,11 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
 import com.google.devtools.build.lib.query2.engine.QueryExpression;
 import com.google.devtools.build.lib.query2.engine.QueryParser;
@@ -71,7 +71,7 @@
     Set<String> targetPatternSet = new LinkedHashSet<>();
     expression.collectTargetPatterns(targetPatternSet);
     helper.setQuerySettings(Setting.NO_IMPLICIT_DEPS);
-    PostAnalysisQueryEnvironment<CqueryNode> env =
+    PostAnalysisQueryEnvironment<ConfiguredTarget> env =
         ((ConfiguredTargetQueryHelper) helper).getPostAnalysisQueryEnvironment(targetPatternSet);
 
     ByteArrayOutputStream output = new ByteArrayOutputStream();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
index 9fe3f5b..4d68513 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
@@ -25,6 +25,7 @@
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2;
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.Configuration;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
 import com.google.devtools.build.lib.analysis.util.MockRule;
 import com.google.devtools.build.lib.events.Event;
@@ -33,7 +34,6 @@
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.CqueryOptions.Transitions;
 import com.google.devtools.build.lib.query2.cquery.ProtoOutputFormatterCallback.OutputType;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
@@ -189,9 +189,9 @@
 
     AnalysisProtosV2.ConfiguredTarget parentRuleProto =
         getRuleProtoByName(resultsList, "//test:parent_rule");
-    Set<CqueryNode> keyedTargets = eval("deps(//test:parent_rule)");
+    Set<ConfiguredTarget> keyedTargets = eval("deps(//test:parent_rule)");
 
-    CqueryNode parentRule = getKeyedTargetByLabel(keyedTargets, "//test:parent_rule");
+    ConfiguredTarget parentRule = getKeyedTargetByLabel(keyedTargets, "//test:parent_rule");
     assertThat(parentRuleProto.getConfiguration().getChecksum())
         .isEqualTo(parentRule.getConfigurationChecksum());
 
@@ -211,7 +211,7 @@
 
     AnalysisProtosV2.ConfiguredTarget transitionRuleProto =
         getRuleProtoByName(resultsList, "//test:transition_rule");
-    CqueryNode transitionRule = getKeyedTargetByLabel(keyedTargets, "//test:transition_rule");
+    ConfiguredTarget transitionRule = getKeyedTargetByLabel(keyedTargets, "//test:transition_rule");
     assertThat(transitionRuleProto.getConfiguration().getChecksum())
         .isEqualTo(transitionRule.getConfigurationChecksum());
 
@@ -227,7 +227,7 @@
     assertThat(depRuleConfiguration.getMnemonic()).matches("k8-opt-exec-.*");
     assertThat(depRuleConfiguration.getIsTool()).isTrue();
 
-    CqueryNode depRule = getKeyedTargetByLabel(keyedTargets, "//test:dep");
+    ConfiguredTarget depRule = getKeyedTargetByLabel(keyedTargets, "//test:dep");
 
     assertThat(depRuleProto.getConfiguration().getChecksum())
         .isEqualTo(depRule.getConfigurationChecksum());
@@ -263,7 +263,7 @@
         .containsExactly(patchedConfiguredRuleInput, depConfiguredRuleInput);
   }
 
-  private CqueryNode getKeyedTargetByLabel(Set<CqueryNode> keyedTargets, String label) {
+  private ConfiguredTarget getKeyedTargetByLabel(Set<ConfiguredTarget> keyedTargets, String label) {
     return Iterables.getOnlyElement(
         keyedTargets.stream()
             .filter(t -> label.equals(t.getLabel().getCanonicalForm()))
@@ -486,7 +486,7 @@
     Set<String> targetPatternSet = new LinkedHashSet<>();
     expression.collectTargetPatterns(targetPatternSet);
     helper.setQuerySettings(Setting.NO_IMPLICIT_DEPS);
-    PostAnalysisQueryEnvironment<CqueryNode> env =
+    PostAnalysisQueryEnvironment<ConfiguredTarget> env =
         ((ConfiguredTargetQueryHelper) helper).getPostAnalysisQueryEnvironment(targetPatternSet);
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     ProtoOutputFormatterCallback callback =
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterTest.java
index 1f2982f..6876b35 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterTest.java
@@ -20,6 +20,7 @@
 
 import com.google.common.eventbus.EventBus;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.TransitionFactories;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
@@ -29,7 +30,6 @@
 import com.google.devtools.build.lib.packages.LabelPrinter;
 import com.google.devtools.build.lib.packages.RuleTransitionData;
 import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
-import com.google.devtools.build.lib.query2.common.CqueryNode;
 import com.google.devtools.build.lib.query2.cquery.CqueryOptions.Transitions;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
 import com.google.devtools.build.lib.query2.engine.QueryExpression;
@@ -235,7 +235,7 @@
     Set<String> targetPatternSet = new LinkedHashSet<>();
     expression.collectTargetPatterns(targetPatternSet);
     helper.setQuerySettings(Setting.NO_IMPLICIT_DEPS);
-    PostAnalysisQueryEnvironment<CqueryNode> env =
+    PostAnalysisQueryEnvironment<ConfiguredTarget> env =
         ((ConfiguredTargetQueryHelper) helper).getPostAnalysisQueryEnvironment(targetPatternSet);
     options.transitions = verbosity;
     // TODO(blaze-configurability): Test late-bound attributes.
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index 0436d73..3c21607 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -269,7 +269,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:workspace_name_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/config",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant-annotation",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index fdfb97f..bfde8fe 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -116,7 +116,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.testutil.TestUtils;
@@ -1233,7 +1232,7 @@
   /** Dummy action that creates a tree output. */
   // AutoCodec because the superclass has a WrappedRunnable inside it.
   @AutoCodec
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   static class TreeArtifactAction extends TestAction {
     @SuppressWarnings("unused") // Only needed for serialization.
     private final SpecialArtifact output;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
index 16b86a0..6cd5859 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -400,7 +400,6 @@
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java
index 425a71c..ff5009c 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java
@@ -23,6 +23,7 @@
 import com.google.common.collect.ImmutableSortedMap;
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException.NoCodecException;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
 import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester.VerificationFunction;
diff --git a/src/test/java/com/google/devtools/build/skyframe/BUILD b/src/test/java/com/google/devtools/build/skyframe/BUILD
index 925e544..c62eb1c 100644
--- a/src/test/java/com/google/devtools/build/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/skyframe/BUILD
@@ -35,7 +35,6 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/events",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/skyframe",
diff --git a/src/test/java/com/google/devtools/build/skyframe/GraphTester.java b/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
index d8954c3..6b90abd 100644
--- a/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
+++ b/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
@@ -19,14 +19,14 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Interner;
 import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;
-import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
-import com.google.devtools.build.skyframe.SkyKey.SkyKeyInterner;
 import com.google.devtools.build.skyframe.SkyframeLookupResult.QueryDepCallback;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import java.util.HashMap;
@@ -509,16 +509,16 @@
         StringValue.of(String.format(format, StringValue.from(deps.get(key)).getValue()));
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class Key extends AbstractSkyKey<String> {
-    private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
+    private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
 
     private Key(String arg) {
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static Key create(String arg) {
       return interner.intern(new Key(arg));
@@ -528,23 +528,18 @@
     public SkyFunctionName functionName() {
       return SkyFunctionName.FOR_TESTING;
     }
-
-    @Override
-    public SkyKeyInterner<Key> getSkyKeyInterner() {
-      return interner;
-    }
   }
 
-  @VisibleForSerialization
+  @AutoCodec.VisibleForSerialization
   @AutoCodec
   static class NonHermeticKey extends AbstractSkyKey<String> {
-    private static final SkyKeyInterner<NonHermeticKey> interner = SkyKey.newInterner();
+    private static final Interner<NonHermeticKey> interner = BlazeInterners.newWeakInterner();
 
     private NonHermeticKey(String arg) {
       super(arg);
     }
 
-    @VisibleForSerialization
+    @AutoCodec.VisibleForSerialization
     @AutoCodec.Instantiator
     static NonHermeticKey create(String arg) {
       return interner.intern(new NonHermeticKey(arg));
@@ -554,11 +549,6 @@
     public SkyFunctionName functionName() {
       return FOR_TESTING_NONHERMETIC;
     }
-
-    @Override
-    public SkyKeyInterner<NonHermeticKey> getSkyKeyInterner() {
-      return interner;
-    }
   }
 
   private static final SkyFunctionName FOR_TESTING_NONHERMETIC =
diff --git a/src/test/py/bazel/BUILD b/src/test/py/bazel/BUILD
index 40c9228..ea335ac 100644
--- a/src/test/py/bazel/BUILD
+++ b/src/test/py/bazel/BUILD
@@ -305,10 +305,6 @@
     size = "medium",
     srcs = ["bzlmod/bazel_fetch_test.py"],
     data = ["//tools/build_defs/repo:http_src"],
-    shard_count = 5,
-    tags = [
-        "requires-network",
-    ],
     deps = [
         ":bzlmod_test_utils",
         ":test_base",
diff --git a/src/test/py/bazel/bzlmod/bazel_fetch_test.py b/src/test/py/bazel/bzlmod/bazel_fetch_test.py
index cec2f7d..072caed 100644
--- a/src/test/py/bazel/bzlmod/bazel_fetch_test.py
+++ b/src/test/py/bazel/bzlmod/bazel_fetch_test.py
@@ -37,7 +37,6 @@
             'common --noenable_workspace',
             'common --experimental_isolated_extension_usages',
             'common --registry=' + self.main_registry.getURL(),
-            'common --registry=https://bcr.bazel.build',
             'common --verbose_failures',
             # Set an explicit Java language version
             'common --java_language_version=8',
@@ -262,43 +261,6 @@
     _, _, stderr = self.RunBazel(['fetch', '--repo=@hello', '--force'])
     self.assertIn('No more Orange Juice!', ''.join(stderr))
 
-  def testFetchTarget(self):
-    self.main_registry.createCcModule('aaa', '1.0').createCcModule(
-        'bbb', '1.0', {'aaa': '1.0'}
-    )
-    self.ScratchFile(
-        'MODULE.bazel',
-        [
-            'bazel_dep(name = "bbb", version = "1.0")',
-        ],
-    )
-    self.ScratchFile(
-        'BUILD',
-        [
-            'cc_binary(',
-            '  name = "main",',
-            '  srcs = ["main.cc"],',
-            '  deps = [',
-            '    "@bbb//:lib_bbb",',
-            '  ],',
-            ')',
-        ],
-    )
-    self.ScratchFile(
-        'main.cc',
-        [
-            '#include "aaa.h"',
-            'int main() {',
-            '    hello_aaa("Hello there!");',
-            '}',
-        ],
-    )
-    self.RunBazel(['fetch', '//:main'])
-    # If we can run the target with --nofetch, this means we successfully
-    # fetched all its needed repos
-    _, stdout, _ = self.RunBazel(['run', '//:main', '--nofetch'])
-    self.assertIn('Hello there! => aaa@1.0', stdout)
-
 
 if __name__ == '__main__':
   absltest.main()
diff --git a/src/test/py/bazel/bzlmod/external_repo_completion_test.py b/src/test/py/bazel/bzlmod/external_repo_completion_test.py
index 95bceed..ac5f699 100644
--- a/src/test/py/bazel/bzlmod/external_repo_completion_test.py
+++ b/src/test/py/bazel/bzlmod/external_repo_completion_test.py
@@ -139,7 +139,7 @@
     self.main_registry.createLocalPathModule('ext', '1.0', 'ext')
     scratchFile(
         self.projects_dir.joinpath('ext', 'BUILD'),
-        ['cc_library(name="lib_ext", visibility = ["//visibility:public"])'],
+        ['cc_library(name="lib_ext")'],
     )
     scratchFile(
         self.projects_dir.joinpath('ext', 'tools', 'BUILD'),
@@ -153,7 +153,7 @@
     self.main_registry.createLocalPathModule('ext2', '1.0', 'ext2')
     scratchFile(
         self.projects_dir.joinpath('ext2', 'BUILD'),
-        ['cc_library(name="lib_ext2", visibility = ["//visibility:public"])'],
+        ['cc_library(name="lib_ext2")'],
     )
     scratchFile(self.projects_dir.joinpath('ext2', 'ext.bzl'), ext_src)