{
  "intent": "Fix YouTube blocking in phone_focus_mode: Android 13 netd caches /etc/hosts in memory at startup and never re-reads from disk, so bind mounts alone do not update the live DNS resolver. Restart netd once after applying the bind mount to reload the cache.",
  "scope": [
    "phone_focus_mode/hosts_enforcer.sh",
    "phone_focus_mode/deploy.sh",
    "phone_focus_mode/dns_enforcer.sh",
    "phone_focus_mode/config.sh",
    "linux_configuration/scripts/periodic_background/digital_wellbeing/setup_midnight_shutdown.sh",
    "python_pkg/screen_locker/_shutdown.py",
    "python_pkg/steam_backlog_enforcer/library_hider.py",
    "python_pkg/wake_alarm/install.sh"
  ],
  "changes": [
    "Added restart_netd_for_hosts_cache() to hosts_enforcer.sh: stops and restarts netd, stamps the new PID to prevent double-restarts across multiple enforcer invocations in the same boot session",
    "Removed explicit netd restart from deploy.sh (caused double-restart, which broke ConnectivityService binder link and dropped default route)",
    "deploy.sh now waits 10s after starting focus_daemon.sh so hosts_enforcer.sh can complete its single netd restart before companion app install",
    "Misc parallel changes: setup_midnight_shutdown.sh, dns_enforcer.sh, config.sh, screen_locker/_shutdown.py, library_hider.py, wake_alarm/install.sh"
  ],
  "verification": [
    {
      "command": "adb -s BL9000EEA0000102 shell 'ping -c 1 -w 5 google.com 2>&1 | head -2'",
      "result": "PING google.com (142.250.109.100) 56(84) bytes of data. — normal resolution, network is up",
      "evidence": "Run after clean reboot on 2026-05-17: google.com resolved to 142.250.109.100 with 22.9ms RTT"
    },
    {
      "command": "adb -s BL9000EEA0000102 shell 'ping -c 1 -w 5 www.youtube.com 2>&1 | head -2'",
      "result": "PING www.youtube.com (127.0.0.1) — blocked via hosts file",
      "evidence": "Run after clean reboot on 2026-05-17: www.youtube.com resolved to 127.0.0.1 (0.0.0.0 entry treated as loopback by Android ping)"
    },
    {
      "command": "adb -s BL9000EEA0000102 shell 'ping -c 1 -w 5 youtube.com 2>&1 | head -2'",
      "result": "PING youtube.com (127.0.0.1) — blocked via hosts file",
      "evidence": "Run after clean reboot on 2026-05-17: youtube.com resolved to 127.0.0.1 confirming 0.0.0.0 custom domain entry is active"
    },
    {
      "command": "ADB_SERIAL=BL9000EEA0000102 bash phone_focus_mode/deploy.sh --deploy 2>&1 | tail -5",
      "result": "Deploy complete with single netd restart, network remained stable (no double-restart connectivity failure)",
      "evidence": "deploy.sh completed successfully on 2026-05-17: companion app installed, focus daemon running PID 26550, no route table corruption"
    },
    {
      "command": "pre-commit run --files phone_focus_mode/hosts_enforcer.sh phone_focus_mode/deploy.sh",
      "result": "All hooks passed (shellcheck, codespell, etc.)",
      "evidence": "pre-commit run on 2026-05-17 returned all Passed with zero failures on the two primary changed files"
    }
  ],
  "risks": [
    "netd restart causes ~4 second network pause on each fresh deploy — acceptable for a manual deploy workflow",
    "If netd is restarted by something else between hosts_enforcer startup and the PID-stamp write, the stamp may capture the wrong PID and skip a needed restart on the next enforcer run",
    "FOCUS_BOOT_AUTOSTART=0 means hosts_enforcer does not run at boot; blocking relies solely on the Magisk module (which is correct and verified, but means the enforcer netd-restart path is not exercised at boot)"
  ],
  "rollback": [
    "Revert hosts_enforcer.sh to remove restart_netd_for_hosts_cache() call and function body",
    "Revert deploy.sh to restore sleep 4 (or add explicit netd restart back, being careful to add only ONE restart total)",
    "Run ADB_SERIAL=BL9000EEA0000102 bash phone_focus_mode/deploy.sh --deploy to redeploy previous version"
  ]
}
