Remove telemetry entirely (ADR-0010)#538
Conversation
The telemetry feature carried over from NUKE has been inert since the fork: its Application Insights endpoint was the original maintainer's and can't be reused, the client dependency was dropped (Fallout-build#79), and TrackEvent was a stub. It was kept dormant on the intent of wiring up a Fallout-owned backend later — an intent with no owner, endpoint, or plan. Per ADR-0010, Fallout collects no telemetry, so the subsystem is removed rather than left as a dormant liability. Removes the Telemetry classes and the [Telemetry] build extension, every call site (the FalloutBuild attribute, the config-generation hook, and the setup / add-package / cake-convert CLI events), the FALLOUT_TELEMETRY_OPTOUT / NUKE_TELEMETRY_OPTOUT env vars, the FalloutTelemetryVersion / NukeTelemetryVersion MSBuild property (including its legacy lift and FALLOUT001 warning), the FalloutTelemetryDocsUrl constant, and the test-run opt-out plumbing. Not a breaking change: the env var and property only ever gated a no-op, and an unset/unknown one is silently ignored. The .NET SDK's own DOTNET_CLI_TELEMETRY_OPTOUT is left in place. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The migrate tool rewrote NUKE's telemetry knobs to Fallout-branded equivalents: NukeTelemetryVersion → FalloutTelemetryVersion and NUKE_TELEMETRY_OPTOUT → FALLOUT_TELEMETRY_OPTOUT. With telemetry removed (ADR-0010) those targets no longer exist, so renaming would plant dead, telemetry-branded cruft in every migrated project. Drop the rename rules and strip the knobs instead: RewriteCsprojsStep removes the <(Nuke|Fallout)TelemetryVersion> element line, ScriptRewriter removes any (NUKE|FALLOUT)_TELEMETRY_OPTOUT assignment line (bash/pwsh/cmd spellings). Specs updated to assert the knobs are gone rather than renamed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Records the decision that Fallout collects no telemetry — reversing the prior "kept dormant, wire up a Fallout endpoint later" stance — and its rationale, non-breaking impact, and the alternatives (keep dormant / opt-in / local-only) that were rejected. Adds a "No telemetry" convention, drops the now-removed Microsoft.ApplicationInsights row from the dependency overview, updates the from-nuke migration guide to show the telemetry knobs are stripped, and rewords the build-events example that used telemetry as its illustration. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
I think this should go into the release. I dont like people spying on me and the Apps Insights instance is likely dead. |
ITaluone
left a comment
There was a problem hiding this comment.
Yeah.. another cool selling point :D
There was a problem hiding this comment.
Pull request overview
Removes the inherited (and long-inert) telemetry subsystem from Fallout end-to-end, updates migration tooling to strip legacy telemetry knobs rather than renaming them, and records the “no telemetry” policy as ADR-0010.
Changes:
- Delete the Telemetry subsystem + build/CLI hooks, and remove all related knobs (
*_TELEMETRY_OPTOUT,*TelemetryVersion, telemetry docs URL plumbing). - Update
fallout migraterewrites to strip telemetry env-var/property lines instead of rewriting them to Fallout equivalents. - Add ADR-0010 and update docs/conventions to codify “Fallout collects no telemetry”.
Reviewed changes
Copilot reviewed 30 out of 30 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/Fallout.Migrate.Specs/ScriptRewriterSpecs.cs | Updates/extends specs for script rewrites; adds telemetry opt-out stripping assertion. |
| tests/Fallout.Migrate.Specs/RewriteCsprojsStepSpecs.cs | Updates specs to expect telemetry version property removal instead of renaming. |
| tests/Fallout.Migrate.Specs/MigrationIntegrationSpecs.cs | Integration spec now asserts migrated scripts do not contain telemetry opt-out knobs. |
| tests/Fallout.Build.Specs/ExecutionSpecsInitializer.cs | Removes test-run initializer that set the telemetry opt-out env var. |
| src/Fallout.Migrate/Steps/ScriptRewriter.cs | Strips telemetry opt-out lines during script migration; removes legacy rename. |
| src/Fallout.Migrate/Steps/RewriteCsprojsStep.cs | Strips Nuke/FalloutTelemetryVersion MSBuild property during csproj migration. |
| src/Fallout.Common/Fallout.Common.targets | Removes legacy MSBuild property bridging for telemetry version. |
| src/Fallout.Cli/templates/_build.csproj | Removes telemetry version placeholder/property from template project. |
| src/Fallout.Cli/Commands/SetupCommand.cs | Removes telemetry setup + template parameter injection. |
| src/Fallout.Cli/Commands/RunCommand.cs | Stops setting FALLOUT_TELEMETRY_OPTOUT when launching dotnet. |
| src/Fallout.Cli/Commands/CakeConvertCommand.cs | Removes telemetry event emission. |
| src/Fallout.Cli/Commands/AddPackageCommand.cs | Removes telemetry event emission. |
| src/Fallout.Build/Telemetry/Telemetry.Properties.cs | Deletes telemetry property collection implementation. |
| src/Fallout.Build/Telemetry/Telemetry.Events.cs | Deletes telemetry event APIs (BuildStarted/TargetSucceeded/etc.). |
| src/Fallout.Build/Telemetry/Telemetry.cs | Deletes disclosure/consent/opt-out/version plumbing and awareness cookie logic. |
| src/Fallout.Build/FalloutBuild.cs | Removes [Telemetry] build extension attribute usage. |
| src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs | Deletes build extension that emitted telemetry events. |
| src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs | Removes telemetry emission on configuration generation. |
| src/Fallout.Build.Shared/Constants.cs | Removes telemetry docs URL constant. |
| docs/migration/from-nuke.md | Updates migration docs to reflect telemetry knobs are dropped/stripped. |
| docs/dependencies.md | Removes telemetry/dead ApplicationInsights dependency documentation section. |
| docs/agents/conventions.md | Updates repo conventions to explicitly forbid telemetry reintroduction. |
| docs/adr/README.md | Adds ADR-0010 to ADR index. |
| docs/adr/0010-no-telemetry-collection.md | New ADR documenting the no-telemetry decision and consequences. |
| docs/02-fundamentals/04-builds.md | Removes telemetry reference from “cross-cutting concerns” examples. |
| docs/01-getting-started/07-telemetry.md | Removes the telemetry documentation page. |
| build/Build.cs | Removes test-time telemetry opt-out env var injection. |
| build/_build.csproj | Removes FalloutTelemetryVersion property from build project. |
| build.sh | Removes FALLOUT_TELEMETRY_OPTOUT export. |
| build.ps1 | Removes FALLOUT_TELEMETRY_OPTOUT environment variable assignment. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| [Fact] | ||
| public void StripsTelemetryOptOutLineEntirely() | ||
| { | ||
| // Telemetry was removed from Fallout (ADR-0010) — the opt-out is dropped, not renamed | ||
| // to a dead FALLOUT_TELEMETRY_OPTOUT. The surrounding lines are untouched. | ||
| const string input = """ | ||
| export DOTNET_ROLL_FORWARD="Major" | ||
| export NUKE_TELEMETRY_OPTOUT=1 | ||
| 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"); | ||
| } | ||
|
|
dennisdoomen
left a comment
There was a problem hiding this comment.
Just some minor questions and suggestions.
| @@ -0,0 +1,72 @@ | |||
| # ADR-0010 — Fallout collects no telemetry | |||
There was a problem hiding this comment.
🤔 Those are quite verbose for my taste
| - **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 telemetry.** Fallout collects no usage data ([ADR-0010](../adr/0010-no-telemetry-collection.md)). The inherited NUKE telemetry subsystem, its opt-out env var, and the `FalloutTelemetryVersion` property were removed — don't reintroduce any of them. |
There was a problem hiding this comment.
🤔 Is this necessary? It's not that an AI Agent is gonna reintroduce it magically.
| } | ||
|
|
||
| [Fact] | ||
| public void StripsTelemetryVersionProperty() |
There was a problem hiding this comment.
⛏️(nitpick) Would be nice to start follow the new naming conventions, but that's up to you
Gets rid of the telemetry feature inherited from NUKE — for good. Adds ADR-0010 recording the decision that Fallout collects no telemetry, and removes the subsystem in full.
Background
Telemetry has been inert since the fork: the Application Insights endpoint was the original maintainer's (unusable), the client dependency was dropped (#79), and
TrackEventwas a stub. It was kept dormant to "wire up a Fallout-owned backend later" — an intent with no owner, endpoint, or plan. This closes that off: no telemetry, no dormant scaffolding.What's removed
Telemetrysubsystem +[Telemetry]build extension, and every call site (theFalloutBuildattribute, the config-generation hook, thesetup/add-package/cake-convertCLI events).FALLOUT_TELEMETRY_OPTOUT/NUKE_TELEMETRY_OPTOUT,FalloutTelemetryVersion/NukeTelemetryVersion(incl. the legacy lift +FALLOUT001warning), theFalloutTelemetryDocsUrlconstant, the test-run opt-out, and the telemetry docs page.fallout migratenow strips NUKE's telemetry knobs instead of renaming them to deadFallout*equivalents.Compatibility — not a breaking change
The env var and MSBuild property only ever gated a no-op, and an unset/unknown one is silently ignored — no consumer build errors, no behaviour change (telemetry was already off). The .NET SDK's own
DOTNET_CLI_TELEMETRY_OPTOUTis left in place.Commits
Testing
dotnet build fallout.slnxclean. Specs green: Migrate 32, Build 147, CLI 47, Common 131 (+7 unrelated skips).🤖 Generated with Claude Code