{
  "version": "testplan.v1",
  "app": "Daily Notification Plugin",
  "phases": [
    {
      "id": "phase1",
      "title": "Daily Rollover & Recovery",
      "tests": [
        {
          "id": "phase1_setup",
          "title": "Setup: Pre-flight Checks",
          "purpose": "Verify ADB connection, build app, install, check permissions, and configure plugin.",
          "steps": [
            {
              "id": "p1_setup_s1",
              "title": "Preflight: ADB Connection",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Verify ADB device connected", "Check emulator boot status"],
              "expected": ["ADB device in 'device' state", "Emulator boot completed"],
              "artifacts": []
            },
            {
              "id": "p1_setup_s2",
              "title": "Build App",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Run ./gradlew :app:assembleDebug"],
              "expected": ["APK built successfully", "APK found at expected path"],
              "artifacts": []
            },
            {
              "id": "p1_setup_s3",
              "title": "Install App",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Uninstall existing app (if present)", "Install new APK", "Verify installation"],
              "expected": ["App uninstalled (or not present)", "APK installed successfully", "App in package list"],
              "artifacts": []
            },
            {
              "id": "p1_setup_s4",
              "title": "Launch App & Check Permissions",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app main activity",
                "In app UI, verify:",
                "  • Notifications: ✅ Granted",
                "  • Exact Alarms: ✅ Granted",
                "If not granted, click 'Request Permissions'"
              ],
              "expected": ["App launched", "Permissions granted"],
              "artifacts": ["screenshots/setup_permissions.png"]
            },
            {
              "id": "p1_setup_s5",
              "title": "Configure Plugin",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "In app UI, click 'Configure Plugin'",
                "Wait until both show ✅:",
                "  • ⚙️ Plugin Settings: ✅ Configured",
                "  • 🔌 Native Fetcher: ✅ Configured"
              ],
              "expected": ["Plugin configured", "Native fetcher configured"],
              "artifacts": ["screenshots/setup_configured.png"]
            }
          ]
        },
        {
          "id": "phase1_smoke",
          "title": "Smoke: Schedule One + Verify Pending",
          "purpose": "Validate end-to-end scheduling path and ensure exactly one plugin alarm exists.",
          "steps": [
            {
              "id": "p1_smoke_s1",
              "title": "Preflight",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Check ADB connection", "Verify app installed"],
              "expected": ["ADB connected", "App installed"],
              "artifacts": []
            },
            {
              "id": "p1_smoke_s2",
              "title": "Build + Install App",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Build APK", "Install APK"],
              "expected": ["Build successful", "Install successful"],
              "artifacts": []
            },
            {
              "id": "p1_smoke_s3",
              "title": "Schedule One Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Click 'Test Notification' to schedule for a few minutes in the future"
              ],
              "expected": ["Notification scheduled", "App shows pending count > 0"],
              "artifacts": ["alarms/smoke_after_schedule.txt", "screenshots/smoke_after_schedule.png"]
            },
            {
              "id": "p1_smoke_s4",
              "title": "Verify Exactly 1 Plugin Alarm Exists",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check dumpsys alarm for plugin alarms"],
              "expected": ["Exactly 1 plugin NOTIFICATION alarm found", "No duplicate alarms"],
              "artifacts": ["alarms/smoke_verification.txt"]
            },
            {
              "id": "p1_smoke_s5",
              "title": "Capture Evidence",
              "type": "EVIDENCE",
              "blocking": false,
              "instructions": ["Capture alarms dump", "Capture logcat", "Capture screenshot"],
              "expected": ["Evidence files created"],
              "artifacts": ["alarms/smoke_final.txt", "logs/smoke_final_logcat.txt", "screenshots/smoke_final.png"]
            },
            {
              "id": "p1_smoke_s6",
              "title": "Verdict + Export Summary",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded (PASS/WARN/FAIL)"],
              "artifacts": ["summary.json", "summary.md"]
            }
          ]
        },
        {
          "id": "phase1_test0",
          "title": "Daily Rollover Verification",
          "purpose": "Verify that after a notification fires, the next day's schedule is correctly computed and only ONE alarm exists.",
          "steps": [
            {
              "id": "p1_t0_s1",
              "title": "Capture Initial State",
              "type": "EVIDENCE",
              "blocking": false,
              "instructions": ["Capture alarms dump", "Capture logcat"],
              "expected": ["Evidence files created"],
              "artifacts": ["alarms/test0_initial.txt", "logs/test0_initial_logcat.txt"]
            },
            {
              "id": "p1_t0_s2",
              "title": "Schedule Test Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Schedule a daily notification for a time very soon (e.g., 1-2 minutes from now)"
              ],
              "expected": ["Notification scheduled", "Exactly 1 alarm exists"],
              "artifacts": ["alarms/test0_after_schedule.txt", "screenshots/test0_after_schedule.png"]
            },
            {
              "id": "p1_t0_s3",
              "title": "Advance Time Past Midnight",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Settings → System → Date & time",
                "Disable auto time",
                "Set time to 23:59, then to 00:01"
              ],
              "expected": ["Time advanced past midnight", "Rollover logic triggered"],
              "artifacts": []
            },
            {
              "id": "p1_t0_s4",
              "title": "Observe Rollover Logs",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check logcat for rollover start/end messages"],
              "expected": ["Rollover started log found", "Rollover completed log found"],
              "artifacts": ["logs/test0_rollover_logcat.txt"]
            },
            {
              "id": "p1_t0_s5",
              "title": "Capture Post-Rollover Evidence",
              "type": "EVIDENCE",
              "blocking": false,
              "instructions": ["Capture alarms dump", "Capture logcat", "Capture screenshot"],
              "expected": ["Evidence files created"],
              "artifacts": ["alarms/test0_after_rollover.txt", "logs/test0_after_rollover_logcat.txt", "screenshots/test0_after_rollover.png"]
            },
            {
              "id": "p1_t0_s6",
              "title": "Verify Schedule State",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify next-day schedule"],
              "expected": ["Exactly 1 alarm exists", "Alarm time is for tomorrow (24h later)", "No duplicate alarms"],
              "artifacts": []
            },
            {
              "id": "p1_t0_s7",
              "title": "Verdict",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded (PASS/WARN/FAIL)"],
              "artifacts": []
            },
            {
              "id": "p1_t0_s8",
              "title": "Export Summary",
              "type": "EVIDENCE",
              "blocking": false,
              "instructions": ["Generate summary files"],
              "expected": ["Summary files created"],
              "artifacts": ["summary.json", "summary.md"]
            }
          ]
        },
        {
          "id": "phase1_test1",
          "title": "Force-Stop Recovery - Database Restoration",
          "purpose": "Verify that after force-stop (which clears alarms), recovery uses the database to rebuild alarms on app relaunch.",
          "steps": [
            {
              "id": "p1_t1_s1",
              "title": "Clean Start - Verify No Lingering Alarms",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Check for existing plugin alarms", "Reset app state if needed"],
              "expected": ["No existing plugin alarms", "Clean state confirmed"],
              "artifacts": ["alarms/test1_initial.txt"]
            },
            {
              "id": "p1_t1_s2",
              "title": "Schedule Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Schedule at least one future notification"
              ],
              "expected": ["Notification scheduled", "Alarm exists in system"],
              "artifacts": ["alarms/test1_before_force_stop.txt"]
            },
            {
              "id": "p1_t1_s3",
              "title": "Force Stop App",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Settings → Apps → Daily Notification Test",
                "Force stop the app"
              ],
              "expected": ["App force stopped", "Alarms cleared (on most devices)"],
              "artifacts": ["alarms/test1_after_force_stop.txt"]
            },
            {
              "id": "p1_t1_s4",
              "title": "Relaunch App & Verify Recovery",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Check logs for recovery scenario detection",
                "Verify alarms recreated from database"
              ],
              "expected": ["FORCE_STOP scenario detected", "Alarms recreated", "Recovery successful"],
              "artifacts": ["logs/test1_recovery_logcat.txt", "alarms/test1_after_recovery.txt"]
            },
            {
              "id": "p1_t1_s5",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase1_test2",
          "title": "Schedule Update Verification",
          "purpose": "Verify schedule updates work correctly and preserve one-per-day semantics.",
          "steps": [
            {
              "id": "p1_t2_s1",
              "title": "Schedule Initial Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Launch app", "Schedule notification for time A"],
              "expected": ["Notification scheduled", "1 alarm exists"],
              "artifacts": ["alarms/test2_initial.txt"]
            },
            {
              "id": "p1_t2_s2",
              "title": "Update Schedule",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Update notification to time B"],
              "expected": ["Schedule updated", "Old alarm cancelled", "New alarm scheduled"],
              "artifacts": ["alarms/test2_after_update.txt"]
            },
            {
              "id": "p1_t2_s3",
              "title": "Verify One-Per-Day Semantics",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify only one alarm exists"],
              "expected": ["Exactly 1 alarm exists", "No duplicate alarms"],
              "artifacts": []
            },
            {
              "id": "p1_t2_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase1_test3",
          "title": "Recovery Timeout",
          "purpose": "Verify recovery timeout behavior when alarms cannot be recreated.",
          "steps": [
            {
              "id": "p1_t3_s1",
              "title": "Setup: Schedule Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Launch app", "Schedule notification"],
              "expected": ["Notification scheduled"],
              "artifacts": []
            },
            {
              "id": "p1_t3_s2",
              "title": "Force Stop & Simulate Timeout",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Force stop app", "Wait for timeout period"],
              "expected": ["Timeout detected", "Recovery attempted"],
              "artifacts": ["logs/test3_timeout_logcat.txt"]
            },
            {
              "id": "p1_t3_s3",
              "title": "Verify Timeout Handling",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check logs for timeout messages", "Verify fallback behavior"],
              "expected": ["Timeout logged", "Fallback triggered"],
              "artifacts": []
            },
            {
              "id": "p1_t3_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase1_test4",
          "title": "Invalid Data Handling",
          "purpose": "Verify plugin handles invalid/corrupted data gracefully.",
          "steps": [
            {
              "id": "p1_t4_s1",
              "title": "Inject Invalid Data",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Corrupt database or preferences", "Launch app"],
              "expected": ["Invalid data detected"],
              "artifacts": []
            },
            {
              "id": "p1_t4_s2",
              "title": "Verify Error Handling",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check logs for error messages", "Verify app doesn't crash"],
              "expected": ["Error logged", "App continues running", "Recovery attempted"],
              "artifacts": ["logs/test4_error_logcat.txt"]
            },
            {
              "id": "p1_t4_s3",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        }
      ]
    },
    {
      "id": "phase2",
      "title": "Force Stop Recovery",
      "tests": [
        {
          "id": "phase2_test1",
          "title": "Force Stop – Alarms Cleared",
          "purpose": "Verify force stop detection and alarm rescheduling when alarms are cleared.",
          "steps": [
            {
              "id": "p2_t1_s1",
              "title": "Launch App & Check Plugin Status",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Verify plugin configured",
                "Schedule at least one future notification"
              ],
              "expected": ["Plugin configured", "Notification scheduled"],
              "artifacts": ["alarms/phase2_test1_initial.txt", "logs/phase2_test1_initial_logcat.txt"]
            },
            {
              "id": "p2_t1_s2",
              "title": "Verify Alarms Scheduled",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify exactly 1 plugin alarm"],
              "expected": ["1 plugin alarm exists", "Alarm details visible"],
              "artifacts": ["alarms/phase2_test1_before_force_stop.txt"]
            },
            {
              "id": "p2_t1_s3",
              "title": "Force Stop App",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Settings → Apps → Daily Notification Test",
                "Force stop the app"
              ],
              "expected": ["App force stopped", "Alarms cleared (on most devices)"],
              "artifacts": ["alarms/phase2_test1_after_force_stop.txt"]
            },
            {
              "id": "p2_t1_s4",
              "title": "Check Alarms After Force Stop",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify alarms cleared"],
              "expected": ["0 plugin alarms (or alarms cleared)", "System confirms force stop"],
              "artifacts": []
            },
            {
              "id": "p2_t1_s5",
              "title": "Relaunch App & Verify Recovery",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Check logs for FORCE_STOP scenario",
                "Verify alarms recreated"
              ],
              "expected": ["FORCE_STOP scenario detected", "Alarms recreated", "Recovery successful"],
              "artifacts": ["logs/phase2_test1_recovery_logcat.txt", "alarms/phase2_test1_after_recovery.txt"]
            },
            {
              "id": "p2_t1_s6",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase2_test2",
          "title": "Force Stop – Alarms Intact",
          "purpose": "Verify force stop detection when alarms remain intact (some devices don't clear alarms on force stop).",
          "steps": [
            {
              "id": "p2_t2_s1",
              "title": "Schedule Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Launch app", "Schedule notification"],
              "expected": ["Notification scheduled"],
              "artifacts": ["alarms/phase2_test2_initial.txt"]
            },
            {
              "id": "p2_t2_s2",
              "title": "Force Stop App",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Force stop app"],
              "expected": ["App force stopped"],
              "artifacts": ["alarms/phase2_test2_after_force_stop.txt"]
            },
            {
              "id": "p2_t2_s3",
              "title": "Verify Alarms Intact",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify alarms still exist"],
              "expected": ["Alarms still exist", "No recovery needed"],
              "artifacts": []
            },
            {
              "id": "p2_t2_s4",
              "title": "Relaunch & Verify Behavior",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Launch app", "Check logs", "Verify no duplicate alarms"],
              "expected": ["No duplicate alarms", "Correct behavior"],
              "artifacts": ["logs/phase2_test2_logcat.txt"]
            },
            {
              "id": "p2_t2_s5",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase2_test3",
          "title": "First Launch / No Schedules",
          "purpose": "Verify app behavior on first launch when no schedules exist.",
          "steps": [
            {
              "id": "p2_t3_s1",
              "title": "Fresh Install",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Uninstall app", "Install fresh APK"],
              "expected": ["App installed", "No existing data"],
              "artifacts": []
            },
            {
              "id": "p2_t3_s2",
              "title": "First Launch",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Launch app for first time", "Don't schedule anything"],
              "expected": ["App launches", "No crashes"],
              "artifacts": ["logs/phase2_test3_first_launch_logcat.txt"]
            },
            {
              "id": "p2_t3_s3",
              "title": "Verify No Alarms",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify no alarms scheduled"],
              "expected": ["0 plugin alarms", "No errors"],
              "artifacts": ["alarms/phase2_test3_no_schedules.txt"]
            },
            {
              "id": "p2_t3_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        }
      ]
    },
    {
      "id": "phase3",
      "title": "Boot Recovery",
      "tests": [
        {
          "id": "phase3_test1",
          "title": "Boot with Future Alarms",
          "purpose": "Verify alarms are recreated on boot when schedules have future run times.",
          "steps": [
            {
              "id": "p3_t1_s1",
              "title": "Schedule Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Launch app",
                "Verify plugin configured",
                "Schedule at least one future notification"
              ],
              "expected": ["Notification scheduled", "1 alarm exists"],
              "artifacts": ["alarms/phase3_test1_initial.txt", "logs/phase3_test1_initial_logcat.txt"]
            },
            {
              "id": "p3_t1_s2",
              "title": "Verify Alarms Scheduled",
              "type": "ASSERT",
              "blocking": true,
              "instructions": ["Check alarm count", "Verify alarm details"],
              "expected": ["1 plugin alarm exists", "Alarm time is in future"],
              "artifacts": ["alarms/phase3_test1_before_reboot.txt"]
            },
            {
              "id": "p3_t1_s3",
              "title": "Reboot Emulator",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Reboot emulator (adb reboot)",
                "Wait 30-60 seconds for boot to complete"
              ],
              "expected": ["Emulator rebooted", "Boot completed"],
              "artifacts": []
            },
            {
              "id": "p3_t1_s4",
              "title": "Verify Boot Recovery",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Check logs for boot recovery",
                "Verify alarms recreated",
                "Check alarm count"
              ],
              "expected": ["BOOT scenario detected", "Alarms recreated", "1 alarm exists"],
              "artifacts": ["logs/phase3_test1_boot_recovery_logcat.txt", "alarms/phase3_test1_after_boot.txt"]
            },
            {
              "id": "p3_t1_s5",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase3_test2",
          "title": "Boot with Past Alarms (Missed Alarms)",
          "purpose": "Verify boot recovery handles missed alarms (alarms that should have fired while device was off).",
          "steps": [
            {
              "id": "p3_t2_s1",
              "title": "Schedule Notification in Past",
              "type": "MANUAL",
              "blocking": true,
              "instructions": [
                "Schedule notification for time in past",
                "Or schedule for future, then advance clock past alarm time"
              ],
              "expected": ["Alarm time is in past"],
              "artifacts": ["alarms/phase3_test2_initial.txt"]
            },
            {
              "id": "p3_t2_s2",
              "title": "Reboot Emulator",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Reboot emulator", "Wait for boot"],
              "expected": ["Emulator rebooted"],
              "artifacts": []
            },
            {
              "id": "p3_t2_s3",
              "title": "Verify Missed Alarm Handling",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Check logs for missed alarm detection",
                "Verify next-day schedule created"
              ],
              "expected": ["Missed alarm detected", "Next-day schedule created", "Recovery successful"],
              "artifacts": ["logs/phase3_test2_missed_alarm_logcat.txt"]
            },
            {
              "id": "p3_t2_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase3_test3",
          "title": "Boot with No Schedules",
          "purpose": "Verify boot recovery behavior when no schedules exist.",
          "steps": [
            {
              "id": "p3_t3_s1",
              "title": "Fresh Install (No Schedules)",
              "type": "AUTO",
              "blocking": true,
              "instructions": ["Uninstall app", "Install fresh APK", "Don't schedule anything"],
              "expected": ["App installed", "No schedules"],
              "artifacts": []
            },
            {
              "id": "p3_t3_s2",
              "title": "Reboot Emulator",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Reboot emulator", "Wait for boot"],
              "expected": ["Emulator rebooted"],
              "artifacts": []
            },
            {
              "id": "p3_t3_s3",
              "title": "Verify Boot Recovery (No Action)",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Check logs for boot recovery",
                "Verify no alarms created",
                "Verify no errors"
              ],
              "expected": ["Boot recovery detected", "No alarms created (correct)", "No errors"],
              "artifacts": ["logs/phase3_test3_boot_no_schedules_logcat.txt"]
            },
            {
              "id": "p3_t3_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        },
        {
          "id": "phase3_test4",
          "title": "Silent Boot Recovery (Don't Open App)",
          "purpose": "Verify boot recovery works without opening the app (boot receiver handles recovery).",
          "steps": [
            {
              "id": "p3_t4_s1",
              "title": "Schedule Notification",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Launch app", "Schedule notification"],
              "expected": ["Notification scheduled"],
              "artifacts": ["alarms/phase3_test4_initial.txt"]
            },
            {
              "id": "p3_t4_s2",
              "title": "Reboot Emulator",
              "type": "MANUAL",
              "blocking": true,
              "instructions": ["Reboot emulator", "Wait for boot", "DO NOT open app"],
              "expected": ["Emulator rebooted", "App not launched"],
              "artifacts": []
            },
            {
              "id": "p3_t4_s3",
              "title": "Verify Silent Recovery",
              "type": "ASSERT",
              "blocking": true,
              "instructions": [
                "Check logs for boot receiver activity",
                "Verify alarms recreated without app launch",
                "Wait 10-15 seconds for recovery"
              ],
              "expected": ["Boot receiver triggered", "Alarms recreated", "Recovery successful"],
              "artifacts": ["logs/phase3_test4_silent_recovery_logcat.txt", "alarms/phase3_test4_after_silent_boot.txt"]
            },
            {
              "id": "p3_t4_s4",
              "title": "Verdict + Export",
              "type": "DECISION",
              "blocking": true,
              "instructions": ["Review evidence", "Record verdict"],
              "expected": ["Verdict recorded"],
              "artifacts": ["summary.json"]
            }
          ]
        }
      ]
    }
  ]
}

