🌿 Branches & Namespaces

Schema branches for "what-if" analysis; namespace handles for the search-developer shape.

Schema branches (copy-on-write forks)

client.create_schema_branch("hypothesis-bribery", from_branch="main")
# {"created": True, "branch": "hypothesis-bribery", "source": "main"}
 
# Ingest alternative theories into the branch, run queries, compare.
# Then either merge or delete:
client.delete_schema_branch("hypothesis-bribery")
# {"deleted": True}
docs = client.namespace("CaseDoc")
 
# Schemaless upsert (POST /ingest/auto — auto-creates the type if absent).
docs.write([
    {"id": "memo1", "title": "Bribery hypothesis",
     "body": "Pacific Trust may be a kickback conduit.", "status": "draft"},
], schema={"title": "text", "body": "text"})
 
# Typed ranked search — text compiles to BM25; filters narrow server-side.
res = docs.query(
    text="bribery kickback",
    match_column="title",
    filters=[{"field": "status", "op": "eq", "value": "draft"}],
    limit=5,
)
for row in res:
    print(row["title"])
 
docs.get("memo1")           # point lookup
docs.delete_all()           # governed bi-temporal tombstone every row
docs.branch_from("CaseDoc") # T10 copy-on-write namespace branch

One client, one connection pool, reused across every namespace. Governance (auth, tenant, purpose) travels in the substrate.


Next: System & Cluster Ops — cluster topology/rebalance, SSE observe stream, webhooks, Arrow Flight, gRPC.