-
-
Notifications
You must be signed in to change notification settings - Fork 13
Remove telemetry entirely (ADR-0010) #538
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ChrisonSimtian
wants to merge
3
commits into
Fallout-build:main
Choose a base branch
from
ChrisonSimtian:chore/remove-telemetry
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| # ADR-0010 — Fallout collects no telemetry | ||
|
|
||
| - **Status:** Accepted | ||
| - **Date:** 2026-07-24 | ||
| - **Deciders:** Fallout maintainers | ||
| - **Relates to:** [#79](https://github.com/Fallout-build/Fallout/issues/79) (drop the dead `Microsoft.ApplicationInsights` dependency — subsumed by this decision), the removed `docs/01-getting-started/07-telemetry.md`. | ||
|
|
||
| ## Context | ||
|
|
||
| NUKE shipped a telemetry subsystem (added upstream in 2021): a `[Telemetry]` build extension plus global-tool hooks that gathered anonymous usage data — OS/SDK versions, build shape (target/component counts), hashed repo/commit fingerprints — and sent it to an **Azure Application Insights** instance owned personally by the original maintainer, behind a first-run disclosure/consent flow and a `NUKE_TELEMETRY_OPTOUT` opt-out. | ||
|
|
||
| Fallout inherited all of it, but it has been **inert since the fork**: | ||
|
|
||
| - The Application Insights instrumentation key was matkoch-owned and cannot be reused, so `Microsoft.ApplicationInsights` was dropped from dependencies ([#79](https://github.com/Fallout-build/Fallout/issues/79)) and `TrackEvent` became a stub that discards its inputs. | ||
| - The static constructor short-circuits before the consent flow ever runs — no disclosure prompt, no awareness cookie. | ||
| - Nothing is collected and nothing is transmitted anywhere. | ||
|
|
||
| The scaffolding was nonetheless **kept on purpose**, on the stated intent of wiring up a "Fallout-controlled backend later." That intent never acquired an owner, an endpoint, or a concrete plan — it was a standing *maybe*. Meanwhile the dormant code was a liability: it still assembled usage properties on the hot build path, it carried a re-enable comment that invited someone to flip it back on, and it kept a consumer-facing surface (`FALLOUT_TELEMETRY_OPTOUT`, `FalloutTelemetryVersion`, disclosure copy) alive for a feature that does nothing. | ||
|
|
||
| ## Decision | ||
|
|
||
| **Fallout collects no telemetry — now or as a matter of standing policy for this fork — and the inherited subsystem is removed in full rather than left dormant.** | ||
|
|
||
| - No usage data is gathered, and nothing phones home. A build framework people run in CI and on their own machines should not be a data-collection channel; for a hard-fork rebuilding trust, "we collect nothing" is a simpler and stronger promise than "we collect anonymized data you can opt out of." | ||
| - Because there is nothing to opt out of, there is no opt-out. The `FALLOUT_TELEMETRY_OPTOUT` / legacy `NUKE_TELEMETRY_OPTOUT` env vars and the `FalloutTelemetryVersion` / `NukeTelemetryVersion` MSBuild property are removed along with the code that read them. | ||
| - Dormant scaffolding is not kept "just in case." If Fallout ever wants usage insight, that is a fresh decision requiring its own ADR and an **opt-in**, fully-documented design with a named endpoint and owner — not the revival of this code. | ||
|
|
||
| ### Removed surface | ||
|
|
||
| - The `Telemetry` subsystem (`Telemetry`, `Telemetry.Events`, `Telemetry.Properties`) and the `[Telemetry]` build extension. | ||
| - All call sites: the `[Telemetry]` attribute on `FalloutBuild`, the config-generation hook, and the `setup` / `add-package` / `cake-convert` CLI events. | ||
| - `FALLOUT_TELEMETRY_OPTOUT` / `NUKE_TELEMETRY_OPTOUT`, `FalloutTelemetryVersion` / `NukeTelemetryVersion`, the `FalloutTelemetryDocsUrl` constant, and the test-run opt-out plumbing. | ||
| - The telemetry documentation page. | ||
| - The `fallout migrate` tool now **strips** NUKE's telemetry knobs from migrated projects instead of renaming them to dead `Fallout*` equivalents. | ||
|
|
||
| ## Consequences | ||
|
|
||
| ### Positive | ||
|
|
||
| - **Zero data collection**, and no privacy footgun — the "someone re-enables it incorrectly" path is gone because there is no code to re-enable. | ||
| - Smaller surface: dead code, a dead dependency ([#79](https://github.com/Fallout-build/Fallout/issues/79)), a consent UX, and several consumer-facing knobs all removed. | ||
| - Migrated NUKE projects come out clean — no telemetry-branded cruft carried across. | ||
|
|
||
| ### Negative | ||
|
|
||
| - We forgo the aggregate usage insight telemetry could (in principle) have provided. Accepted: it was never actually flowing, and prioritization has done fine without it. | ||
| - Reintroducing any metrics later means starting from a clean, opt-in design — deliberately more work than flipping a dormant switch. That friction is the point. | ||
|
|
||
| ### Neutral | ||
|
|
||
| - Removing the opt-out env var and the MSBuild property is **not a breaking change**: both only ever gated a no-op, and an unset/unknown env var or MSBuild property is silently ignored — no consumer build errors. The `FALLOUT001` legacy-property warning simply stops firing for `NukeTelemetryVersion`. | ||
| - `DOTNET_CLI_TELEMETRY_OPTOUT` (the **.NET SDK's** telemetry, unrelated to Fallout's) is left in place in the bootstrap scripts and generated CI — we still disable that. | ||
|
|
||
| ## Alternatives considered | ||
|
|
||
| ### A. Keep the scaffolding dormant, wire up a Fallout-owned endpoint later (the prior stance — rejected) | ||
|
|
||
| This is what the code and docs described. **Rejected** because the "later" had no owner, endpoint, or timeline; the dormant code was a live liability (hot-path property assembly, a re-enable invitation, consumer-facing knobs for a no-op); and keeping consent/opt-out machinery for a feature that does nothing is confusing. A future decision to collect data should be made explicitly, not pre-wired. | ||
|
|
||
| ### B. Ship opt-in telemetry with a Fallout endpoint (rejected for now) | ||
|
|
||
| Stand up an opt-in, Fallout-owned analytics pipeline. **Rejected** — no compelling need for a build framework, and it is out of scope for the rebrand/foundation work. Not foreclosed forever: it would require its own ADR superseding this one, and would have to be opt-in by construction. | ||
|
|
||
| ### C. Local-only anonymized stats (rejected) | ||
|
|
||
| Collect stats to a local file for the user's own inspection, never transmitted. **Rejected** as scope creep with no demonstrated demand; nothing stops a consumer from building this themselves via the public build-event hooks. | ||
|
|
||
| ## References | ||
|
|
||
| - [#79](https://github.com/Fallout-build/Fallout/issues/79) — drop the dead `Microsoft.ApplicationInsights` dependency (subsumed here) | ||
| - [docs/agents/conventions.md](../agents/conventions.md) — "No telemetry" convention | ||
| - [docs/migration/from-nuke.md](../migration/from-nuke.md) — telemetry knobs are stripped on migration | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -10,7 +10,7 @@ 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 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. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🤔 Is this necessary? It's not that an AI Agent is gonna reintroduce it magically. |
||
| - **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). | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤔 Those are quite verbose for my taste