testsAndMisc/focus_owner/assets/policy.json
Krzysztof kuhy Rudnicki b1de6f8d38 Take the geofence out of YouTube's reach, and pin infakt on
Leaving the house was an off switch. The AWAY branch returned early with
packagesToShow = every installed package, so walking 150m from home
restored YouTube -- which is the exact affordance device owner was
provisioned to remove.

always_blocked_packages is exempt from all four branches: AWAY hides
them, the allowlist loop cannot show them, and the workout release skips
them, because otherwise "go for a run" is the off switch instead. Chrome
is included as a second route to the same content; Firefox stays, and
carries the uBlock filters. Play is deliberately left geofenced so apps
can still be installed away from home -- and a hidden package cannot be
reinstalled from Play anyway.

infakt moves from the allowlist to SYSTEM_NEVER_DISABLE. Allowlisting
only held while it stayed in BOTH the day and night lists, and dropping
it from either would silently make it hideable; isAllowed() consults the
never-disable list before the curfew split, so it now holds under every
condition. It is device-paired to a bank over SMS, so losing it strands
the same re-authentication chain a hidden Messages app would.

The exporter now refuses an always-blocked package that is not also
blockable: the runner filters unopted system packages out of
installedPackages, so such an entry would never be hidden and nothing
would say so.

Verified: 128 Python tests at 100% branch coverage, 16 Kotlin tests, the
new ones canary-checked by breaking an assertion and confirming the
suite actually fails. On device, youtube/music/chrome/vending are
hidden=true, infakt hidden=false, uninstall still refused.

The AWAY path itself is unit-tested but NOT verified on hardware: with
no home_location.json every pass decides LOCATION_UNKNOWN, so the branch
is unreachable on this phone until coordinates can be provisioned.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DqEd1uUhyT52KjaNeLanC
2026-08-10 21:28:25 +02:00

227 lines
6.0 KiB
JSON

{
"allowed_packages": [
"ac.mdiq.podcini.X",
"ch.protonmail.android",
"com.Splitwise.SplitwiseMobile",
"com.anthropic.claude",
"com.aurora.store",
"com.azure.authenticator",
"com.beemdevelopment.aegis",
"com.blackview.launcher",
"com.blackview.launcher.overlay.framework",
"com.bnyro.clock",
"com.discord",
"com.facebook.katana",
"com.facebook.orca",
"com.fitatu.tracker",
"com.fsck.k9",
"com.github.android",
"com.google.android.apps.maps",
"com.google.android.calendar",
"com.google.android.contactkeys",
"com.google.android.gm",
"com.google.android.safetycore",
"com.ichi2.anki",
"com.jksalcedo.librefind",
"com.jwang123.splitbills",
"com.kolejeslaskie.mss",
"com.kuhy.diet_guard_app",
"com.kuhy.dufs_client",
"com.kuhy.epopeja_karta",
"com.kuhy.focus_owner",
"com.kuhy.focusstatus",
"com.kuhy.habit_stack",
"com.kuhy.home_inventory",
"com.kuhy.horatio",
"com.kuhy.pomodoro_app",
"com.kuhy.untools",
"com.kuhy.vaultkitbypass",
"com.kuhy.wake_alarm_sync",
"com.kuhy.workout_app",
"com.kunzisoft.keepass.libre",
"com.machiav3lli.fdroid",
"com.maksimowiczm.foodyou",
"com.metrolist.music",
"com.microsoft.office.outlook",
"com.microsoft.teams",
"com.qqlabs.minimalistlauncher",
"com.rama.teyin",
"com.revolut.revolut",
"com.schwegelbin.openbible",
"com.shazam.android",
"com.sosauce.cutecalc",
"com.stronglifts.app",
"com.topjohnwu.magisk",
"com.tplink.iot",
"com.vayunmathur.camera",
"com.waist.line",
"com.xiaomi.smarthome",
"com.yoshi.rain",
"com.zaneschepke.wireguardautotunnel",
"de.kicktipp.mbookmark",
"de.schildbach.oeffi",
"de.thomaskuenneth.benice",
"dev.kuhy.todo",
"eu.kanade.tachiyomi.sy",
"is.xyz.mpv",
"me.phh.superuser",
"moe.shizuku.privileged.api",
"net.bible.android.activity",
"net.cozic.joplin",
"net.osmand",
"net.thunderbird.android.beta",
"oracle.idm.mobile.authenticator",
"org.connectbot",
"org.fdroid.fdroid",
"org.fossify.contacts",
"org.fossify.messages",
"org.fossify.phone",
"org.mozilla.fenix",
"org.runnerup",
"org.thoughtcrime.securesms",
"pkp.ic.eicmobile",
"pl.infakt.infakt",
"pl.mbank",
"pl.nask.mobywatel",
"pl.orange.mojeorange",
"pl.pkobp.iko",
"pl.plksa.portalpasazera",
"ws.xsoh.etar"
],
"always_blocked_packages": [
"com.android.chrome",
"com.google.android.apps.youtube.music",
"com.google.android.youtube"
],
"blockable_system_packages": [
"com.android.chrome",
"com.android.vending",
"com.google.android.apps.youtube.music",
"com.google.android.videos",
"com.google.android.youtube"
],
"browser_packages": [
"com.android.chrome",
"org.mozilla.fenix"
],
"curfew": {
"end": "05:00",
"start": "23:00"
},
"home": {
"hysteresis_m": 30.0,
"latitude": null,
"longitude": null,
"radius_m": 150.0
},
"launcher_package": "com.qqlabs.minimalistlauncher",
"never_disable_prefixes": [
"android",
"com.android.bluetooth",
"com.android.camera",
"com.android.camera2",
"com.android.captiveportallogin",
"com.android.certinstaller",
"com.android.contacts",
"com.android.dialer",
"com.android.documentsui",
"com.android.emergency",
"com.android.externalstorage",
"com.android.inputmethod",
"com.android.keychain",
"com.android.launcher",
"com.android.launcher3",
"com.android.location",
"com.android.messaging",
"com.android.mms",
"com.android.networkstack",
"com.android.nfc",
"com.android.permissioncontroller",
"com.android.phone",
"com.android.providers",
"com.android.se",
"com.android.settings",
"com.android.shell",
"com.android.systemui",
"com.android.vpndialogs",
"com.android.wifi",
"com.google.android.apps.messaging",
"com.google.android.contacts",
"com.google.android.deskclock",
"com.google.android.dialer",
"com.google.android.ext.services",
"com.google.android.ext.shared",
"com.google.android.gms",
"com.google.android.gsf",
"com.google.android.inputmethod.latin",
"com.google.android.permissioncontroller",
"com.google.android.setupwizard",
"com.google.android.trichromelibrary",
"com.google.android.webview",
"com.mediatek",
"com.qualcomm",
"pl.infakt.infakt"
],
"night_allowed_packages": [
"com.azure.authenticator",
"com.beemdevelopment.aegis",
"com.blackview.launcher",
"com.blackview.launcher.overlay.framework",
"com.bnyro.clock",
"com.fitatu.tracker",
"com.google.android.apps.maps",
"com.google.android.calendar",
"com.google.android.contactkeys",
"com.google.android.safetycore",
"com.kuhy.diet_guard_app",
"com.kuhy.focus_owner",
"com.kuhy.focusstatus",
"com.kuhy.habit_stack",
"com.kuhy.vaultkitbypass",
"com.kuhy.wake_alarm_sync",
"com.kuhy.workout_app",
"com.kunzisoft.keepass.libre",
"com.maksimowiczm.foodyou",
"com.metrolist.music",
"com.qqlabs.minimalistlauncher",
"com.revolut.revolut",
"com.stronglifts.app",
"com.topjohnwu.magisk",
"com.tplink.iot",
"com.waist.line",
"com.xiaomi.smarthome",
"de.thomaskuenneth.benice",
"dev.kuhy.todo",
"me.phh.superuser",
"moe.shizuku.privileged.api",
"oracle.idm.mobile.authenticator",
"org.fossify.contacts",
"org.fossify.messages",
"org.fossify.phone",
"org.runnerup",
"pl.infakt.infakt",
"pl.mbank",
"pl.nask.mobywatel",
"pl.pkobp.iko",
"ws.xsoh.etar"
],
"schema_version": 1,
"workout_unblock_domains": [
"googlevideo.com",
"i.ytimg.com",
"i9.ytimg.com",
"m.youtube.com",
"s.ytimg.com",
"www.youtube-nocookie.com",
"www.youtube.com",
"youtu.be",
"youtube-nocookie.com",
"youtube.com",
"youtube.googleapis.com",
"youtubei.googleapis.com",
"yt3.ggpht.com",
"yt3.googleusercontent.com",
"ytimg.com"
]
}