Mischief Manager is exploring an ethical ad filter: user-controlled sensitivity aligned to the v1 taxonomy (taxonomy-v1.md), versioned policy JSON, and optional SusLink URL signals—without claiming inference of mental health status.
We need one v1 MVP track that balances:
Three slices were compared:
| Track | Summary |
|---|---|
| A — DNS / VPN | Device-wide filtering by steering DNS or tunneling traffic (mostly Android-feasible; iOS via Network Extension / VPN-style UX). |
| B — Browser / WebView | Filtering only where we control rendering (embedded WebView, companion browser, or extension-class surfaces). |
| C — Research export | Opt-in evidence bundles (evidence-bundle-v1.md) for accountability and research—not a consumer “ad blocker” by itself. |
| Dimension | Track A (DNS / VPN) | Track B (Browser / WebView) | Track C (Research export) |
|---|---|---|---|
| Android — system-wide reach | Strong: VpnService / private DNS patterns can cover most apps’ DNS lookups; still imperfect for hard-coded IPs, non-DNS paths, or encrypted first-party ad delivery inside apps. |
Narrow: Only pages rendered in surfaces we own (WebView, in-app browser, etc.). | N/A (no blocking). |
| iOS — system-wide reach | Constrained: Consumer-grade “filter everything” generally implies Network Extension (VPN-style) with Apple review, battery/background limits, and clear user consent. DNS-only profiles are not a casual App Store pattern for arbitrary third-party filtering. | Narrow but viable: WKWebView and app-controlled navigation; Safari coverage may require Content Blocker extensions or separate distribution—additional spikes. | N/A (no blocking). |
| HTTPS / in-app ads | DNS blocks domains; cannot inspect TLS payloads inside arbitrary apps without unacceptable MITM. | Can apply policy at resource/navigation layer inside our Web stack; no claim on other apps’ TLS. | N/A. |
| Store / policy risk | Higher: VPN/networking apps face stricter review, “what data do you see?” questions, and user trust bar. | Moderate: standard app + WebView; extensions add channel-specific rules. | Lower if export is explicit, local-first, and consent-gated. |
| Track | Sensitive data exposure | User trust story |
|---|---|---|
| A | VPN/DNS path can observe destinations and timing for broad traffic (metadata). Must be crystal-clear on retention, logging, and whether any server sees queries. | “We route your network” is a high trust ask even if payload is not decrypted. |
| B | Can keep adjudication on-device for URLs the Web surface loads; optional SusLink calls only with explicit consent (see suslink-integration-spike.md). |
Smaller blast radius: “only pages you open in this layer.” |
| C | Exports are user-initiated; schema can minimize PII; strongest alignment with accountability narrative. | Strong for research and policy; weak alone for day-to-day protection. |
| Track | Rough v1 effort shape | Why |
|---|---|---|
| A | Slower: networking edge cases, entitlements, store narrative, kill-switch UX, iOS NE packaging. | High leverage later; poor “first ship” if policy/UI are still moving. |
| B | Faster: policy engine + tier UI + WebView/browser shell + policy distribution. | Validates taxonomy and “why this was blurred” UX early. |
| C | Parallel-friendly: schema + export UI + signing/integrity notes. | Builds accountability without blocking scope creep. |
Primary MVP: Track B — Browser / WebView ethical layer.
In parallel (not a substitute): Track C — evidence bundle for opt-in accountability exports (evidence-bundle-v1.md), so v1 ships both protection in controlled web surfaces and documentability for users who want it.
Deferred: Track A (DNS / VPN) is not the v1 centerpiece; revisit as a possible ADR-002 once policy JSON, rule engine, and UX are stable—especially for Android power users.
The following are out of scope for the first shippable ethical-filter MVP, unless a future ADR explicitly adopts them:
suslink-integration-spike.md).