diff --git a/build.ps1 b/build.ps1
index 0416df15b..3ea0b34c1 100644
--- a/build.ps1
+++ b/build.ps1
@@ -22,7 +22,6 @@ $DotNetChannel = "STS"
 $env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
 $env:DOTNET_NOLOGO = 1
 $env:DOTNET_ROLL_FORWARD = "Major"
-$env:FALLOUT_TELEMETRY_OPTOUT = 1
 
 ###########################################################################
 # EXECUTION
diff --git a/build.sh b/build.sh
index 0008be753..bd0eb8400 100755
--- a/build.sh
+++ b/build.sh
@@ -18,7 +18,6 @@ DOTNET_CHANNEL="STS"
 export DOTNET_CLI_TELEMETRY_OPTOUT=1
 export DOTNET_NOLOGO=1
 export DOTNET_ROLL_FORWARD="Major"
-export FALLOUT_TELEMETRY_OPTOUT=1
 
 ###########################################################################
 # EXECUTION
diff --git a/build/Build.cs b/build/Build.cs
index fdf7dae5b..7292dff7b 100644
--- a/build/Build.cs
+++ b/build/Build.cs
@@ -103,9 +103,6 @@ from framework in project.GetTargetFrameworks()
     [Parameter]
     public int TestDegreeOfParallelism { get; } = 1;
 
-    Configure<DotNetTestSettings> ITest.TestSettings => _ => _
-        .SetProcessEnvironmentVariable("FALLOUT_TELEMETRY_OPTOUT", bool.TrueString);
-
     Target ITest.Test => _ => _
         .Inherit<ITest>()
         .Partition(2);
diff --git a/build/_build.csproj b/build/_build.csproj
index e9748ca41..0b0a10b64 100644
--- a/build/_build.csproj
+++ b/build/_build.csproj
@@ -9,7 +9,6 @@
     <RootNamespace></RootNamespace>
     <NoWarn>CS0649;CS0169</NoWarn>
     <FalloutRootDirectory>.\..</FalloutRootDirectory>
-    <FalloutTelemetryVersion>1</FalloutTelemetryVersion>
     <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
     <IsPackable>false</IsPackable>
   </PropertyGroup>
diff --git a/docs/01-getting-started/07-telemetry.md b/docs/01-getting-started/07-telemetry.md
deleted file mode 100644
index 8fa6b2ac1..000000000
--- a/docs/01-getting-started/07-telemetry.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: Telemetry
----
-
-:::warning
-**Telemetry is currently a no-op in Fallout.** The previous NUKE telemetry endpoint (Azure Application Insights, owned by the original maintainer) is no longer used. The plumbing on this page describes the framework hooks that *would* fire if a Fallout-controlled endpoint were configured. Today, none is — telemetry short-circuits in the static constructor when no `InstrumentationKey` is set.
-:::
-
-As an effort to improve Fallout and to provide you with a better, more tailored experience, we include a telemetry feature that collects anonymous usage data and enables us to make more informed decisions for the future.
-
-We want you to be fully aware about telemetry, which is why the global tool will show a disclosure notice on first start. In addition, every build project requires to define a `NukeTelemetryVersion` property:
-
-```xml title="_build.csproj"
-<PropertyGroup>
-  <NukeTelemetryVersion>1</NukeTelemetryVersion>
-</PropertyGroup>
-```
-
-We will increase the telemetry version whenever we add or change significant data points. With every version change and  after updating the `Nuke.Common` package, you will be prompted again for confirmation.
-
-## Disclosure
-
-Fallout will display a prompt similar to the following when executing a build project without the `NukeTelemetryVersion` property being set or when executing the global tool for the first time — *once a telemetry endpoint is configured*.
-
-```text
-Telemetry v1
-------------
-Fallout collects anonymous usage data in order to help us improve your experience.
-Read more about scope, data points, and opt-out: https://github.com/Fallout-build/Fallout#telemetry
-```
-
-Once you confirm the notice, Fallout will either:
-
-- Create an awareness cookie under `~/.fallout/telemetry-awareness/v1` for the respective global tool, or
-- Add the `NukeTelemetryVersion` property to the project file.
-
-## Scope
-
-As a global tool and library, Fallout has [multiple events](https://github.com/Fallout-build/Fallout/blob/main/src/Nuke.Build/Telemetry/Telemetry.Events.cs) where telemetry is collected:
-
-- `BuildStarted` – when a build was started
-- `TargetSucceeded` – when a target succeeded (only `Restore`, `Compile`, `Test`)
-- `BuildSetup` – when setting up a build via `fallout [:setup]`
-- `CakeConvert` – when converting Cake files via `fallout :cake-convert`
-
-:::info
-Data for `BuildStarted` and `TargetSucceeded` is only collected when `IsServerBuild` returns `true` (i.e., CI build), or the build is invoked via global tool. I.e., a contributor executing `build.ps1` or `build.sh` will not have telemetry enabled unknowingly. Likewise, when a build project targets a higher telemetry version than the installed global tool, the lower version will be used.
-:::
-
-## Data Points
-
-The [telemetry data points](https://github.com/Fallout-build/Fallout/blob/main/src/Nuke.Build/Telemetry/Telemetry.Properties.cs) do not collect personal data, such as usernames or email addresses. If we wire up an endpoint, the data will be sent securely to whichever back-end Fallout's maintainers configure — documented here when that happens.
-
-Protecting your privacy is important to us. If you suspect the telemetry plumbing has been re-enabled incorrectly or could collect sensitive data, file an issue on the [Fallout repository](https://github.com/Fallout-build/Fallout/issues).
-
-The telemetry feature collects the following data:
-
-| Version | Data                                                                                      |
-|:--------|:------------------------------------------------------------------------------------------|
-| All	    | Timestamp of invocation                                                                   |
-| All	    | Operating system                                                                          |
-| All	    | Version of .NET SDK                                                                       |
-| All	    | Repository provider (GitHub, GitLab, Bitbucket, etc.)                                     |
-| All	    | Repository Branch (`main`, `develop`, `feature`, `hotfix`, custom)                        |
-| All	    | Hashed Repository URL (SHA256; first 6 characters)                                        |
-| All	    | Hashed Commit Sha (SHA256; first 6 characters)                                            |
-| All	    | Compile time of build project in seconds                                                  |
-| All	    | Target framework                                                                          |
-| All	    | Version of `Nuke.Common` and `Nuke.GlobalTool`                                            |
-| All	    | Host implementation (only non-custom)                                                     |
-| All	    | Build type (project/global tool)                                                          |
-| All	    | Number of executable targets                                                              |
-| All	    | Number of custom extensions                                                               |
-| All	    | Number of custom components                                                               |
-| All	    | Used configuration generators and build components (only non-custom)                      |
-| All	    | Target execution time in seconds (only for targets named _Restore_, _Compile_, or _Test_) |
-
-:::note
-Whenever a type does not originate from the `Nuke` namespace, it is replaced with `<External>`.
-:::
-
-## How to opt out
-
-The telemetry feature is enabled by default. To opt out, set the `FALLOUT_TELEMETRY_OPTOUT` environment variable to `1` or `true`. The legacy `NUKE_TELEMETRY_OPTOUT` name is still honoured during the 10.x line for backwards compatibility, but will be removed in 11.0.
diff --git a/docs/02-fundamentals/04-builds.md b/docs/02-fundamentals/04-builds.md
index 8eb8bf70a..f6b89d04c 100644
--- a/docs/02-fundamentals/04-builds.md
+++ b/docs/02-fundamentals/04-builds.md
@@ -116,7 +116,7 @@ You can examine the status of targets by using any of the appropriate `ICollecti
 
 ## Build Events
 
-For implementing cross-cutting concerns, like telemetry and similar, you can hook into various build events:
+For implementing cross-cutting concerns, like logging or notifications, you can hook into various build events:
 
 ```csharp title="FalloutBuild.cs"
 abstract class FalloutBuild
diff --git a/docs/adr/0010-no-telemetry-collection.md b/docs/adr/0010-no-telemetry-collection.md
new file mode 100644
index 000000000..492efc05b
--- /dev/null
+++ b/docs/adr/0010-no-telemetry-collection.md
@@ -0,0 +1,40 @@
+# ADR-0010: Fallout collects no telemetry
+
+## Status
+
+Accepted (2026-07-24). Subsumes [#79](https://github.com/Fallout-build/Fallout/issues/79) (drop the dead `Microsoft.ApplicationInsights` dependency).
+
+## Context
+
+NUKE shipped a telemetry subsystem: a `[Telemetry]` build extension plus global-tool hooks that gathered anonymous usage data (OS/SDK versions, build shape, hashed repo fingerprints) and sent it to an **Azure Application Insights** instance owned personally by the original maintainer, behind a first-run consent flow and a `NUKE_TELEMETRY_OPTOUT` opt-out.
+
+Fallout inherited it, but it has been inert since the fork: the instrumentation key can't be reused, so the client dependency was dropped ([#79](https://github.com/Fallout-build/Fallout/issues/79)) and `TrackEvent` became a stub; the static constructor short-circuits before the consent flow runs. Nothing is collected or transmitted.
+
+The scaffolding was kept on the stated intent of wiring up a "Fallout-controlled backend later" — an intent that never acquired an owner, endpoint, or plan. Meanwhile it assembled usage properties on the hot build path, carried a re-enable comment, and kept consumer-facing knobs alive for a no-op.
+
+## Decision
+
+**Fallout collects no telemetry, and the inherited subsystem is removed in full rather than left dormant.**
+
+1. Nothing phones home. For a hard-fork rebuilding trust, "we collect nothing" is a stronger promise than "anonymized data you can opt out of".
+2. With nothing to opt out of, there is no opt-out: the `*_TELEMETRY_OPTOUT` env vars and the `*TelemetryVersion` MSBuild property go too, along with the code that read them.
+3. Dormant scaffolding is not kept "just in case". Any future usage insight is a fresh decision needing its own ADR and an **opt-in** design with a named endpoint and owner — not a revival of this code.
+4. `fallout migrate` **strips** NUKE's telemetry knobs instead of renaming them to dead `Fallout*` equivalents.
+
+## Consequences
+
+- **Positive** — zero data collection and no re-enable path; dead code, a dead dependency, a consent UX, and several consumer knobs removed; migrated NUKE projects come out clean.
+- **Negative** — no aggregate usage insight. Accepted: it was never flowing anyway. Adding metrics later means starting from a clean opt-in design; that friction is the point.
+- **Not a breaking change** — the env var and MSBuild property only ever gated a no-op, and an unset/unknown one is silently ignored. The `FALLOUT001` legacy-property warning simply stops firing for `NukeTelemetryVersion`.
+- **Unaffected** — `DOTNET_CLI_TELEMETRY_OPTOUT` (the .NET SDK's own telemetry) is still set in bootstrap scripts and generated CI.
+
+## Alternatives considered
+
+- **Keep the scaffolding dormant, wire up a Fallout endpoint later** (the prior stance) — rejected: the "later" had no owner or timeline, and consent machinery for a no-op is a liability, not option value.
+- **Ship opt-in telemetry now** — rejected: no compelling need for a build framework, out of scope for the foundation work. Not foreclosed; it would need an ADR superseding this one.
+- **Local-only stats, never transmitted** — rejected as scope creep; consumers can build it on the public build-event hooks.
+
+## References
+
+- [#79](https://github.com/Fallout-build/Fallout/issues/79) — dead `Microsoft.ApplicationInsights` dependency, subsumed here.
+- [docs/migration/from-nuke.md](../migration/from-nuke.md) — telemetry knobs are stripped on migration.
diff --git a/docs/adr/README.md b/docs/adr/README.md
index a932561f3..811242dec 100644
--- a/docs/adr/README.md
+++ b/docs/adr/README.md
@@ -40,3 +40,4 @@ If you change a decision, do NOT silently rewrite the old ADR — add a new one
 | [0004](0004-calendar-versioning-and-dual-pace-channels.md) | Calendar versioning + dual-pace channels (edge/stable) + experimental APIs | Accepted (§3 amended by 0007; channel ladder §2 superseded by 0008) |
 | [0007](0007-cut-release-branch-on-demand.md) | Cut `release/YYYY` on demand, not preemptively | Accepted |
 | [0008](0008-collapse-experimental-into-main.md) | Collapse `experimental` into `main`; `main` is the sole prerelease lane | Accepted |
+| [0010](0010-no-telemetry-collection.md) | Fallout collects no telemetry | Accepted |
diff --git a/docs/agents/conventions.md b/docs/agents/conventions.md
index 091f23fc8..a566fd51d 100644
--- a/docs/agents/conventions.md
+++ b/docs/agents/conventions.md
@@ -10,7 +10,6 @@ Three groups: conventions to respect, things never to do, and the tool-wrapper r
 - **Tool wrappers**: copy/paste from neighbours; cover full commands; use `<c>`, `<a>`, `<ul>`/`<ol>`, `<em>`, `<para/>` in `help`; don't write `secret: false` or `default: xxx`. See [Tool wrapper recipe](#tool-wrapper-recipe) below.
 - **Tests next to code, separate folder**: every `Foo` project under `src/` has a sibling `Foo.Tests` project under `tests/`. Mirror the namespace.
 - **No IDE-specific style files committed.** `.editorconfig` and `*.DotSettings` were removed during the takeover — relying on `dotnet format` defaults and review.
-- **Telemetry opt-out is set in test runs** (`FALLOUT_TELEMETRY_OPTOUT=true`). Keep it that way.
 - **No per-file license headers.** The MIT notice lives in [`LICENSE`](https://github.com/Fallout-build/Fallout/blob/main/LICENSE) at the repo root, and NuGet packages declare MIT via `PackageLicenseExpression`. Per-file headers were stripped in v11 (one source of truth + the header URL would have rotted on the repo-org transfer). Vendored third-party code keeps its own copyright headers — don't touch those (e.g. files under `src/Persistence/Fallout.Persistence.Solution/` retain Microsoft's MIT notice).
 - **`[Experimental]` for opt-in unstable public APIs.** Not-yet-stable public surface is marked with `[Experimental("FALLOUT0xx")]` rather than held back or shipped silently. See [the `[Experimental]` convention](#experimental-for-opt-in-unstable-apis) below and the [diagnostic-ID registry](../experimental-apis.md).
 - **`[Obsolete]` with a `DiagnosticId` for deprecations.** Deprecated public surface carries `[Obsolete(..., DiagnosticId = "FALLOUTOBS0xx")]` so `TreatWarningsAsErrors` consumers can suppress a single deprecation. See [the `[Obsolete]` convention](#obsolete-for-deprecating-public-apis) below and the [diagnostic-ID registry](../obsolete_apis.md).
diff --git a/docs/dependencies.md b/docs/dependencies.md
index e88890001..e7dd1fb05 100644
--- a/docs/dependencies.md
+++ b/docs/dependencies.md
@@ -64,12 +64,6 @@ Central package versions are pinned in `Directory.Packages.props`; this page lin
 |---|---|
 | `NuGet.Packaging` | Read .nupkg metadata. Used by `NuGetVersionResolver`, `ProjectUpdater`. |
 
-## Telemetry — currently inactive
-
-| Package | Purpose | Status |
-|---|---|---|
-| `Microsoft.ApplicationInsights` | Telemetry client | **Dead weight today.** `Telemetry.cs` short-circuits because `InstrumentationKey = ""` (the original NUKE key was matkoch-owned, we don't reuse). Removal tracked in [#79](https://github.com/Fallout-build/Fallout/issues/79). Re-introduce when we stand up a Fallout-owned endpoint. |
-
 ## Vendored source
 
 | Package | Source | Why vendored |
diff --git a/docs/migration/from-nuke.md b/docs/migration/from-nuke.md
index bca967975..b8663da7b 100644
--- a/docs/migration/from-nuke.md
+++ b/docs/migration/from-nuke.md
@@ -66,8 +66,9 @@ If your build had previously worked against NUKE, it should now work against Fal
 | Fully-qualified type refs | `Nuke.Common.AbsolutePath` | `Fallout.Common.AbsolutePath` |
 | Base class name | `: NukeBuild` | `: FalloutBuild` |
 | Base interface name | `: INukeBuild` | `: IFalloutBuild` |
-| MSBuild properties in `_build.csproj` | `<NukeRootDirectory>`, `<NukeTelemetryVersion>` | `<FalloutRootDirectory>`, `<FalloutTelemetryVersion>` |
-| Bootstrap scripts | `dotnet nuke`, `NUKE_TELEMETRY_OPTOUT`, `.nuke/temp` | `dotnet fallout`, `FALLOUT_TELEMETRY_OPTOUT`, `.fallout/temp` |
+| MSBuild properties in `_build.csproj` | `<NukeRootDirectory>` | `<FalloutRootDirectory>` |
+| Bootstrap scripts | `dotnet nuke`, `.nuke/temp` | `dotnet fallout`, `.fallout/temp` |
+| Telemetry knobs (removed) | `<NukeTelemetryVersion>`, `NUKE_TELEMETRY_OPTOUT` | *dropped* — Fallout has no telemetry ([ADR-0010](../adr/0010-no-telemetry-collection.md)); `fallout migrate` strips them |
 | Config directory | `.nuke/` | `.fallout/` (contents preserved) |
 
 The 1:1 namespace prefix swap is the only structural change. Type names (other than `NukeBuild` / `INukeBuild`) keep their identifiers — `[Parameter]`, `[Solution]`, `[GitHubActions]`, `Solution`, `GitRepository`, etc. all stay the same.
@@ -103,9 +104,9 @@ You'll need a GitHub Personal Access Token with the `read:packages` scope. Then
 
 If you'd rather drive the rewrite by hand (small projects, or you want to learn what the tool does):
 
-1. Edit `build/_build.csproj`. For every `<PackageReference Include="Nuke.X" ...>`, change `Nuke.X` → `Fallout.X`. Same for `<NukeRootDirectory>` / `<NukeTelemetryVersion>` MSBuild properties.
+1. Edit `build/_build.csproj`. For every `<PackageReference Include="Nuke.X" ...>`, change `Nuke.X` → `Fallout.X`. Same for the `<NukeRootDirectory>` MSBuild property. Delete any `<NukeTelemetryVersion>` — Fallout has no telemetry ([ADR-0010](../adr/0010-no-telemetry-collection.md)).
 2. In every `.cs` file under `build/`, change `using Nuke.X.Y;` to `using Fallout.X.Y;`. Replace `: NukeBuild` with `: FalloutBuild` and `INukeBuild` with `IFalloutBuild`.
-3. In `build.ps1`, `build.sh`, `build.cmd`: `dotnet nuke` → `dotnet fallout`, `NUKE_TELEMETRY_OPTOUT` → `FALLOUT_TELEMETRY_OPTOUT`, `.nuke/temp` → `.fallout/temp`.
+3. In `build.ps1`, `build.sh`, `build.cmd`: `dotnet nuke` → `dotnet fallout`, `.nuke/temp` → `.fallout/temp`. Delete any `NUKE_TELEMETRY_OPTOUT` line (no telemetry to opt out of).
 4. Rename the `.nuke/` directory to `.fallout/`. Contents are preserved.
 5. Run `./build.ps1` to verify.
 
diff --git a/src/Fallout.Build.Shared/Constants.cs b/src/Fallout.Build.Shared/Constants.cs
index 6df0637e7..9c1750a8c 100644
--- a/src/Fallout.Build.Shared/Constants.cs
+++ b/src/Fallout.Build.Shared/Constants.cs
@@ -53,7 +53,6 @@ internal static class Constants
     internal const string FalloutRepositoryGit = $"{FalloutWebsite}.git";
     internal const string FalloutRawRepository = $"https://raw.githubusercontent.com/{FalloutOwner}/{FalloutRepoName}/main";
     internal const string FalloutDocsUrl = "https://docs.fallout.build/";
-    internal const string FalloutTelemetryDocsUrl = $"{FalloutWebsite}#telemetry";
     internal const string FalloutNotificationsUrl = $"{FalloutRawRepository}/notifications.json";
 
     // Upstream NUKE references — only for attribution / fallback recognition of legacy project URLs.
diff --git a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
index 371214e87..a2133dfae 100644
--- a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
+++ b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
@@ -57,7 +57,6 @@ private bool HasConfigurationChanged(IConfigurationGenerator generator)
         if (changedFiles.Count == 0)
             return false;
 
-        Telemetry.ConfigurationGenerated(generator.HostType, generator.Id, Build);
         // TODO: multi-line logging
         Log.Warning("Configuration files for {Configuration} have changed.", generator.DisplayName);
         changedFiles.ForEach(x => Log.Verbose("Updated {File}", x));
diff --git a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs b/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs
deleted file mode 100644
index 715e79bfe..000000000
--- a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Fallout.Common.Execution;
-
-internal class TelemetryAttribute : BuildExtensionAttributeBase, IOnBuildInitialized, IOnTargetSucceeded
-{
-    public void OnBuildInitialized(
-        IReadOnlyCollection<ExecutableTarget> executableTargets,
-        IReadOnlyCollection<ExecutableTarget> executionPlan)
-    {
-        if (Build.IsInterceptorExecution)
-            return;
-
-        Telemetry.BuildStarted(Build);
-    }
-
-    public void OnTargetSucceeded(ExecutableTarget target)
-    {
-        if (Build.IsInterceptorExecution)
-            return;
-
-        Telemetry.TargetSucceeded(target, Build);
-    }
-}
diff --git a/src/Fallout.Build/FalloutBuild.cs b/src/Fallout.Build/FalloutBuild.cs
index a604cccc8..106d7c1cc 100644
--- a/src/Fallout.Build/FalloutBuild.cs
+++ b/src/Fallout.Build/FalloutBuild.cs
@@ -55,7 +55,6 @@ namespace Fallout.Common;
 [SerializeBuildGraph(Priority = 20)]
 [HandlePlanRequests(Priority = 10)]
 [HandleHelpRequests(Priority = 5)]
-[Telemetry]
 [HandleVisualStudioDebugging]
 [InjectNonParameterValues(Priority = -100)]
 // After finish
diff --git a/src/Fallout.Build/Telemetry/Telemetry.Events.cs b/src/Fallout.Build/Telemetry/Telemetry.Events.cs
deleted file mode 100644
index 7a318978a..000000000
--- a/src/Fallout.Build/Telemetry/Telemetry.Events.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using Fallout.Common.Utilities;
-using Fallout.Common.Utilities.Collections;
-using Serilog;
-
-namespace Fallout.Common.Execution;
-
-internal partial class Telemetry
-{
-    public static void BuildStarted(IFalloutBuild build)
-    {
-        TrackEvent(
-            eventName: nameof(BuildStarted),
-            propertiesProvider: () =>
-                GetCommonProperties(build)
-                    .AddDictionary(GetBuildProperties(build))
-                    .AddDictionary(GetRepositoryProperties(build.RootDirectory)));
-    }
-
-    public static void TargetSucceeded(ExecutableTarget target, IFalloutBuild build)
-    {
-        if (!target.Name.EqualsAnyOrdinalIgnoreCase(knownTargets) ||
-            target.Status != ExecutionStatus.Succeeded)
-            return;
-
-        TrackEvent(
-            eventName: nameof(TargetSucceeded),
-            propertiesProvider: () =>
-                GetCommonProperties(build)
-                    .AddDictionary(GetTargetProperties(build, target))
-                    .AddDictionary(GetBuildProperties(build))
-                    .AddDictionary(GetRepositoryProperties(build.RootDirectory)));
-    }
-
-    public static void ConfigurationGenerated(Type hostType, string generatorId, IFalloutBuild build)
-    {
-        TrackEvent(
-            eventName: nameof(ConfigurationGenerated),
-            propertiesProvider: () =>
-                GetCommonProperties(build)
-                    .AddDictionary(GetGeneratorProperties(hostType, generatorId))
-                    .AddDictionary(GetBuildProperties(build))
-                    .AddDictionary(GetRepositoryProperties(EnvironmentInfo.WorkingDirectory)));
-    }
-
-    public static void SetupBuild()
-    {
-        TrackEvent(
-            eventName: nameof(SetupBuild),
-            propertiesProvider: () =>
-                GetCommonProperties()
-                    .AddDictionary(GetRepositoryProperties(EnvironmentInfo.WorkingDirectory)));
-    }
-
-    public static void ConvertCake()
-    {
-        TrackEvent(
-            eventName: nameof(ConvertCake),
-            propertiesProvider: () =>
-                GetCommonProperties()
-                    .AddDictionary(GetRepositoryProperties(EnvironmentInfo.WorkingDirectory)));
-    }
-
-    public static void AddPackage()
-    {
-        TrackEvent(
-            eventName: nameof(AddPackage),
-            propertiesProvider: () =>
-                GetCommonProperties()
-                    .AddDictionary(GetRepositoryProperties(EnvironmentInfo.WorkingDirectory)));
-    }
-
-    private static void TrackEvent(string eventName, Func<Dictionary<string, string>> propertiesProvider)
-    {
-        // No-op until a Fallout-controlled telemetry backend lands (#79). Public callers
-        // (BuildStarted, TargetSucceeded, etc.) stay so we don't have to thread the change
-        // back through their call sites when telemetry is reintroduced.
-        _ = eventName;
-        _ = propertiesProvider;
-    }
-}
diff --git a/src/Fallout.Build/Telemetry/Telemetry.Properties.cs b/src/Fallout.Build/Telemetry/Telemetry.Properties.cs
deleted file mode 100644
index 23af2222b..000000000
--- a/src/Fallout.Build/Telemetry/Telemetry.Properties.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using Fallout.Common.CI;
-using Fallout.Common.Git;
-using Fallout.Common.Tooling;
-using Fallout.Common.Utilities;
-using Fallout.Common.Utilities.Collections;
-using Fallout.Common.ValueInjection;
-
-namespace Fallout.Common.Execution;
-
-internal partial class Telemetry
-{
-    private static readonly string[] knownTargets = { "Restore", "Compile", "Test" };
-
-    private static Dictionary<string, string> GetCommonProperties(IFalloutBuild build = null)
-    {
-        var version = ControlFlow.SuppressErrors(
-            () =>
-            {
-                var dotnet = ToolResolver.GetEnvironmentOrPathTool("dotnet");
-                return dotnet.Invoke($"--version", logInvocation: false, logOutput: false).StdToText();
-            },
-            logWarning: false);
-
-        return new Dictionary<string, string>
-               {
-                   ["os_platform"] = EnvironmentInfo.Platform.ToString(),
-                   ["os_architecture"] = RuntimeInformation.OSArchitecture.ToString(),
-                   ["version_dotnet_sdk"] = version,
-                   ["version_fallout_common"] = build != null ? typeof(FalloutBuild).Assembly.GetVersionText() : null,
-                   ["version_fallout_global_tool"] = build != null
-                       ? LegacyEnvironment.ReadFromVariables(
-                           EnvironmentInfo.Variables,
-                           Constants.GlobalToolVersionEnvironmentKey,
-                           Constants.LegacyGlobalToolVersionEnvironmentKey)
-                       : Assembly.GetEntryAssembly().GetVersionText()
-               };
-    }
-
-    private static Dictionary<string, string> GetRepositoryProperties(string directory)
-    {
-        var repository = ControlFlow.SuppressErrors(() => GitRepository.FromLocalDirectory(directory), logWarning: false);
-        if (repository == null)
-            return new Dictionary<string, string>();
-
-        var providers =
-            new List<(Func<bool>, string)>
-            {
-                (() => repository.Endpoint?.ContainsOrdinalIgnoreCase("github.com") ?? false, "GitHub"),
-                (() => repository.Endpoint?.ContainsOrdinalIgnoreCase("gitlab.com") ?? false, "GitLab"),
-                (() => repository.Endpoint?.ContainsOrdinalIgnoreCase("bitbucket.org") ?? false, "Bitbucket"),
-                (() => repository.Endpoint?.ContainsOrdinalIgnoreCase("jetbrains.space") ?? false, "JetBrains"),
-                (() => repository.Endpoint?.ContainsOrdinalIgnoreCase("visualstudio.com") ?? false, "Azure")
-            };
-
-        var branches =
-            new List<(Func<bool>, string)>
-            {
-                (() => repository.IsOnMainOrMasterBranch(), "main"),
-                (() => repository.IsOnDevelopBranch(), "develop"),
-                (() => repository.IsOnReleaseBranch(), "release"),
-                (() => repository.IsOnHotfixBranch(), "hotfix")
-            };
-
-        return new Dictionary<string, string>
-               {
-                   ["repo_provider"] = providers.FirstOrDefault(x => x.Item1.Invoke()).Item2,
-                   ["repo_branch"] = branches.FirstOrDefault(x => x.Item1.Invoke()).Item2,
-                   ["repo_url"] = repository.SshUrl?.GetSHA256Hash()[..6],
-                   ["repo_commit"] = repository.Commit?.GetSHA256Hash()[..6]
-               };
-    }
-
-    private static ReadOnlyDictionary<string, string> GetBuildProperties(IFalloutBuild build)
-    {
-        var startTimeString = LegacyEnvironment.ReadFromVariables(
-            EnvironmentInfo.Variables,
-            Constants.GlobalToolStartTimeEnvironmentKey,
-            Constants.LegacyGlobalToolStartTimeEnvironmentKey);
-        var compileTime = startTimeString != null
-            ? DateTime.Now.Subtract(DateTime.Parse(startTimeString))
-            : default(TimeSpan?);
-
-        return new Dictionary<string, string>
-               {
-                   ["compile_time"] = compileTime?.TotalSeconds.ToString("F0"),
-                   ["target_framework"] = EnvironmentInfo.Framework.ToString(),
-                   ["host"] = GetTypeName(build.Host),
-                   ["build_type"] = build.BuildProjectFile != null ? "Project" : "Global Tool",
-                   ["num_targets"] = build.ExecutableTargets.Count.ToString(),
-                   ["num_custom_extensions"] = build.BuildExtensions.Select(x => x.GetType()).Count(IsCustomType).ToString(),
-                   ["num_custom_components"] = build.GetType().GetInterfaces().Count(IsCustomType).ToString(),
-                   ["num_partitioned_targets"] = build.ExecutableTargets.Count(x => x.PartitionSize.HasValue).ToString(),
-                   ["num_secrets"] = ValueInjectionUtility.GetParameterMembers(build.GetType(), includeUnlisted: true)
-                       .Count(x => x.HasCustomAttribute<SecretAttribute>()).ToString(),
-                   ["config_generators"] = build.GetType().GetCustomAttributes<ConfigurationAttributeBase>()
-                       .Select(GetTypeName).Distinct().OrderBy(x => x).JoinCommaSpace(),
-                   ["build_components"] = build.GetType().GetInterfaces().Where(x => IsCommonType(x) && x != typeof(IFalloutBuild))
-                       .Select(GetTypeName).Distinct().OrderBy(x => x).JoinCommaSpace()
-               }.AsReadOnly();
-    }
-
-    private static Dictionary<string, string> GetTargetProperties(IFalloutBuild build, ExecutableTarget target)
-    {
-        return new Dictionary<string, string>
-               {
-                   ["target_name"] = target.Name,
-                   ["target_duration"] = target.Duration.TotalSeconds.ToString("F0"),
-                   ["target_current_partition"] = build.Partition.Part.ToString(),
-                   ["target_total_partitions"] = build.Partition.Total.ToString()
-               };
-    }
-
-    private static Dictionary<string, string> GetGeneratorProperties(Type hostType, string generatorId)
-    {
-        return new Dictionary<string, string>
-               {
-                   ["generator_host"] = GetTypeName(hostType),
-                   ["generator_id"] = generatorId.GetSHA256Hash()[..6]
-               };
-    }
-
-    private static bool IsCommonType(Type type)
-    {
-        // Recognize both the new Fallout repository and the legacy NUKE repository — types compiled
-        // from older NUKE versions still embed the upstream RepositoryUrl in their assembly metadata.
-        return type.Assembly
-            .GetCustomAttributes<AssemblyMetadataAttribute>()
-            .Any(x => x is { Key: "RepositoryUrl" } &&
-                      (x.Value == Constants.FalloutRepositoryGit ||
-                       x.Value == Constants.UpstreamNukeRepositoryGit));
-    }
-
-    private static bool IsCustomType(Type type)
-    {
-        return !IsCommonType(type);
-    }
-
-    private static string GetTypeName(Type type)
-    {
-        return IsCommonType(type)
-            ? type.Name.TrimEnd(nameof(Attribute))
-            : type.Descendants(x => x.BaseType).FirstOrDefault(IsCommonType) is { } commonType
-                ? $"{GetTypeName(commonType)} (Custom)"
-                : "<Custom>";
-    }
-
-    private static string GetTypeName(object obj)
-    {
-        return GetTypeName(obj.GetType());
-    }
-}
diff --git a/src/Fallout.Build/Telemetry/Telemetry.cs b/src/Fallout.Build/Telemetry/Telemetry.cs
deleted file mode 100644
index 398461ddf..000000000
--- a/src/Fallout.Build/Telemetry/Telemetry.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-﻿using System;
-using System.Linq;
-using System.Reflection;
-using System.Threading;
-using Fallout.Common.IO;
-using Fallout.Solutions;
-using Fallout.Common.Utilities;
-using static Fallout.Common.ControlFlow;
-
-namespace Fallout.Common.Execution;
-
-internal static partial class Telemetry
-{
-    // https://docs.microsoft.com/en-us/dotnet/core/tools/telemetry
-    // https://dotnet.microsoft.com/platform/telemetry
-    // https://docs.microsoft.com/en-us/azure/azure-monitor/app/console
-    // https://docs.microsoft.com/en-us/azure/azure-monitor/app/ip-collection
-
-    public const string OptOutEnvironmentKey = "FALLOUT_TELEMETRY_OPTOUT";
-    public const string LegacyOptOutEnvironmentKey = "NUKE_TELEMETRY_OPTOUT";
-    public const int CurrentVersion = 1;
-
-    // Telemetry is currently a no-op for Fallout. The original NUKE maintainer owned an
-    // Azure Application Insights endpoint we can't reuse; Microsoft.ApplicationInsights was
-    // dropped from our deps in #79. The awareness/disclosure machinery below stays so we can
-    // wire up a Fallout-controlled backend later without re-introducing the consent flow.
-    private const string VersionPropertyName = "FalloutTelemetryVersion";
-    private const string LegacyVersionPropertyName = "NukeTelemetryVersion";
-
-    private static readonly int? confirmedVersion;
-
-    static Telemetry()
-    {
-        var optoutParameter = ParameterService.GetParameter<string>(OptOutEnvironmentKey)
-                              ?? ParameterService.GetParameter<string>(LegacyOptOutEnvironmentKey)
-                              ?? string.Empty;
-        if (optoutParameter == "1" || optoutParameter.EqualsOrdinalIgnoreCase(bool.TrueString))
-            return;
-
-        // No telemetry endpoint configured for Fallout yet — short-circuit. When a backend lands,
-        // re-enable by calling ProjectModelTasks.Initialize() + CheckAwareness() here and wiring
-        // the resulting consent through to TrackEvent (in Telemetry.Events.cs).
-    }
-
-    private static int? CheckAwareness()
-    {
-        AbsolutePath GetCookieFile(string name, int version)
-            => Constants.GlobalFalloutDirectory / "telemetry-awareness" / $"v{version}" / name;
-
-        // Check for calls from Fallout.Cli and custom global tools
-        if (SuppressErrors(() => FalloutBuild.BuildProjectFile, logWarning: false) == null)
-        {
-            var cookieName = Assembly.GetEntryAssembly().NotNull().GetName().Name;
-            var cookieFile = GetCookieFile(cookieName, CurrentVersion);
-            if (!cookieFile.Exists())
-            {
-                PrintDisclosure($"create awareness cookie for {cookieName.SingleQuote()}");
-                cookieFile.TouchFile();
-            }
-
-            return CurrentVersion;
-        }
-
-        var project = ProjectModelTasks.ParseProject(FalloutBuild.BuildProjectFile);
-        var property = project.Properties.SingleOrDefault(x => x.Name.EqualsOrdinalIgnoreCase(VersionPropertyName))
-                       ?? project.Properties.SingleOrDefault(x => x.Name.EqualsOrdinalIgnoreCase(LegacyVersionPropertyName));
-        if (property?.EvaluatedValue != CurrentVersion.ToString())
-        {
-            if (FalloutBuild.IsServerBuild)
-            {
-                PrintDisclosure(action: null);
-                return null;
-            }
-
-            PrintDisclosure($"set the {VersionPropertyName.SingleQuote()} property");
-            project.SetProperty(VersionPropertyName, CurrentVersion.ToString());
-            project.Save();
-        }
-
-        for (var version = CurrentVersion; version > 0; version--)
-        {
-            var cookieFile = GetCookieFile("Fallout.Cli", version);
-            if (cookieFile.FileExists())
-                return version;
-        }
-
-        return FalloutBuild.IsServerBuild ? CurrentVersion : null;
-    }
-
-    private static void PrintDisclosure(string action)
-    {
-        var disclosure =
-            new[]
-            {
-                $"Telemetry v{CurrentVersion}",
-                "------------",
-                "Fallout collects anonymous usage data in order to help us improve your experience.",
-                $"Read more about scope, data points, and opt-out: {Constants.FalloutTelemetryDocsUrl}",
-                string.Empty
-            }.JoinNewLine();
-
-        if (action != null &&
-            Environment.UserInteractive &&
-            !Console.IsInputRedirected)
-        {
-            Host.Information(disclosure);
-            Thread.Sleep(2000);
-            Host.Information($"Press <Enter> to {action} ...");
-            WaitForEnter();
-        }
-        else
-        {
-            Host.Warning(disclosure);
-            Host.Warning("Run in interactive console to fix this warning");
-        }
-    }
-
-    private static void WaitForEnter()
-    {
-        ConsoleKey response;
-        do
-        {
-            response = Console.ReadKey(intercept: true).Key;
-        } while (response != ConsoleKey.Enter);
-    }
-}
diff --git a/src/Fallout.Cli/Commands/AddPackageCommand.cs b/src/Fallout.Cli/Commands/AddPackageCommand.cs
index d39cc7edc..ec618e954 100644
--- a/src/Fallout.Cli/Commands/AddPackageCommand.cs
+++ b/src/Fallout.Cli/Commands/AddPackageCommand.cs
@@ -29,7 +29,6 @@ public async Task<int> ExecuteAsync(string[] args, AbsolutePath rootDirectory, A
     {
         ToolBanner.Print();
         Logging.Configure();
-        Telemetry.AddPackage();
         ProjectModelTasks.Initialize();
 
         var packageId = args.ElementAt(0);
diff --git a/src/Fallout.Cli/Commands/CakeConvertCommand.cs b/src/Fallout.Cli/Commands/CakeConvertCommand.cs
index dba41e294..c8101556f 100644
--- a/src/Fallout.Cli/Commands/CakeConvertCommand.cs
+++ b/src/Fallout.Cli/Commands/CakeConvertCommand.cs
@@ -39,7 +39,6 @@ public async Task<int> ExecuteAsync(string[] args, AbsolutePath rootDirectory, A
     {
         ToolBanner.Print();
         Logging.Configure();
-        Telemetry.ConvertCake();
         ProjectModelTasks.Initialize();
 
         Host.Warning(
diff --git a/src/Fallout.Cli/Commands/RunCommand.cs b/src/Fallout.Cli/Commands/RunCommand.cs
index a98d93fa8..374bbf7ac 100644
--- a/src/Fallout.Cli/Commands/RunCommand.cs
+++ b/src/Fallout.Cli/Commands/RunCommand.cs
@@ -75,7 +75,6 @@ private static async Task<int> StartDotnetAsync(string dotnet, IEnumerable<strin
         startInfo.Environment["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1";
         startInfo.Environment["DOTNET_NOLOGO"] = "1";
         startInfo.Environment["DOTNET_ROLL_FORWARD"] = "Major";
-        startInfo.Environment["FALLOUT_TELEMETRY_OPTOUT"] = "1";
         startInfo.Environment[GlobalToolVersionEnvironmentKey] = typeof(RunCommand).Assembly.GetVersionText();
         startInfo.Environment[GlobalToolStartTimeEnvironmentKey] = DateTime.Now.ToString("O");
 
diff --git a/src/Fallout.Cli/Commands/SetupCommand.cs b/src/Fallout.Cli/Commands/SetupCommand.cs
index a9dea45f6..fed807c20 100644
--- a/src/Fallout.Cli/Commands/SetupCommand.cs
+++ b/src/Fallout.Cli/Commands/SetupCommand.cs
@@ -42,7 +42,6 @@ public async Task<int> ExecuteAsync(string[] args, AbsolutePath rootDirectory, A
     {
         ToolBanner.Print();
         Logging.Configure();
-        Telemetry.SetupBuild();
 
         AnsiConsole.WriteLine();
         AnsiConsole.MarkupLine("[bold]Let's setup a new build![/]");
@@ -141,7 +140,6 @@ public async Task<int> ExecuteAsync(string[] args, AbsolutePath rootDirectory, A
                         RootDirectory = buildDirectory.GetWinRelativePathTo(rootDirectory),
                         ScriptDirectory = buildDirectory.GetWinRelativePathTo(WorkingDirectory),
                         TargetFramework = TARGET_FRAMEWORK,
-                        TelemetryVersion = Telemetry.CurrentVersion,
                         FalloutVersion = falloutVersion,
                     })));
 
diff --git a/src/Fallout.Cli/templates/_build.csproj b/src/Fallout.Cli/templates/_build.csproj
index 9418f37ac..e529fa8e2 100644
--- a/src/Fallout.Cli/templates/_build.csproj
+++ b/src/Fallout.Cli/templates/_build.csproj
@@ -7,7 +7,6 @@
     <NoWarn>CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006</NoWarn>
     <FalloutRootDirectory>_ROOT_DIRECTORY_</FalloutRootDirectory>
     <FalloutScriptDirectory>_SCRIPT_DIRECTORY_</FalloutScriptDirectory>
-    <FalloutTelemetryVersion>_TELEMETRY_VERSION_</FalloutTelemetryVersion>
     <IsPackable>false</IsPackable>
     <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
     <UseArtifactsOutput>false</UseArtifactsOutput>
diff --git a/src/Fallout.Common/Fallout.Common.targets b/src/Fallout.Common/Fallout.Common.targets
index 4b12c6b45..238b8b38e 100644
--- a/src/Fallout.Common/Fallout.Common.targets
+++ b/src/Fallout.Common/Fallout.Common.targets
@@ -10,7 +10,6 @@
     <FalloutTasksEnabled Condition="'$(FalloutTasksEnabled)' == '' AND '$(NukeTasksEnabled)' != ''">$(NukeTasksEnabled)</FalloutTasksEnabled>
     <FalloutRootDirectory Condition="'$(FalloutRootDirectory)' == '' AND '$(NukeRootDirectory)' != ''">$(NukeRootDirectory)</FalloutRootDirectory>
     <FalloutScriptDirectory Condition="'$(FalloutScriptDirectory)' == '' AND '$(NukeScriptDirectory)' != ''">$(NukeScriptDirectory)</FalloutScriptDirectory>
-    <FalloutTelemetryVersion Condition="'$(FalloutTelemetryVersion)' == '' AND '$(NukeTelemetryVersion)' != ''">$(NukeTelemetryVersion)</FalloutTelemetryVersion>
     <FalloutDefaultExcludes Condition="'$(FalloutDefaultExcludes)' == '' AND '$(NukeDefaultExcludes)' != ''">$(NukeDefaultExcludes)</FalloutDefaultExcludes>
     <FalloutExcludeBoot Condition="'$(FalloutExcludeBoot)' == '' AND '$(NukeExcludeBoot)' != ''">$(NukeExcludeBoot)</FalloutExcludeBoot>
     <FalloutExcludeConfig Condition="'$(FalloutExcludeConfig)' == '' AND '$(NukeExcludeConfig)' != ''">$(NukeExcludeConfig)</FalloutExcludeConfig>
@@ -90,7 +89,6 @@
     <_LegacyFalloutProperty Include="NukeTasksEnabled"             Condition="'$(NukeTasksEnabled)' != ''"             ><NewName>FalloutTasksEnabled</NewName></_LegacyFalloutProperty>
     <_LegacyFalloutProperty Include="NukeRootDirectory"            Condition="'$(NukeRootDirectory)' != ''"            ><NewName>FalloutRootDirectory</NewName></_LegacyFalloutProperty>
     <_LegacyFalloutProperty Include="NukeScriptDirectory"          Condition="'$(NukeScriptDirectory)' != ''"          ><NewName>FalloutScriptDirectory</NewName></_LegacyFalloutProperty>
-    <_LegacyFalloutProperty Include="NukeTelemetryVersion"         Condition="'$(NukeTelemetryVersion)' != ''"         ><NewName>FalloutTelemetryVersion</NewName></_LegacyFalloutProperty>
     <_LegacyFalloutProperty Include="NukeDefaultExcludes"          Condition="'$(NukeDefaultExcludes)' != ''"          ><NewName>FalloutDefaultExcludes</NewName></_LegacyFalloutProperty>
     <_LegacyFalloutProperty Include="NukeExcludeBoot"              Condition="'$(NukeExcludeBoot)' != ''"              ><NewName>FalloutExcludeBoot</NewName></_LegacyFalloutProperty>
     <_LegacyFalloutProperty Include="NukeExcludeConfig"            Condition="'$(NukeExcludeConfig)' != ''"            ><NewName>FalloutExcludeConfig</NewName></_LegacyFalloutProperty>
diff --git a/src/Fallout.Migrate/Steps/RewriteCsprojsStep.cs b/src/Fallout.Migrate/Steps/RewriteCsprojsStep.cs
index b462a45cf..37e981525 100644
--- a/src/Fallout.Migrate/Steps/RewriteCsprojsStep.cs
+++ b/src/Fallout.Migrate/Steps/RewriteCsprojsStep.cs
@@ -34,13 +34,20 @@ internal sealed class RewriteCsprojsStep : IMigrationStep
     // with the literal "Nuke".
     private static readonly Regex msBuildPropertyPattern = new(
         @"\bNuke(?=" +
-        "(?:RootDirectory|ScriptDirectory|TelemetryVersion|BaseDirectory|BaseNamespace|" +
+        "(?:RootDirectory|ScriptDirectory|BaseDirectory|BaseNamespace|" +
         "UseNestedNamespaces|RepositoryUrl|UpdateReferences|ContinueOnError|TaskTimeout|" +
         "Timeout|TasksEnabled|DefaultExcludes|ExcludeBoot|ExcludeConfig|ExcludeLogs|" +
         "ExcludeDirectoryBuild|ExcludeCi|SpecificationFiles|ExternalFiles|TasksAssembly|" +
         "TasksDirectory)\\b)",
         RegexOptions.Compiled);
 
+    // Strip the telemetry-version property entirely — telemetry was removed from Fallout
+    // (ADR-0010), so a migrated project must not carry a dead <FalloutTelemetryVersion>.
+    // Matches the whole element line (either legacy Nuke* or already-Fallout* spelling).
+    private static readonly Regex telemetryVersionPropertyPattern = new(
+        @"^[ \t]*<(?<tag>(?:Nuke|Fallout)TelemetryVersion)>.*?</\k<tag>>\s*\r?\n?",
+        RegexOptions.Compiled | RegexOptions.Multiline);
+
     // Strip explicit `System.Security.Cryptography.Xml` PackageReferences. NUKE-era projects
     // often pinned this directly at an older major (e.g. 9.x). Fallout.Common 10.2.12+ transitively
     // requires a newer version (10.0.6+) and the conflict trips NU1605 ("Detected package
@@ -102,7 +109,14 @@ public static RewriteResult Rewrite(string original, string falloutVersion)
             return "Fallout";
         });
 
-        // Pass 3 — strip the stale System.Security.Cryptography.Xml direct pin.
+        // Pass 3 — strip the telemetry-version property (feature removed in ADR-0010).
+        content = telemetryVersionPropertyPattern.Replace(content, _ =>
+        {
+            edits++;
+            return string.Empty;
+        });
+
+        // Pass 4 — strip the stale System.Security.Cryptography.Xml direct pin.
         content = cryptographyXmlPackageRefPattern.Replace(content, _ =>
         {
             edits++;
diff --git a/src/Fallout.Migrate/Steps/ScriptRewriter.cs b/src/Fallout.Migrate/Steps/ScriptRewriter.cs
index ac3fbe25a..2e681a3c1 100644
--- a/src/Fallout.Migrate/Steps/ScriptRewriter.cs
+++ b/src/Fallout.Migrate/Steps/ScriptRewriter.cs
@@ -13,12 +13,16 @@ internal static class ScriptRewriter
     /// <summary>The ordered find/replace patterns applied by <see cref="Rewrite"/>.</summary>
     private static readonly (Regex Pattern, string Replacement)[] patterns =
     {
+        // Strip any telemetry opt-out line entirely — telemetry was removed from Fallout
+        // (ADR-0010), so there is nothing to opt out of. Handles bash `export`, PowerShell
+        // `$env:`, and cmd `set` spellings by matching the whole line. Runs before the
+        // env-var renames below so the line is gone rather than renamed to a dead variable.
+        (new Regex(@"^.*\b(?:NUKE|FALLOUT)_TELEMETRY_OPTOUT\b.*\r?\n?", RegexOptions.Compiled | RegexOptions.Multiline), ""),
         // `dotnet nuke` invocations
         (new Regex(@"\bdotnet\s+nuke\b", RegexOptions.Compiled), "dotnet fallout"),
         // .nuke directory references → .fallout
         (new Regex(@"(?<=[\\/.""'\s])\.nuke(?=[\\/""'\s])", RegexOptions.Compiled), ".fallout"),
         // Legacy env vars (consumer-facing ones from P3.5c)
-        (new Regex(@"\bNUKE_TELEMETRY_OPTOUT\b", RegexOptions.Compiled), "FALLOUT_TELEMETRY_OPTOUT"),
         (new Regex(@"\bNUKE_GLOBAL_TOOL_VERSION\b", RegexOptions.Compiled), "FALLOUT_GLOBAL_TOOL_VERSION"),
         (new Regex(@"\bNUKE_GLOBAL_TOOL_START_TIME\b", RegexOptions.Compiled), "FALLOUT_GLOBAL_TOOL_START_TIME"),
         (new Regex(@"\bNUKE_INTERNAL_INTERCEPTOR\b", RegexOptions.Compiled), "FALLOUT_INTERNAL_INTERCEPTOR"),
diff --git a/tests/Fallout.Build.Specs/ExecutionSpecsInitializer.cs b/tests/Fallout.Build.Specs/ExecutionSpecsInitializer.cs
deleted file mode 100644
index 8f39f1338..000000000
--- a/tests/Fallout.Build.Specs/ExecutionSpecsInitializer.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using Fallout.Common.Execution;
-
-namespace Fallout.Common.Specs;
-
-public static class ExecutionTestsInitializer
-{
-    [ModuleInitializer]
-    public static void Initialize()
-    {
-        Environment.SetEnvironmentVariable(Telemetry.OptOutEnvironmentKey, "true");
-    }
-}
diff --git a/tests/Fallout.Migrate.Specs/MigrationIntegrationSpecs.cs b/tests/Fallout.Migrate.Specs/MigrationIntegrationSpecs.cs
index 53a937e8e..117c4234a 100644
--- a/tests/Fallout.Migrate.Specs/MigrationIntegrationSpecs.cs
+++ b/tests/Fallout.Migrate.Specs/MigrationIntegrationSpecs.cs
@@ -34,7 +34,7 @@ public async Task MigratesVanillaConsumerRepo()
 
             var buildSh = File.ReadAllText(Path.Combine(temp, "build.sh"));
             buildSh.Should().Contain("dotnet fallout");
-            buildSh.Should().Contain("FALLOUT_TELEMETRY_OPTOUT");
+            buildSh.Should().NotContain("TELEMETRY_OPTOUT"); // telemetry removed — opt-out stripped, not renamed (ADR-0010)
             buildSh.Should().Contain(".fallout/temp");
 
             // .nuke/ moved to .fallout/.
diff --git a/tests/Fallout.Migrate.Specs/RewriteCsprojsStepSpecs.cs b/tests/Fallout.Migrate.Specs/RewriteCsprojsStepSpecs.cs
index e11732f9f..d3628111e 100644
--- a/tests/Fallout.Migrate.Specs/RewriteCsprojsStepSpecs.cs
+++ b/tests/Fallout.Migrate.Specs/RewriteCsprojsStepSpecs.cs
@@ -9,7 +9,7 @@ public class RewriteCsprojsStepSpecs
     private const string TestFalloutVersion = "11.0.0";
 
     [Fact]
-    public void RewritesPackageReferenceNamespace()
+    public void Nuke_package_references_are_renamed_to_their_fallout_equivalents()
     {
         const string input = """
                              <Project Sdk="Microsoft.NET.Sdk">
@@ -29,28 +29,46 @@ public void RewritesPackageReferenceNamespace()
     }
 
     [Fact]
-    public void RewritesNukeRootDirectoryProperty()
+    public void Nuke_root_directory_property_is_renamed()
     {
         const string input = """
                              <Project Sdk="Microsoft.NET.Sdk">
                                <PropertyGroup>
                                  <NukeRootDirectory>.\..</NukeRootDirectory>
-                                 <NukeTelemetryVersion>1</NukeTelemetryVersion>
                                </PropertyGroup>
                              </Project>
                              """;
 
         var result = RewriteCsprojsStep.Rewrite(input, TestFalloutVersion);
 
-        result.EditCount.Should().Be(4); // 2 opening + 2 closing tags
+        result.EditCount.Should().Be(2); // 1 opening + 1 closing tag
         result.Content.Should().Contain("<FalloutRootDirectory>");
         result.Content.Should().Contain("</FalloutRootDirectory>");
-        result.Content.Should().Contain("<FalloutTelemetryVersion>");
         result.Content.Should().NotContain("<NukeRootDirectory>");
     }
 
     [Fact]
-    public void LeavesUnrelatedNukePrefixedIdentifiersAlone()
+    public void Telemetry_version_property_is_stripped_instead_of_renamed()
+    {
+        // Telemetry was removed from Fallout (ADR-0010): NukeTelemetryVersion is dropped, not
+        // renamed to a dead FalloutTelemetryVersion. Sibling properties are left intact.
+        const string input = """
+                             <Project Sdk="Microsoft.NET.Sdk">
+                               <PropertyGroup>
+                                 <NukeRootDirectory>.\..</NukeRootDirectory>
+                                 <NukeTelemetryVersion>1</NukeTelemetryVersion>
+                               </PropertyGroup>
+                             </Project>
+                             """;
+
+        var result = RewriteCsprojsStep.Rewrite(input, TestFalloutVersion);
+
+        result.Content.Should().NotContain("TelemetryVersion");
+        result.Content.Should().Contain("<FalloutRootDirectory>");
+    }
+
+    [Fact]
+    public void Unrelated_nuke_prefixed_properties_are_left_alone()
     {
         const string input = """
                              <Project Sdk="Microsoft.NET.Sdk">
@@ -67,7 +85,7 @@ public void LeavesUnrelatedNukePrefixedIdentifiersAlone()
     }
 
     [Fact]
-    public void ReturnsZeroEditsForUnchangedContent()
+    public void Content_without_nuke_references_is_returned_unchanged()
     {
         const string input = """
                              <Project Sdk="Microsoft.NET.Sdk">
@@ -84,7 +102,7 @@ public void ReturnsZeroEditsForUnchangedContent()
     }
 
     [Fact]
-    public void BumpsNukeInlineVersionToCurrentFalloutVersion()
+    public void Inline_nuke_package_versions_are_bumped_to_the_current_fallout_version()
     {
         // Regression guard for #217: NUKE-era pins like 10.1.0 never existed as Fallout.X
         // and would trip NU1603 on the migrated project. Migrate must bump in the same pass.
@@ -105,7 +123,7 @@ public void BumpsNukeInlineVersionToCurrentFalloutVersion()
     }
 
     [Fact]
-    public void BumpsVersionAcrossExtraAttributesBetweenIncludeAndVersion()
+    public void Version_is_bumped_across_extra_attributes_between_include_and_version()
     {
         // PrivateAssets / IncludeAssets are common NUKE-era attributes that sit between
         // Include and Version. The combined-rewrite pattern needs to tolerate them.
@@ -123,7 +141,7 @@ public void BumpsVersionAcrossExtraAttributesBetweenIncludeAndVersion()
     }
 
     [Fact]
-    public void LeavesCpmManagedReferencesWithoutInlineVersionUntouchedByVersionPass()
+    public void Centrally_managed_references_do_not_gain_an_inline_version()
     {
         // Central package management — no inline Version attribute, version lives in
         // Directory.Packages.props. The namespace-only pass still renames Nuke. → Fallout.
@@ -143,7 +161,7 @@ public void LeavesCpmManagedReferencesWithoutInlineVersionUntouchedByVersionPass
     }
 
     [Fact]
-    public void StripsSystemSecurityCryptographyXmlPackageReference()
+    public void Conflicting_system_security_cryptography_xml_pin_is_stripped()
     {
         // #217: NUKE-era projects often carry an explicit System.Security.Cryptography.Xml pin
         // that conflicts with Fallout.Common's transitive >= 10.0.6 requirement (NU1605 downgrade).
@@ -164,7 +182,7 @@ public void StripsSystemSecurityCryptographyXmlPackageReference()
     }
 
     [Fact]
-    public void LeavesOtherSystemPackagesAlone()
+    public void Other_system_packages_are_left_alone()
     {
         // Only System.Security.Cryptography.Xml is the known culprit. Other System.* packages
         // (System.Text.Json etc.) stay as the user pinned them — they're not in any known
diff --git a/tests/Fallout.Migrate.Specs/ScriptRewriterSpecs.cs b/tests/Fallout.Migrate.Specs/ScriptRewriterSpecs.cs
index f9f4956a2..64a3d5d4c 100644
--- a/tests/Fallout.Migrate.Specs/ScriptRewriterSpecs.cs
+++ b/tests/Fallout.Migrate.Specs/ScriptRewriterSpecs.cs
@@ -7,7 +7,7 @@ namespace Fallout.Migrate.Specs;
 public class ScriptRewriterSpecs
 {
     [Fact]
-    public void RewritesDotnetNukeInvocations()
+    public void Dotnet_nuke_invocations_become_dotnet_fallout()
     {
         var result = ScriptRewriter.Rewrite("dotnet nuke Compile");
         result.EditCount.Should().Be(1);
@@ -15,7 +15,7 @@ public void RewritesDotnetNukeInvocations()
     }
 
     [Fact]
-    public void RewritesDotDirectoryReferences()
+    public void Dot_nuke_directory_references_become_dot_fallout()
     {
         var result = ScriptRewriter.Rewrite("""TEMP_DIRECTORY="$SCRIPT_DIR/.nuke/temp" """);
         result.EditCount.Should().Be(1);
@@ -24,21 +24,41 @@ public void RewritesDotDirectoryReferences()
     }
 
     [Fact]
-    public void RewritesLegacyEnvVars()
+    public void Legacy_nuke_env_vars_are_renamed_to_their_fallout_equivalents()
     {
         const string input = """
-                             export NUKE_TELEMETRY_OPTOUT=1
                              $env:NUKE_GLOBAL_TOOL_VERSION = "10.0"
                              """;
 
         var result = ScriptRewriter.Rewrite(input);
-        result.EditCount.Should().Be(2);
-        result.Content.Should().Contain("FALLOUT_TELEMETRY_OPTOUT");
+        result.EditCount.Should().Be(1);
         result.Content.Should().Contain("FALLOUT_GLOBAL_TOOL_VERSION");
     }
 
+    [Theory]
+    [InlineData("export NUKE_TELEMETRY_OPTOUT=1")]         // build.sh
+    [InlineData("""$env:NUKE_TELEMETRY_OPTOUT = "1" """)]  // build.ps1
+    [InlineData("set NUKE_TELEMETRY_OPTOUT=1")]            // build.cmd
+    public void Telemetry_opt_out_line_is_stripped_entirely(string optOutLine)
+    {
+        // Telemetry was removed from Fallout (ADR-0010) — the opt-out is dropped, not renamed
+        // to a dead FALLOUT_TELEMETRY_OPTOUT. Whichever bootstrap script spelled it, the whole
+        // line goes and the surrounding ones are untouched.
+        var input = $"""
+                     export DOTNET_ROLL_FORWARD="Major"
+                     {optOutLine}
+                     dotnet nuke "$@"
+                     """;
+
+        var result = ScriptRewriter.Rewrite(input);
+
+        result.Content.Should().NotContain("TELEMETRY_OPTOUT");
+        result.Content.Should().Contain("DOTNET_ROLL_FORWARD");
+        result.Content.Should().Contain("dotnet fallout");
+    }
+
     [Fact]
-    public void LeavesPlainWordNukeAlone()
+    public void Plain_word_nuke_in_prose_is_left_alone()
     {
         // The word "nuke" in a comment or string isn't a command invocation.
         const string input = "# This was previously a NUKE-based build.";
