{"id":"ftl2-state-add-remove-api","text":"`ftl.state.add()` persists resource metadata to the state file and `ftl.state.remove()` cleans it up, enabling idempotent re-runs and cross-run resource tracking.","truth_value":"IN","source":"entries/2026/05/11/examples-09-hetzner-example_hetzner_web_stack.md","source_url":"","source_hash":"","justifications":[],"dependents":[],"metadata":{"example":"# From ftl2-servercraft/scripts/neoforge.py — persist after provisioning\nftl.state.add(config.name, {\n    \"provider\": \"linode\",\n    \"id\": result[\"instance\"][\"id\"],\n    \"ipv4\": result[\"instance\"][\"ipv4\"],\n    \"label\": config.name,\n    \"type\": config.linode_type,\n    \"region\": config.linode_region,\n})\n\n# From neoforge.py destroy() — clean up after teardown\nftl.state.remove(config.name)"},"explanation":{"steps":[{"node":"ftl2-state-add-remove-api","truth_value":"IN","reason":"premise"}]}}