"""Closed-set enumerations that drive logic (authorization, privacy, traversal). Open-ended, GEDCOM-extensible vocabularies (event type, name type, source type) are stored as strings instead, so importing real-world files never fails on an unknown tag. """ import enum class TreeVisibility(enum.StrEnum): public = "public" # anyone on the web (anonymous), listed + search-indexable site_members = "site_members" # any authenticated user of this instance unlisted = "unlisted" # anyone with the link (anonymous), not listed/indexed private = "private" # members only (default) class MembershipRole(enum.StrEnum): owner = "owner" editor = "editor" viewer = "viewer" class PersonPrivacy(enum.StrEnum): """Per-person override of the tree's visibility (PRD US-041).""" inherit = "inherit" private = "private" public = "public" class RelationshipType(enum.StrEnum): parent_child = "parent_child" partnership = "partnership" sibling = "sibling" class ParentChildQualifier(enum.StrEnum): """Qualifies a parent_child edge so adoption/donor/blended families are first-class rather than edge cases (ARCHITECTURE ยง5).""" biological = "biological" adoptive = "adoptive" step = "step" foster = "foster" donor = "donor" guardian = "guardian" class CitationConfidence(enum.StrEnum): high = "high" medium = "medium" low = "low" class AuditActorType(enum.StrEnum): user = "user" assistant = "assistant" class TokenPurpose(enum.StrEnum): email_verify = "email_verify" password_reset = "password_reset" class ChangeProposalStatus(enum.StrEnum): pending = "pending" applied = "applied" rejected = "rejected" class ChangeProposalOrigin(enum.StrEnum): assistant = "assistant" # the AI assistant, acting on behalf of a user contributor = "contributor" # an untrusted human edit awaiting moderation