Skip to content

feat: Adds privacy domain - /data-egress-diligence skill - #142

Draft
MajorLift wants to merge 3 commits into
mainfrom
jongsun/add/privacy-domain
Draft

MajorLift wants to merge 3 commits into
mainfrom
jongsun/add/privacy-domain

Conversation

@MajorLift

@MajorLift MajorLift commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Motivation

Some user data leaves the device by design: a field unmasked in Sentry state, a new MetaMetrics or Segment event property, an error or breadcrumb string that interpolates a user value. When one of these is a defect, nothing announces it. The data is sent irrevocably, no test fails, no user reports it, and the mask list is not something a reviewer thinks to check.

The security domain in #83 is organized around adversaries: someone ships malicious code, reaches a capability they should not, or constructs a URL the wallet did not expect. This failure mode has none. The data is sent as designed, no boundary is crossed, and the defect is that nobody decided it should be, so it gets its own domain.

Overview

A privacy domain with one skill, data-egress-diligence, which triages a change to what user data leaves the device: Sentry state masks in app/scripts/constants/sentry-state.ts, new MetaMetrics and Segment event properties, and error and breadcrumb strings that interpolate user values.

Detection is mechanical and is not the hard part. The mask diff says which fields became visible but not what they hold at runtime, and to a mask a bounded enum looks the same as an account address. So the skill sorts findings into bounded / needs-narrowing / must-not-egress with the evidence for each, and leaves the accept decision to the people who own it.

It is written to be discoverable rather than invoked, because nobody searches for a skill correcting a problem they do not know they have.

Showcase

No trial run yet, so nothing here speaks to its hit rate.

Ships scripts/egress-delta.py, which diffs the outbound surface between two refs so the answer is computed rather than recalled.

One lint-skill-entry warning on this skill, missing recommended section "## Workflow", shared with skills already on main.

Triages a change to what user data leaves the device — Sentry state masks,
new MetaMetrics and Segment properties, error and breadcrumb strings that
interpolate user values. Detection is the mask diff and is mechanical; the
deliverable is what each newly unmasked field holds at runtime, since a
bounded enum and an account address are indistinguishable to the mask.

Its own domain rather than `security`, because the failure mode differs:
security skills each have an adversary, and this one has none. The data is
sent as designed, no boundary is crossed, and the defect is that nobody
decided it should be.

Named for what egresses. Privacy does not; data does.
MajorLift added a commit that referenced this pull request Sep 1, 2026
`data-egress-diligence` and its `CODEOWNERS` line move to #142. This PR is
back to one domain: the three `security` skills that each have an adversary.

Nothing else changes. The extracted skill cites no `knowledge/`, so its
departure leaves no dangling reference, and the security domain's knowledge
file stays with the two skills that cite it.
@MajorLift MajorLift changed the title feat: Separate user-data egress from security into its own privacy domain feat: Adds privacy domain - /data-egress-diligence skill Sep 1, 2026
`safe` was a verdict the skill leaves to the owners, while the bucket's
own criterion is that a type bounds the value. `analytics-instrumentation`
resolves to no skill since the analytics domain became `observability`.
…ction

Sentry requires `consentDecisionMade && optedIn`. Under one shared label,
a diff that drops the decision check but keeps `optedIn` read as the same
protection removed and re-added, and printed no finding.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant