Harden reporter telemetry privacy projection - #5990
Harden reporter telemetry privacy projection#5990Sean Larkin (TheLarkInn) wants to merge 5 commits into
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d6318e80-5da9-4858-a147-817e8692f10e
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d6318e80-5da9-4858-a147-817e8692f10e
|
Independent review found one mixed-privacy regression in the initial patch: secret diagnostic envelopes were dropping the explicitly public diagnostic code/category fields. Commit e7d7c41 restores those allowlisted fields while continuing to exclude non-public producer identity, protocol, lifecycle, parameters, and other payload values. Local validation: reporter clean build, all 293 reporter tests, focused telemetry tests, and |
|
Combined deep review of current head MEDIUM Required fix: validate codes against the registry, restrict categories to known values or |
Validate non-public diagnostic codes against the registry, bucket unknown categories, and bound retained telemetry dimensions deterministically. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d6318e80-5da9-4858-a147-817e8692f10e
|
Fixed in Validated reporter build with TypeScript, ESLint, and API Extractor; focused TelemetrySubscriber tests; all 296 reporter tests; |
|
Four-review rerun on
Useful low follow-ons include exact category-cap handling, category derivation for non-public diagnostics, deterministic category ordering, and explicit child-diagnostic attribution. Auto-merge remains disabled pending another fix and review round. |
Keep protocol metadata root-owned, gate mixed-privacy diagnostics, and bound producer attribution with trusted deterministic retention. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d6318e80-5da9-4858-a147-817e8692f10e
|
Fixed the round-two findings in Validated the reporter build with TypeScript, ESLint, and API Extractor; 15 focused TelemetrySubscriber tests; all 299 reporter tests; |
|
Four-review rerun on Required fix: derive priority from trusted provenance such as root-session ownership, not namespace text. Add spoofed-prefix flood coverage. Auto-merge remains disabled. |
Derive bounded producer retention priority from parent-session provenance instead of child-controlled package namespaces. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d6318e80-5da9-4858-a147-817e8692f10e
|
Fixed the final producer-priority finding in Added root-first and root-last spoofed-prefix floods in forward and reverse order, oversized parent and child values, and child attribution coverage. Reporter build, ESLint, API Extractor, all 299 reporter tests, |
|
Final combined review of Dismissible low follow-ons: always derive a registered public diagnostic category from the registry, expose aggregate truncation indicators, and defensively handle impossible non-positive hard-coded budgets. This head is low-only and eligible for normal repository gates. |
|
Ian Clanton-Thuon (@iclanton) David Michon (@dmichon-msft) This independent privacy root is full-CI green, low-only after repeated review, and auto-merge enabled. Approval is the only remaining gate, and it blocks the AI qualification rollout prerequisite. |
Summary
publicenvelopespublicenvelopes while preserving explicitly allowlisted diagnostic codes/categories fromlocal-sensitivediagnosticssecretdiagnostics and add mixed-order regression coverage for public, local-sensitive, and secret first-party/extension eventsReview context
关注-up to #5867 (comment).
Threat model
TelemetrySubscriberobserves canonical events before reporter filtering. A private extension or internal plugin can therefore place a private package name/version in envelope source metadata even when the event is classifiedlocal-sensitiveorsecret. This change treats source/protocol metadata and lifecycle payload fields as telemetry-safe only forpublicenvelopes. Extension payloads remain outside the projection,secretevents contribute no values, and the existing field-level allowlist for public diagnostic code/category data remains intact.Validation
rushx _phase:buildrushx _phase:test(293 tests passed)rush change --verifyNon-goals
rush-libupload stackPart of #5977