## Embedded document handles With default geometry, use Documents::create(path) exclusively for new files and Documents::open(path) for existing files. Custom adapters still use Documents(Database::open(adapter, config)?). ~~~rust use ratdb_document::{Documents, DocumentChange}; use serde_json::json; let mut db = Documents::open("instance.ratdb")?; db.write_batch(vec![ DocumentChange { warren:"site", den:"users", id:"ada", document:Some(json!({"enabled":true})) }, DocumentChange { warren:"site", den:"sessions", id:"sample", document:Some(json!({"user":"ada"})) }, ])?; let user = db.warren("site")?.den("users")?.get("ada")?; ~~~ write_batch is a single atomic upsert/delete write set across dens and warrens, not a read-isolation or conditional transaction API. Limit: 128 distinct IDs across their namespaces, 1 MiB combined encoded bytes, and individual core limits. Duplicates, malformed objects and conflicting IDs fail before publication. Input JSON trees, keys, sorting and serialization use additional RAM. Network batch mode executes each line separately.