{
  "part": 19,
  "title": "Cleanup",
  "reset": "none",
  "_comment": "Structurally inexpressible by design (TESTING_automation.md section 6.2/11): ds()'s trailing-slash rule makes the bare string 'storage/testing' itself unrepresentable, so 'zfs destroy -r storage/testing' has no primitive that could ever express it. This Part is classification=manual and is never executed by the harness in any mode.",
  "steps": [
    { "id": "19.0", "title": "Full environment teardown", "classification": "manual",
      "manual_note": "Run the copy-pasteable teardown block in TESTING_automation.md section 11 by hand once you are done with the sandbox. It destroys storage/testing (or, per the section's other variant, only the scratch children while leaving code/, tmp/, and harness/ intact) and removes /storage/testing. Confirm afterward with 'zfs list -r storage/testing' (should report the dataset no longer exists) and check for stray files outside /storage/testing left by earlier manual TESTING.md runs (/tmp/part*.log, /tmp/target_inventory*.txt, /tmp/upgradetest, /tmp/corrupt.bin*, /tmp/noiv.bin, /tmp/conf_backup_part15.yaml) - this harness itself never wrote to /tmp (see TESTING_automation.md section 9.4), so any of these that exist predate automation." }
  ]
}
