diff --git a/docs/detectors/README.md b/docs/detectors/README.md
index 3f9706eee..09828f3bd 100644
--- a/docs/detectors/README.md
+++ b/docs/detectors/README.md
@@ -137,7 +137,7 @@
| Detector | Status |
| ----------------------- | ------------ |
-| UvLockComponentDetector | Experimental |
+| UvLockComponentDetector | Stable |
- [Vcpkg](vcpkg.md)
diff --git a/docs/detectors/uv.md b/docs/detectors/uv.md
index 88c46c3f3..785086f93 100644
--- a/docs/detectors/uv.md
+++ b/docs/detectors/uv.md
@@ -6,7 +6,7 @@
## Detection strategy
-uv detection is performed by parsing a uv.lock found under the scan directory.
+uv detection is performed by parsing a _uv.lock_ found under the scan directory.
Full dependency graph generation is supported.
diff --git a/src/Microsoft.ComponentDetection.Detectors/uv/UvLockComponentDetector.cs b/src/Microsoft.ComponentDetection.Detectors/uv/UvLockComponentDetector.cs
index bea90afd0..5d9b7462a 100644
--- a/src/Microsoft.ComponentDetection.Detectors/uv/UvLockComponentDetector.cs
+++ b/src/Microsoft.ComponentDetection.Detectors/uv/UvLockComponentDetector.cs
@@ -11,7 +11,7 @@ namespace Microsoft.ComponentDetection.Detectors.Uv;
using Microsoft.ComponentDetection.Detectors.Pip;
using Microsoft.Extensions.Logging;
-public class UvLockComponentDetector : FileComponentDetector, IExperimentalDetector
+public class UvLockComponentDetector : FileComponentDetector
{
public UvLockComponentDetector(
IComponentStreamEnumerableFactory componentStreamEnumerableFactory,
diff --git a/src/Microsoft.ComponentDetection.Orchestrator/Experiments/Configs/UvLockDetectorExperiment.cs b/src/Microsoft.ComponentDetection.Orchestrator/Experiments/Configs/UvLockDetectorExperiment.cs
deleted file mode 100644
index c5053e4d8..000000000
--- a/src/Microsoft.ComponentDetection.Orchestrator/Experiments/Configs/UvLockDetectorExperiment.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-namespace Microsoft.ComponentDetection.Orchestrator.Experiments.Configs;
-
-using Microsoft.ComponentDetection.Contracts;
-using Microsoft.ComponentDetection.Detectors.Pip;
-using Microsoft.ComponentDetection.Detectors.Uv;
-
-///
-/// Experiment to validate UvLockComponentDetector against PipComponentDetector.
-///
-public class UvLockDetectorExperiment : IExperimentConfiguration
-{
- ///
- public string Name => "UvLockDetectorExperiment";
-
- ///
- public bool IsInControlGroup(IComponentDetector componentDetector) => componentDetector is PipReportComponentDetector;
-
- ///
- public bool IsInExperimentGroup(IComponentDetector componentDetector) => componentDetector is UvLockComponentDetector;
-
- ///
- public bool ShouldRecord(IComponentDetector componentDetector, int numComponents) => true;
-}
diff --git a/src/Microsoft.ComponentDetection.Orchestrator/Extensions/ServiceCollectionExtensions.cs b/src/Microsoft.ComponentDetection.Orchestrator/Extensions/ServiceCollectionExtensions.cs
index 95df7a041..95fe15b13 100644
--- a/src/Microsoft.ComponentDetection.Orchestrator/Extensions/ServiceCollectionExtensions.cs
+++ b/src/Microsoft.ComponentDetection.Orchestrator/Extensions/ServiceCollectionExtensions.cs
@@ -73,7 +73,6 @@ public static IServiceCollection AddComponentDetection(this IServiceCollection s
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
- services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
diff --git a/test/Microsoft.ComponentDetection.Detectors.Tests/ComponentDetectorTests.cs b/test/Microsoft.ComponentDetection.Detectors.Tests/ComponentDetectorTests.cs
index a85fdfd59..abba423dd 100644
--- a/test/Microsoft.ComponentDetection.Detectors.Tests/ComponentDetectorTests.cs
+++ b/test/Microsoft.ComponentDetection.Detectors.Tests/ComponentDetectorTests.cs
@@ -65,12 +65,12 @@ public void AllDetectorsHaveUniqueSupportedComponentTypes()
}
[TestMethod]
- public void UvLockComponentDetector_ImplementsIExperimentalDetector()
+ public void UvLockComponentDetector_DoesNotImplementIExperimentalDetector()
{
var uvLockDetector = this.detectors.SingleOrDefault(d => d.Id == "UvLock");
uvLockDetector.Should().NotBeNull("because UvLockComponentDetector should be registered");
- uvLockDetector.Should().BeAssignableTo("because UvLockComponentDetector should implement IExperimentalDetector");
+ uvLockDetector.Should().NotBeAssignableTo("because UvLockComponentDetector should not implement IExperimentalDetector");
}
[TestMethod]
diff --git a/test/Microsoft.ComponentDetection.Orchestrator.Tests/Experiments/UvLockDetectorExperimentTests.cs b/test/Microsoft.ComponentDetection.Orchestrator.Tests/Experiments/UvLockDetectorExperimentTests.cs
deleted file mode 100644
index ea1b77bcb..000000000
--- a/test/Microsoft.ComponentDetection.Orchestrator.Tests/Experiments/UvLockDetectorExperimentTests.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-#nullable disable
-namespace Microsoft.ComponentDetection.Orchestrator.Tests.Experiments;
-
-using AwesomeAssertions;
-using Microsoft.ComponentDetection.Detectors.Pip;
-using Microsoft.ComponentDetection.Detectors.Uv;
-using Microsoft.ComponentDetection.Orchestrator.Experiments.Configs;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-[TestClass]
-public class UvLockDetectorExperimentTests
-{
- private readonly UvLockDetectorExperiment experiment = new();
-
- [TestMethod]
- public void IsInControlGroup_ReturnsTrue_ForPipReportComponentDetector()
- {
- var pipReportDetector = new PipReportComponentDetector(null, null, null, null, null, null, null, null, null);
- this.experiment.IsInControlGroup(pipReportDetector).Should().BeTrue();
- }
-
- [TestMethod]
- public void IsInControlGroup_ReturnsFalse_ForPipComponentDetector()
- {
- var pipDetector = new PipComponentDetector(null, null, null, null, null);
- this.experiment.IsInControlGroup(pipDetector).Should().BeFalse();
- }
-
- [TestMethod]
- public void IsInExperimentGroup_ReturnsTrue_ForUvLockComponentDetector()
- {
- var uvLockDetector = new UvLockComponentDetector(null, null, null);
- this.experiment.IsInExperimentGroup(uvLockDetector).Should().BeTrue();
- }
-
- [TestMethod]
- public void ShouldRecord_AlwaysReturnsTrue()
- {
- var pipDetector = new PipComponentDetector(null, null, null, null, null);
- this.experiment.ShouldRecord(pipDetector, 0).Should().BeTrue();
- }
-}