Durable Project semantics Persistence and recovery Remote authority, browser recovery, import safety, soft deletion, normalization, and integrity behavior.
Project schema 10 D1 repository
operators · developers Reviewed for VenueMind 1.0.0
Concern Behavior Authoritative state The Project repository is authoritative when reachable; every accepted snapshot is stored with schema version 10. Recovery cache The browser writes a Project-scoped local copy before each remote save and reports LOCAL when the endpoint is unavailable. Record revision Every authoritative Project record has a server-assigned positive revision and strong ETag. Existing writes require the exact current If-Match value. Reconciliation Base/local/remote comparison merges independent fields once. Overlapping planning state returns PROJECT_REVISION_CONFLICT and remains unsynchronized. Planning recovery The local Proposal is retained in Organization-scoped recovery storage and can become an auditable Recovery Branch on current remote truth. Reload A remote record refreshes the recovery copy; a missing or unavailable endpoint may load the local Project-scoped record. Import Import is create-only. An existing local or remote Project ID returns PROJECT_ID_CONFLICT. Deletion Soft deletion records deletedAt and recoveryUntil; restoration remains available for seven days. Integrity Schema normalization, geometry validation, Lock checks, ledger verification, and replay precede authoritative use.
Creation requires If-None-Match: *; updates require the exact strong Project ETag in If-Match. A stale write returns PROJECT_REVISION_CONFLICT with current record and revision data; it never falls back to a successful LOCAL state. Independent fields reconcile through one bounded three-way retry. Overlapping layout state becomes a human-controlled Recovery Branch or yields to REMOTE. Presence Leases carry User identity, observed Plan Version, and focused stable object for 30 seconds. SSE resumes from a durable per-Project cursor and streams Comment, ledger, Proposal, Approval, and record events. A missing cursor link emits sync.reset and reloads authoritative Project state through ordinary revision conflict rules. Read-only Share Links expose accepted Plan state; Reviewer Share Links expose one retained Proposal revision. Bearer tokens are returned once and persisted only as hashes; durable pending lifecycle states reconcile ledger transitions and fail closed. Creation-time preferences control in-app visibility; leased email outbox rows are delivered only after injected-provider success. Registration Snapshots contain aggregate Ticket Class totals, forecasts, zone allocations, accessibility requirements, and optional event-day Check-in Aggregates. Recursive privacy screening runs before checksums, duplicate storage, dead letters, and atomic webhook replay storage. Ticket Occupancy Reconciliation compares provider aggregates with repository-derived Project and Plan requirements without creating planning effects. Operational Resource Snapshots reconcile live inventory, AV, power, catering, and staffing supply against one exact accepted Plan and trusted event window. Unavailable, double-booked, insufficient, or incompatible bindings produce deterministic conflicts and non-applied compatible options. Only an explicitly selected option becomes a reviewable Resource Binding Proposal; accepted Plan truth remains unchanged until human Approval. @venuemind/sdk publishes canonical schema-derived types and a typed client over the same venue.* tool seam used by WebMCP and MCP. Adapter helpers preserve one runtime-owned idempotency and retry layer, bounded pagination, raw-byte webhook verification, and review-only planning imports. The client intentionally exposes no Approval operation and no whole-snapshot write shortcut.