{
  "schema": "zendo.core-ontology-candidate/v1",
  "candidateVersion": "0.1.5",
  "reviewedOn": "2026-10-22",
  "targetCoreRelease": "1.0.0",
  "status": "candidate",
  "productionReady": false,
  "qualifiedScope": [],
  "purpose": "Shared semantic design catalog and release gates; not executable schemas, runtime bindings, new authority or a canonical global ontology release.",
  "documentation": "docs/unified-core-ontology.md",
  "proposedDomainOwner": "Zendo Runtime; acceptance pending",
  "canonicalImports": [
    {
      "owner": "Devgraph / Rolodex",
      "release": "v0.8.0",
      "bundleDigest": "756fe78e49cd2e84baa100d61b0d448efdcd6ea6ce58244bf44021940d413006",
      "namespace": "https://zenith-research.ca/ontology/terms/",
      "entities": [
        {
          "id": "rolodex.Entity",
          "iri": "https://zenith-research.ca/ontology/terms/Entity"
        },
        {
          "id": "rolodex.Person",
          "iri": "https://zenith-research.ca/ontology/terms/Person"
        },
        {
          "id": "rolodex.Agent",
          "iri": "https://zenith-research.ca/ontology/terms/Agent"
        },
        {
          "id": "rolodex.Organization",
          "iri": "https://zenith-research.ca/ontology/terms/Organization"
        }
      ],
      "runtimeAdmission": "No new directory runtime schema or authorization is established by importing these terms."
    }
  ],
  "conventions": {
    "references": "Proposed owner-workspace + kind + opaque local ID; revision required for exact terms. Wire serialization unresolved; preserve all legacy IDs.",
    "actor": "Service-verified acting subject/session is separate from represented guest, directory reference and reported source.",
    "money": "New money values use integer minor units + currency; legacy values retain their existing schema until explicit conversion.",
    "dates": "UTC instants with IANA service timezone; accommodation intent remains date-only until listing policy resolves it.",
    "concurrency": "Owning handler validates expected owner revision; receiver commits capacity changes atomically.",
    "idempotency": "Owner-scoped stable command ID + payload identity; retries do not create duplicate effects.",
    "disclosure": "Grant-scoped projections, recipient/purpose/field limits; revocation does not claim erasure of already delivered facts."
  },
  "entities": [
    {
      "id": "Workspace",
      "module": "foundation",
      "proposedRecordOwner": "operating runtime",
      "meaning": "Authority and storage partition; a peer can host multiple explicitly isolated workspaces.",
      "minimumFields": [
        "id",
        "operatorRef",
        "revision"
      ],
      "references": {
        "operatorRef": [
          "rolodex.Person",
          "rolodex.Organization"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Peer",
      "module": "foundation",
      "proposedRecordOwner": "peer operator",
      "meaning": "Addressable local Zenith application participant; endpoint claims require verified binding.",
      "minimumFields": [
        "id",
        "operatorRef",
        "workspaceRefs",
        "endpointBindingRef",
        "contractVersions",
        "revision"
      ],
      "references": {
        "operatorRef": [
          "rolodex.Person",
          "rolodex.Organization"
        ],
        "workspaceRefs": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ActionDefinition",
      "module": "foundation",
      "proposedRecordOwner": "runtime contract catalog",
      "meaning": "Shared operation metadata for authorized browser and native Hermes access.",
      "minimumFields": [
        "id",
        "version",
        "inputSchemaRef",
        "outputSchemaRef",
        "handlerBindingRef",
        "scopeRuleRef",
        "approvalRuleRef",
        "modeAvailability"
      ],
      "references": {},
      "readiness": "candidate"
    },
    {
      "id": "OperationReceipt",
      "module": "foundation",
      "proposedRecordOwner": "executing runtime",
      "meaning": "Evidence of a particular local command result; not proof of external delivery or booking.",
      "minimumFields": [
        "id",
        "operationRef",
        "commandId",
        "ownerWorkspaceRef",
        "verifiedActorRef",
        "representedPartyRef",
        "agentSessionRef",
        "inputHash",
        "priorRevision",
        "resultRevision",
        "outcome",
        "evidenceRefs",
        "occurredAt",
        "verifiedSubjectBindingRef"
      ],
      "references": {
        "operationRef": [
          "ActionDefinition"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "verifiedActorRef": [
          "rolodex.Entity"
        ],
        "representedPartyRef": [
          "rolodex.Entity"
        ],
        "evidenceRefs": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "EvidenceReference",
      "module": "foundation",
      "proposedRecordOwner": "evidence producer",
      "meaning": "Scoped reference to an artifact, provider observation or external receipt, with its precise evidentiary meaning.",
      "minimumFields": [
        "id",
        "sourceSystem",
        "sourceRef",
        "sourceScope",
        "contentHash",
        "observedAt",
        "meaning",
        "sensitivity"
      ],
      "references": {},
      "readiness": "candidate"
    },
    {
      "id": "GuestProfile",
      "module": "context",
      "proposedRecordOwner": "traveler profile owner; legacy concierge records retain their current ownership",
      "meaning": "An extensible context collection describing one guest: many notes, statements and question-and-answer entries, many topics and character references, and the guest’s own interests. Topic choices and questionnaires remain open; contributors and disclosure remain explicit.",
      "minimumFields": [
        "id",
        "guestRef",
        "ownerWorkspaceRef",
        "revision",
        "topicRefs",
        "provenanceRefs",
        "interestRefs",
        "contextEntryRefs",
        "questionRefs",
        "characterExtensionRefs"
      ],
      "references": {
        "guestRef": [
          "rolodex.Person"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "provenanceRefs": [
          "EvidenceReference"
        ],
        "interestRefs": [
          "Interest"
        ],
        "topicRefs": [
          "ProfileTopic"
        ],
        "contextEntryRefs": [
          "ProfileEntry"
        ],
        "questionRefs": [
          "ProfileQuestion"
        ],
        "characterExtensionRefs": [
          "CharacterReference"
        ]
      },
      "readiness": "candidate",
      "existingRepresentation": "contracts/guest-workspace.schema.json#/$defs/GuestProfile",
      "derivedFields": {
        "interestRefs": "Authorized reverse projection of Interest.contextRef referencing this profile and Interest.subjectRef matching its guestRef. Never a separately writable list.",
        "contextEntryRefs": "Authorized reverse projection of ProfileEntry.profileRef for this profile and guest; records retain their own provenance and revision."
      },
      "deprecatedFields": {
        "characterExtensionRef": "Earlier candidate singular reference. Preserve as a readable alias during adapter overlap; one singular reference maps to a one-element characterExtensionRefs collection. Conflicting singular/plural values require reconciliation. No deployed record is rewritten by this proposal."
      },
      "fieldCardinalities": {
        "id": "1",
        "guestRef": "1",
        "ownerWorkspaceRef": "1",
        "revision": "1",
        "topicRefs": "0..*",
        "provenanceRefs": "0..*",
        "interestRefs": "0..*",
        "contextEntryRefs": "0..*",
        "questionRefs": "0..*",
        "characterExtensionRefs": "0..*"
      },
      "fieldDescriptions": {
        "id": "Stable profile identity; separate from the person it describes.",
        "guestRef": "The one guest described by this profile.",
        "ownerWorkspaceRef": "The authority and storage partition for the profile, preserving legacy concierge-maintained ownership until a verified transfer is accepted.",
        "revision": "Profile record revision; each linked entry and character reference also has its own revision.",
        "topicRefs": "Zero or more open-ended topic definitions used to organize context. A topic label is not itself a claim or an interest.",
        "provenanceRefs": "Evidence about the profile and its accepted revisions; never a substitute for record-level authorship.",
        "interestRefs": "Zero or more guest-scoped interests, exposed as a sharing-filtered reverse view of Interest records. Includes interests in semantic topics as well as properties and offerings.",
        "contextEntryRefs": "Zero or more separately attributed notes, statements or answers. Multiple entries may concern the same topic or mentioned entity.",
        "questionRefs": "Zero or more versioned questions relevant to this profile; a question can be present before it has an answer. No universal questionnaire is fixed.",
        "characterExtensionRefs": "Zero or more character/profile extension references, each with its own source contract, revision, purpose and sharing scope. No single character is implied or selected by default."
      }
    },
    {
      "id": "ProfileTopic",
      "module": "context",
      "proposedRecordOwner": "profile context owner or explicitly attributed definition/contribution owner",
      "meaning": "An open-ended semantic topic for grouping context or identifying an interest. The domain does not prescribe a fixed topic list.",
      "minimumFields": [
        "id",
        "ownerWorkspaceRef",
        "vocabularyRef",
        "label",
        "description",
        "parentTopicRefs",
        "revision",
        "provenanceRefs"
      ],
      "references": {
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "parentTopicRefs": [
          "ProfileTopic"
        ],
        "provenanceRefs": [
          "EvidenceReference"
        ]
      },
      "fieldDescriptions": {
        "label": "A human-readable topic such as an activity, subject or aspect of life; examples do not define a mandatory taxonomy.",
        "vocabularyRef": "Optional namespace/source vocabulary reference; preserve its identity and revision when importing a definition.",
        "parentTopicRefs": "Optional broader topics. Organizing a record beneath a topic does not assert that the guest likes it."
      },
      "fieldCardinalities": {
        "parentTopicRefs": "0..*",
        "provenanceRefs": "0..*",
        "vocabularyRef": "0..1"
      },
      "readiness": "candidate"
    },
    {
      "id": "ProfileQuestion",
      "module": "context",
      "proposedRecordOwner": "profile context owner or explicitly attributed definition/contribution owner",
      "meaning": "A versioned question or prompt about one or more topics or mentioned resources. Questions and answer formats are selected or authored later.",
      "minimumFields": [
        "id",
        "ownerWorkspaceRef",
        "text",
        "topicRefs",
        "aboutRefs",
        "answerFormatRef",
        "revision",
        "provenanceRefs"
      ],
      "references": {
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "topicRefs": [
          "ProfileTopic"
        ],
        "aboutRefs": [
          "ProfileTopic",
          "Property",
          "Offering",
          "Interest",
          "CharacterReference"
        ],
        "provenanceRefs": [
          "EvidenceReference"
        ]
      },
      "fieldDescriptions": {
        "text": "The question as presented, retained with its revision. The presence of a question is not an answer or guest fact.",
        "topicRefs": "Any number of applicable topics; no fixed sections are required.",
        "aboutRefs": "Optional explicit links to the subjects mentioned. Linking does not silently resolve identity from prose.",
        "answerFormatRef": "Optional versioned format for an answer; freeform text is supported in the design, with structured formats admitted through their own contracts."
      },
      "fieldCardinalities": {
        "topicRefs": "0..*",
        "aboutRefs": "0..*",
        "provenanceRefs": "0..*",
        "answerFormatRef": "0..1"
      },
      "readiness": "candidate"
    },
    {
      "id": "ProfileEntry",
      "module": "context",
      "proposedRecordOwner": "profile context owner or explicitly attributed definition/contribution owner",
      "meaning": "One separately versioned and attributed contextual note, statement or answer. Many entries can discuss the same topic or mentioned thing without overwriting each other.",
      "minimumFields": [
        "id",
        "profileRef",
        "guestRef",
        "ownerWorkspaceRef",
        "kind",
        "topicRefs",
        "aboutRefs",
        "questionRef",
        "questionRevision",
        "content",
        "contentContractRef",
        "basis",
        "contributionRefs",
        "guestConfirmationRef",
        "recordedAt",
        "state",
        "revision"
      ],
      "references": {
        "profileRef": [
          "GuestProfile"
        ],
        "guestRef": [
          "rolodex.Person"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "topicRefs": [
          "ProfileTopic"
        ],
        "aboutRefs": [
          "ProfileTopic",
          "Property",
          "Offering",
          "Interest",
          "CharacterReference",
          "ProfileEntry"
        ],
        "questionRef": [
          "ProfileQuestion"
        ],
        "contributionRefs": [
          "OperationReceipt"
        ],
        "guestConfirmationRef": [
          "EvidenceReference"
        ]
      },
      "fieldDescriptions": {
        "kind": "Note, statement or answer. This open context structure does not define the eventual list of profile topics.",
        "questionRef": "Required for an answer; absent for an ordinary note or statement. Several independently attributed answers can reference the same question.",
        "questionRevision": "The exact question revision answered, so a later prompt edit does not silently change the meaning of an earlier answer.",
        "content": "Authored text or structured content under an explicitly versioned content contract; payload schema remains acceptance work.",
        "contentContractRef": "Identifies how to interpret the content; no arbitrary executable extension or automatic remote fetch.",
        "aboutRefs": "Zero or more explicitly linked mentioned subjects or earlier entries. Preserve identity/source uncertainty rather than inferring links.",
        "basis": "Guest-provided, concierge-observation, agent-suggested or unattributed; the actual entering actor comes from contribution receipts.",
        "guestConfirmationRef": "Optional verified guest confirmation tied to this exact entry revision; changes invalidate earlier confirmation.",
        "state": "Active or withdrawn contribution; revision history preserves corrections.",
        "recordedAt": "Recorded timestamp, separate from any effective-time/context metadata."
      },
      "fieldCardinalities": {
        "topicRefs": "0..*",
        "aboutRefs": "0..*",
        "contributionRefs": "1..*",
        "questionRef": "0..1",
        "questionRevision": "0..1",
        "guestConfirmationRef": "0..1",
        "contentContractRef": "0..1"
      },
      "readiness": "candidate",
      "conditionalRules": [
        "kind=answer requires questionRef and questionRevision.",
        "kind=note or statement does not require a question.",
        "profileRef and guestRef must describe the same guest; cross-peer references retain the owning workspace.",
        "Only authorized contributors can record/revise their own permitted contributions; agent proposals cannot overwrite guest-stated or concierge-recorded entries.",
        "Multiple entries or answers may coexist for one topic; do not flatten disagreement or source differences into an unqualified fact."
      ],
      "optionalFields": {
        "effectiveFrom": "When the described context becomes applicable, if known.",
        "effectiveUntil": "Optional applicability end; expiry of a sharing grant remains a separate rule.",
        "language": "Optional language of the authored content."
      }
    },
    {
      "id": "CharacterReference",
      "module": "context",
      "proposedRecordOwner": "profile context owner or explicitly attributed definition/contribution owner",
      "meaning": "One of potentially many external character/profile extensions connected to the guest profile. This is an integration reference, not a locally invented Anema character body.",
      "minimumFields": [
        "id",
        "profileRef",
        "guestRef",
        "ownerWorkspaceRef",
        "sourceSystem",
        "externalRef",
        "sourceContractRef",
        "sourceRevision",
        "purpose",
        "applicabilityScope",
        "provenanceRefs",
        "revision"
      ],
      "references": {
        "profileRef": [
          "GuestProfile"
        ],
        "guestRef": [
          "rolodex.Person"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "provenanceRefs": [
          "EvidenceReference"
        ]
      },
      "fieldDescriptions": {
        "externalRef": "Opaque reference to one character/profile extension; never a secret access credential.",
        "sourceContractRef": "The actual external schema/version, to be inspected and accepted before integration.",
        "sourceRevision": "Exact external revision when pinning content; no hidden refresh of a mutable character changes historical decisions.",
        "purpose": "Why this particular extension is linked; multiple extensions can serve different contexts.",
        "applicabilityScope": "The context in which this reference applies. Linking does not make every extension active for every trip or authorize sharing.",
        "provenanceRefs": "Evidence of who linked it and its source. Access to external content requires a separate permission check."
      },
      "fieldCardinalities": {
        "provenanceRefs": "0..*"
      },
      "readiness": "candidate"
    },
    {
      "id": "SharingGrant",
      "module": "context",
      "proposedRecordOwner": "verified traveler or authorized profile controller",
      "meaning": "Selected-field disclosure permission; distinct from booking authority, marketing and training permission.",
      "minimumFields": [
        "id",
        "subjectRef",
        "recipientRef",
        "resourceRef",
        "fieldSet",
        "purpose",
        "validFrom",
        "expiresAt",
        "revokedAt",
        "revision",
        "decisionEvidenceRef",
        "ownerWorkspaceRef"
      ],
      "references": {
        "subjectRef": [
          "rolodex.Person"
        ],
        "recipientRef": [
          "rolodex.Entity"
        ],
        "resourceRef": [
          "GuestProfile",
          "ProfileEntry",
          "ProfileQuestion",
          "CharacterReference",
          "Interest"
        ],
        "decisionEvidenceRef": [
          "EvidenceReference"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Property",
      "module": "discovery",
      "proposedRecordOwner": "verified property record steward",
      "meaning": "A real-world property used for accommodation or related hospitality services; villa is one possible subtype.",
      "minimumFields": [
        "id",
        "stewardRef",
        "propertySubtype",
        "locationRef",
        "identityEvidenceRefs",
        "revision"
      ],
      "references": {
        "stewardRef": [
          "rolodex.Entity"
        ],
        "identityEvidenceRefs": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "IndexedListing",
      "module": "discovery",
      "proposedRecordOwner": "indexing workspace",
      "meaning": "Sourced discovery record; indexing establishes no inventory control, availability or booking rights.",
      "minimumFields": [
        "id",
        "ownerWorkspaceRef",
        "sourceUrl",
        "retrievedAt",
        "sourceRevision",
        "evidenceRef",
        "propertyRef",
        "matchingStatus",
        "displayProjection",
        "revision"
      ],
      "references": {
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "evidenceRef": [
          "EvidenceReference"
        ],
        "propertyRef": [
          "Property"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Offering",
      "module": "discovery",
      "proposedRecordOwner": "verified supplier workspace",
      "meaning": "Accommodation, service, product delivery or bundle supplied under explicit terms and capacity units.",
      "minimumFields": [
        "id",
        "supplierRef",
        "ownerWorkspaceRef",
        "kind",
        "propertyRef",
        "description",
        "priceBasis",
        "capacityUnit",
        "availabilitySourceRef",
        "termsRef",
        "controlEvidenceRef",
        "revision",
        "bookingEndpointRef"
      ],
      "references": {
        "supplierRef": [
          "rolodex.Person",
          "rolodex.Organization"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "propertyRef": [
          "Property"
        ],
        "controlEvidenceRef": [
          "EvidenceReference"
        ],
        "bookingEndpointRef": [
          "BookingEndpoint"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Interest",
      "module": "discovery",
      "proposedRecordOwner": "traveler or explicitly delegated local workspace",
      "meaning": "The guest’s interest in a semantic topic, property, sourced listing or offering, scoped to a profile or trip. Contributor and reported source stay explicit; liking a topic or resource does not grant booking access.",
      "minimumFields": [
        "id",
        "subjectRef",
        "targetRef",
        "contextRef",
        "sourceEvidenceRef",
        "ownerWorkspaceRef",
        "revision",
        "basis",
        "contributionRefs",
        "guestConfirmationRef"
      ],
      "references": {
        "subjectRef": [
          "rolodex.Person"
        ],
        "targetRef": [
          "IndexedListing",
          "Offering",
          "Property",
          "ProfileTopic"
        ],
        "contextRef": [
          "GuestProfile",
          "Trip"
        ],
        "sourceEvidenceRef": [
          "EvidenceReference"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "contributionRefs": [
          "OperationReceipt"
        ],
        "guestConfirmationRef": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate",
      "fieldDescriptions": {
        "targetRef": "A semantic topic (for example an activity or subject) or a concrete property, listing or offering. This is an explicit interest relation, not every topic mentioned in a note.",
        "contextRef": "The reusable profile or particular trip in which this interest applies.",
        "subjectRef": "The guest whose interest is described; different from the actor who recorded it."
      }
    },
    {
      "id": "BookingEndpoint",
      "module": "access",
      "proposedRecordOwner": "property manager’s service or its authorized direct-booking host",
      "meaning": "The property-manager runtime’s authorized channel interface. A concierge runtime calls this interface; the receiving runtime executes its installed booking plugin against Guesty, another provider backend, or its own direct-booking system. Runtime instances share contracts but not provider credentials or plugin permissions.",
      "minimumFields": [
        "id",
        "operatorRef",
        "propertyRefs",
        "offeringRefs",
        "integrationMode",
        "serviceIdentityRef",
        "publicAddressRef",
        "supportedActionRefs",
        "contractVersions",
        "authorizationBindingRef",
        "evidenceRef",
        "revision"
      ],
      "references": {
        "operatorRef": [
          "rolodex.Person",
          "rolodex.Organization"
        ],
        "propertyRefs": [
          "Property"
        ],
        "offeringRefs": [
          "Offering"
        ],
        "supportedActionRefs": [
          "ActionDefinition"
        ],
        "evidenceRef": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ChannelPolicy",
      "module": "access",
      "proposedRecordOwner": "offering supplier workspace",
      "meaning": "Property-controlled discovery and channel policy; approved channels receive scoped authority to its direct-booking endpoint.",
      "minimumFields": [
        "id",
        "ownerWorkspaceRef",
        "offeringRefs",
        "discoverability",
        "accessMode",
        "permittedActionRefs",
        "revision",
        "bookingEndpointRefs"
      ],
      "references": {
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "offeringRefs": [
          "Offering"
        ],
        "permittedActionRefs": [
          "ActionDefinition"
        ],
        "bookingEndpointRefs": [
          "BookingEndpoint"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ChannelAuthorization",
      "module": "access",
      "proposedRecordOwner": "external authority; application retains only scoped references",
      "meaning": "Application reference to the actual credential-backed authority to interface with a specified property booking endpoint. It is not the credential itself or a substitute verifier.",
      "minimumFields": [
        "id",
        "authorityBindingRef",
        "subjectBindingRef",
        "representedPartyRef",
        "audienceRef",
        "resourceRefs",
        "actionRefs",
        "validityRef",
        "decisionEvidenceRef",
        "bookingEndpointRef"
      ],
      "references": {
        "representedPartyRef": [
          "rolodex.Entity"
        ],
        "audienceRef": [
          "Peer",
          "BookingEndpoint"
        ],
        "resourceRefs": [
          "Offering"
        ],
        "actionRefs": [
          "ActionDefinition"
        ],
        "decisionEvidenceRef": [
          "EvidenceReference"
        ],
        "bookingEndpointRef": [
          "BookingEndpoint"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Trip",
      "module": "planning",
      "proposedRecordOwner": "traveler planning workspace or explicit delegate",
      "meaning": "Planning container linking intent, accommodation and services without implying a confirmed stay.",
      "minimumFields": [
        "id",
        "guestRefs",
        "ownerWorkspaceRef",
        "briefRefs",
        "accommodationRequestRefs",
        "serviceRequestRefs",
        "reservationRefs",
        "revision"
      ],
      "references": {
        "guestRefs": [
          "rolodex.Person"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "briefRefs": [
          "TripBrief"
        ],
        "accommodationRequestRefs": [
          "AccommodationRequest"
        ],
        "serviceRequestRefs": [
          "ServiceRequest"
        ],
        "reservationRefs": [
          "ReservationReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "TripBrief",
      "module": "planning",
      "proposedRecordOwner": "planning workspace",
      "meaning": "Explicit requirements for a particular stay; context is not automatically a hard requirement.",
      "minimumFields": [
        "id",
        "guestRef",
        "tripRef",
        "ownerWorkspaceRef",
        "purpose",
        "destinationRef",
        "localDates",
        "party",
        "budget",
        "requirements",
        "revision"
      ],
      "references": {
        "guestRef": [
          "rolodex.Person"
        ],
        "tripRef": [
          "Trip"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate",
      "existingRepresentation": "contracts/guest-workspace.schema.json#/$defs/TripBrief"
    },
    {
      "id": "Recommendation",
      "module": "planning",
      "proposedRecordOwner": "authoring concierge workspace",
      "meaning": "Authored proposal pinned to a brief revision, including reasons and source evidence.",
      "minimumFields": [
        "id",
        "briefRef",
        "briefRevision",
        "targetRef",
        "reason",
        "authorEvidenceRef",
        "ownerWorkspaceRef",
        "revision"
      ],
      "references": {
        "briefRef": [
          "TripBrief"
        ],
        "targetRef": [
          "IndexedListing",
          "Offering"
        ],
        "authorEvidenceRef": [
          "EvidenceReference"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate",
      "existingRepresentation": "contracts/guest-workspace.schema.json#/$defs/Recommendation"
    },
    {
      "id": "Selection",
      "module": "planning",
      "proposedRecordOwner": "selecting workspace under its authority",
      "meaning": "Choice for further planning; a concierge choice is not verified traveler approval.",
      "minimumFields": [
        "id",
        "recommendationRef",
        "optionRef",
        "selectedByEvidenceRef",
        "ownerWorkspaceRef",
        "revision"
      ],
      "references": {
        "recommendationRef": [
          "Recommendation"
        ],
        "optionRef": [
          "ServiceOption"
        ],
        "selectedByEvidenceRef": [
          "EvidenceReference"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate",
      "existingRepresentation": "contracts/guest-workspace.schema.json#/$defs/Selection"
    },
    {
      "id": "AccommodationRequest",
      "module": "planning",
      "proposedRecordOwner": "requesting workspace",
      "meaning": "Accommodation intent and submitted inquiry; legacy Request Draft maps only to draft intent.",
      "minimumFields": [
        "id",
        "tripRef",
        "guestRef",
        "targetRef",
        "ownerWorkspaceRef",
        "briefRevision",
        "state",
        "revision"
      ],
      "references": {
        "tripRef": [
          "Trip"
        ],
        "guestRef": [
          "rolodex.Person"
        ],
        "targetRef": [
          "IndexedListing",
          "Offering"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ReservationReference",
      "module": "planning",
      "proposedRecordOwner": "provider authoritative record; property-manager runtime owns reconciled projection; concierge receives scoped reference",
      "meaning": "Reference to canonical provider-confirmed accommodation, not an alias for a request or selection.",
      "minimumFields": [
        "id",
        "provider",
        "accountScope",
        "externalReservationId",
        "canonicalSchema",
        "commitmentRef",
        "evidenceRef",
        "sourceRevision"
      ],
      "references": {
        "commitmentRef": [
          "Commitment"
        ],
        "evidenceRef": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate",
      "existingRepresentation": "zendo.canonical.reservation/v1; retain existing Runtime projection contract"
    },
    {
      "id": "ServiceRequest",
      "module": "services",
      "proposedRecordOwner": "requesting concierge or traveler workspace",
      "meaning": "Desired service outcome, optionally attached to a trip or confirmed stay and initially provider-independent.",
      "minimumFields": [
        "id",
        "requesterRef",
        "guestRef",
        "ownerWorkspaceRef",
        "tripRef",
        "reservationRef",
        "category",
        "requirements",
        "requestedWindow",
        "locationRef",
        "quantity",
        "capacityUnit",
        "budget",
        "state",
        "revision"
      ],
      "references": {
        "requesterRef": [
          "rolodex.Entity"
        ],
        "guestRef": [
          "rolodex.Person"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "tripRef": [
          "Trip"
        ],
        "reservationRef": [
          "ReservationReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ServiceOption",
      "module": "services",
      "proposedRecordOwner": "proposing concierge or traveler workspace",
      "meaning": "Candidate offering and selection context for a request; not a provider promise.",
      "minimumFields": [
        "id",
        "requestRef",
        "offeringRef",
        "rationale",
        "ownerWorkspaceRef",
        "revision"
      ],
      "references": {
        "requestRef": [
          "ServiceRequest"
        ],
        "offeringRef": [
          "Offering"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Quote",
      "module": "services",
      "proposedRecordOwner": "supplier workspace",
      "meaning": "Provider-issued snapshot of exact scope, price, time, capacity, cancellation and payment terms.",
      "minimumFields": [
        "id",
        "requestRef",
        "offeringRef",
        "ownerWorkspaceRef",
        "termsHash",
        "money",
        "scope",
        "serviceWindow",
        "capacityQuantity",
        "capacityUnit",
        "expiresAt",
        "state",
        "revision"
      ],
      "references": {
        "requestRef": [
          "ServiceRequest",
          "AccommodationRequest"
        ],
        "offeringRef": [
          "Offering"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Hold",
      "module": "services",
      "proposedRecordOwner": "supplier workspace",
      "meaning": "Authoritative expiring capacity allocation; a hold request is not an active Hold.",
      "minimumFields": [
        "id",
        "quoteRef",
        "ownerWorkspaceRef",
        "capacityResourceRef",
        "quantity",
        "unit",
        "issuedAt",
        "expiresAt",
        "state",
        "revision",
        "evidenceRef"
      ],
      "references": {
        "quoteRef": [
          "Quote"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "evidenceRef": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Approval",
      "module": "services",
      "proposedRecordOwner": "verified traveler or explicitly authorized delegate",
      "meaning": "Decision on exact quote revision and terms, with mandate evidence where delegated.",
      "minimumFields": [
        "id",
        "approvingPartyRef",
        "verifiedActorBindingRef",
        "mandateEvidenceRef",
        "quoteRef",
        "quoteRevision",
        "termsHash",
        "scope",
        "approvedAt",
        "expiresAt",
        "evidenceRef",
        "ownerWorkspaceRef"
      ],
      "references": {
        "approvingPartyRef": [
          "rolodex.Entity"
        ],
        "mandateEvidenceRef": [
          "EvidenceReference"
        ],
        "quoteRef": [
          "Quote"
        ],
        "evidenceRef": [
          "EvidenceReference"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "Commitment",
      "module": "services",
      "proposedRecordOwner": "supplier workspace",
      "meaning": "Provider-acknowledged agreement after current approval, terms and capacity checks.",
      "minimumFields": [
        "id",
        "quoteRef",
        "approvalRef",
        "holdRef",
        "ownerWorkspaceRef",
        "termsHash",
        "acknowledgmentEvidenceRef",
        "paymentEvidenceRefs",
        "state",
        "revision"
      ],
      "references": {
        "quoteRef": [
          "Quote"
        ],
        "approvalRef": [
          "Approval"
        ],
        "holdRef": [
          "Hold"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "acknowledgmentEvidenceRef": [
          "EvidenceReference"
        ],
        "paymentEvidenceRefs": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "FulfillmentRecord",
      "module": "services",
      "proposedRecordOwner": "supplier workspace; counterparty observations retain their own authorship",
      "meaning": "Delivery progress and outcome, including partial or disputed delivery, linked to an agreed commitment.",
      "minimumFields": [
        "id",
        "commitmentRef",
        "ownerWorkspaceRef",
        "outcome",
        "occurredAt",
        "evidenceRefs",
        "operationalTaskRefs",
        "revision"
      ],
      "references": {
        "commitmentRef": [
          "Commitment"
        ],
        "ownerWorkspaceRef": [
          "Workspace"
        ],
        "evidenceRefs": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    },
    {
      "id": "ExchangeMessage",
      "module": "exchange",
      "proposedRecordOwner": "sending workspace; receiving peer owns inbox processing",
      "meaning": "Transport-neutral, authenticated envelope design for scoped commands or observations.",
      "minimumFields": [
        "id",
        "correlationId",
        "causationId",
        "senderPeerRef",
        "recipientPeerRef",
        "contractVersion",
        "resourceRef",
        "ownerRevision",
        "commandId",
        "createdAt",
        "expiresAt",
        "payloadHash",
        "payloadRef",
        "authenticationEvidenceRef"
      ],
      "references": {
        "senderPeerRef": [
          "Peer"
        ],
        "recipientPeerRef": [
          "Peer"
        ],
        "resourceRef": [
          "AccommodationRequest",
          "ServiceRequest",
          "Quote",
          "Hold",
          "Approval",
          "Commitment",
          "FulfillmentRecord",
          "SharingGrant"
        ],
        "authenticationEvidenceRef": [
          "EvidenceReference"
        ]
      },
      "readiness": "candidate"
    }
  ],
  "operations": [
    {
      "id": "profile.update",
      "entity": "GuestProfile",
      "executor": "profile-owner",
      "authorizationRule": "Actual actor/source policy; verified guest-only fields require verified guest authority.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "existingLocalBinding": "guest.update / profile.chunk.update",
      "affectedEntities": [
        "GuestProfile"
      ]
    },
    {
      "id": "sharing.grant",
      "entity": "SharingGrant",
      "executor": "traveler-or-verified-delegate",
      "authorizationRule": "Named recipient, resource, fields and purpose; independent of booking capability.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "SharingGrant"
      ]
    },
    {
      "id": "sharing.revoke",
      "entity": "SharingGrant",
      "executor": "traveler-or-verified-delegate",
      "authorizationRule": "Revoke future access and invalidate scoped shared caches.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "SharingGrant"
      ]
    },
    {
      "id": "interest.record",
      "entity": "Interest",
      "executor": "authorized-contributor",
      "authorizationRule": "A verified guest can record their own interest. A concierge with permission for that guest context may record guest-stated interest or a labeled observation/suggestion. Record the actual actor separately from the subject and reported source; only verified guest evidence can establish guest confirmation. Hermes contributions remain suggestions unless an explicit accepted delegated operation authorizes more.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Interest"
      ]
    },
    {
      "id": "trip.update",
      "entity": "TripBrief",
      "executor": "request-owner",
      "authorizationRule": "Planning authority; material changes invalidate dependent approvals and proposals as specified.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "existingLocalBinding": "brief.update",
      "affectedEntities": [
        "TripBrief"
      ]
    },
    {
      "id": "recommendation.add",
      "entity": "Recommendation",
      "executor": "request-owner",
      "authorizationRule": "Record author and exact brief revision.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "existingLocalBinding": "recommendation.add",
      "affectedEntities": [
        "Recommendation"
      ]
    },
    {
      "id": "selection.choose",
      "entity": "Selection",
      "executor": "request-owner",
      "authorizationRule": "Choose planning option without guest approval or booking side effects.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "existingLocalBinding": "selection.choose",
      "affectedEntities": [
        "Selection"
      ]
    },
    {
      "id": "accommodation.request",
      "entity": "AccommodationRequest",
      "executor": "request-owner",
      "authorizationRule": "Draft and submit are distinct; receiver validates channel access before processing.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "AccommodationRequest"
      ]
    },
    {
      "id": "channel.authorize",
      "entity": "ChannelAuthorization",
      "executor": "authority-boundary",
      "authorizationRule": "Property-operator-authorized secS administration of credentials scoped to its booking endpoint, property and allowed operations; no application grant minting or browser secret exposure.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ChannelAuthorization"
      ]
    },
    {
      "id": "service-request.create",
      "entity": "ServiceRequest",
      "executor": "request-owner",
      "authorizationRule": "Verified requester/delegation and guest scope.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceRequest"
      ]
    },
    {
      "id": "service-request.submit",
      "entity": "ServiceRequest",
      "executor": "request-owner",
      "authorizationRule": "Receiver separately verifies channel and disclosure scope.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceRequest"
      ]
    },
    {
      "id": "service-request.coordinate",
      "entity": "ServiceRequest",
      "executor": "request-owner",
      "authorizationRule": "Reconcile referenced provider records without editing them.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceRequest"
      ]
    },
    {
      "id": "service-request.resolve",
      "entity": "ServiceRequest",
      "executor": "request-owner",
      "authorizationRule": "Record resolution evidence; does not itself confirm a booking.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceRequest"
      ]
    },
    {
      "id": "service-request.withdraw",
      "entity": "ServiceRequest",
      "executor": "request-owner",
      "authorizationRule": "Withdraw intent; existing holds and commitments require separate release/cancellation.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceRequest"
      ]
    },
    {
      "id": "service-option.propose",
      "entity": "ServiceOption",
      "executor": "request-owner",
      "authorizationRule": "Reference an offering; preserve supplier qualification and source.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ServiceOption"
      ]
    },
    {
      "id": "quote.prepare",
      "entity": "Quote",
      "executor": "supplier",
      "authorizationRule": "Draft provider terms without making an issued promise.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Quote"
      ]
    },
    {
      "id": "quote.issue",
      "entity": "Quote",
      "executor": "supplier",
      "authorizationRule": "Verified offering control, exact versioned terms, money and expiry.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Quote"
      ]
    },
    {
      "id": "quote.withdraw",
      "entity": "Quote",
      "executor": "supplier",
      "authorizationRule": "Withdrawal affects availability of quote; existing commitments keep their agreed terms.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Quote"
      ]
    },
    {
      "id": "quote.expire",
      "entity": "Quote",
      "executor": "supplier",
      "authorizationRule": "Authoritative time and explicit expired result.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Quote"
      ]
    },
    {
      "id": "quote.supersede",
      "entity": "Quote",
      "executor": "supplier",
      "authorizationRule": "Issue changed terms separately and require fresh approval.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Quote"
      ]
    },
    {
      "id": "hold.issue",
      "entity": "Hold",
      "executor": "supplier",
      "authorizationRule": "Verify endpoint credentials and channel scope; the authoritative supplier booking system atomically allocates capacity and returns an expiring hold with readback evidence.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Hold"
      ]
    },
    {
      "id": "hold.release",
      "entity": "Hold",
      "executor": "supplier",
      "authorizationRule": "Release provider-owned allocation and acknowledge outcome.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Hold"
      ]
    },
    {
      "id": "hold.expire",
      "entity": "Hold",
      "executor": "supplier",
      "authorizationRule": "Use authoritative time; never revive through delayed replay.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Hold"
      ]
    },
    {
      "id": "commitment.confirm",
      "entity": "Commitment",
      "executor": "supplier",
      "authorizationRule": "Validate endpoint credentials, exact unexpired approval/quote, current capacity, any active hold and required payment evidence; require authoritative booking-system commit and canonical acknowledgment.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Commitment",
        "Hold"
      ]
    },
    {
      "id": "approval.record",
      "entity": "Approval",
      "executor": "traveler-or-verified-delegate",
      "authorizationRule": "Verified authority over exact terms and quote revision; no inference from chat or selection.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Approval"
      ]
    },
    {
      "id": "commitment.cancel-request",
      "entity": "Commitment",
      "executor": "supplier",
      "authorizationRule": "Record authenticated counterparty intent; retain capacity pending provider decision.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Commitment"
      ]
    },
    {
      "id": "commitment.cancel-confirm",
      "entity": "Commitment",
      "executor": "supplier",
      "authorizationRule": "Provider applies exact cancellation terms and acknowledges release; payment reversal remains separate evidence.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Commitment"
      ]
    },
    {
      "id": "commitment.cancel-reject",
      "entity": "Commitment",
      "executor": "supplier",
      "authorizationRule": "Record reason under agreed terms and retain the confirmed commitment.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Commitment"
      ]
    },
    {
      "id": "fulfillment.record",
      "entity": "FulfillmentRecord",
      "executor": "supplier",
      "authorizationRule": "Record partial/disputed/completed outcome and external task evidence; completion is not inferred from task creation.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "FulfillmentRecord"
      ]
    },
    {
      "id": "commitment.fulfill",
      "entity": "Commitment",
      "executor": "supplier",
      "authorizationRule": "Require fulfillment evidence for the exact commitment.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "Commitment"
      ]
    },
    {
      "id": "profile-topic.define",
      "entity": "ProfileTopic",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized definition author; preserve namespace/source and revision without fixing a global topic list.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ProfileTopic"
      ]
    },
    {
      "id": "profile-question.define",
      "entity": "ProfileQuestion",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized question author; version prompt text, subject/topic links and optional answer format.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ProfileQuestion"
      ]
    },
    {
      "id": "profile-entry.record",
      "entity": "ProfileEntry",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized guest or context contributor; preserve actual actor, source, topic/about links and exact question revision for answers.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ProfileEntry"
      ]
    },
    {
      "id": "profile-entry.revise",
      "entity": "ProfileEntry",
      "executor": "authorized-contributor",
      "authorizationRule": "Expected entry revision and contribution ownership; preserve prior content and invalidate any guest confirmation of changed content. Agent suggestions cannot overwrite recorded facts.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ProfileEntry"
      ]
    },
    {
      "id": "profile-entry.withdraw",
      "entity": "ProfileEntry",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized contribution owner or profile controller under accepted policy; retain historical provenance and apply sharing/retention rules.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "ProfileEntry"
      ]
    },
    {
      "id": "profile-character.link",
      "entity": "CharacterReference",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized profile controller; verify subject/source binding, preserve external schema/revision and scope; linking does not authorize reading or sharing external content.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "CharacterReference"
      ]
    },
    {
      "id": "profile-character.unlink",
      "entity": "CharacterReference",
      "executor": "authorized-contributor",
      "authorizationRule": "Authorized profile controller; remove active association without rewriting historical references or implying deletion at the external character source.",
      "bindings": {
        "browser": "required-before-release",
        "nativeHermes": "required-before-release"
      },
      "implementationStatus": "unqualified",
      "requiresOwnerRevision": true,
      "requiresStableCommandId": true,
      "affectedEntities": [
        "CharacterReference"
      ]
    }
  ],
  "stateMachines": [
    {
      "entity": "ServiceRequest",
      "owner": "request-owner",
      "initialStates": [
        "draft"
      ],
      "states": [
        "draft",
        "submitted",
        "coordinating",
        "resolved",
        "withdrawn"
      ],
      "terminalStates": [
        "resolved",
        "withdrawn"
      ],
      "transitions": [
        {
          "from": "draft",
          "to": "submitted",
          "operation": "service-request.submit"
        },
        {
          "from": "submitted",
          "to": "coordinating",
          "operation": "service-request.coordinate"
        },
        {
          "from": "coordinating",
          "to": "resolved",
          "operation": "service-request.resolve"
        },
        {
          "from": "draft",
          "to": "withdrawn",
          "operation": "service-request.withdraw"
        },
        {
          "from": "submitted",
          "to": "withdrawn",
          "operation": "service-request.withdraw"
        },
        {
          "from": "coordinating",
          "to": "withdrawn",
          "operation": "service-request.withdraw"
        }
      ],
      "runtimeEnforcement": "not-qualified",
      "entryOperation": "service-request.create"
    },
    {
      "entity": "Quote",
      "owner": "supplier",
      "initialStates": [
        "draft"
      ],
      "states": [
        "draft",
        "issued",
        "withdrawn",
        "expired",
        "superseded"
      ],
      "terminalStates": [
        "withdrawn",
        "expired",
        "superseded"
      ],
      "transitions": [
        {
          "from": "draft",
          "to": "issued",
          "operation": "quote.issue"
        },
        {
          "from": "issued",
          "to": "withdrawn",
          "operation": "quote.withdraw"
        },
        {
          "from": "issued",
          "to": "expired",
          "operation": "quote.expire"
        },
        {
          "from": "issued",
          "to": "superseded",
          "operation": "quote.supersede"
        }
      ],
      "runtimeEnforcement": "not-qualified",
      "entryOperation": "quote.prepare"
    },
    {
      "entity": "Hold",
      "owner": "supplier",
      "initialStates": [
        "active"
      ],
      "states": [
        "active",
        "consumed",
        "released",
        "expired"
      ],
      "terminalStates": [
        "consumed",
        "released",
        "expired"
      ],
      "transitions": [
        {
          "from": "active",
          "to": "consumed",
          "operation": "commitment.confirm"
        },
        {
          "from": "active",
          "to": "released",
          "operation": "hold.release"
        },
        {
          "from": "active",
          "to": "expired",
          "operation": "hold.expire"
        }
      ],
      "runtimeEnforcement": "not-qualified",
      "entryOperation": "hold.issue"
    },
    {
      "entity": "Commitment",
      "owner": "supplier",
      "initialStates": [
        "confirmed"
      ],
      "states": [
        "confirmed",
        "cancellation-pending",
        "cancelled",
        "fulfilled"
      ],
      "terminalStates": [
        "cancelled",
        "fulfilled"
      ],
      "transitions": [
        {
          "from": "confirmed",
          "to": "cancellation-pending",
          "operation": "commitment.cancel-request"
        },
        {
          "from": "cancellation-pending",
          "to": "cancelled",
          "operation": "commitment.cancel-confirm"
        },
        {
          "from": "cancellation-pending",
          "to": "confirmed",
          "operation": "commitment.cancel-reject"
        },
        {
          "from": "confirmed",
          "to": "fulfilled",
          "operation": "commitment.fulfill"
        }
      ],
      "runtimeEnforcement": "not-qualified",
      "entryOperation": "commitment.confirm"
    }
  ],
  "extensions": [
    {
      "id": "concierge-context-and-planning",
      "source": "contracts/guest-workspace.schema.json",
      "preserves": [
        "Guest",
        "ProfileChunk",
        "ContextReference",
        "PlanningSession",
        "PlanningPoint",
        "PlaceDocument",
        "ShortlistEntry",
        "FitResult",
        "RequestDraft",
        "CaptureSettings",
        "UIWorkspaceState"
      ],
      "rule": "Retain existing contracts; no synthetic identity, consent, preference or booking inferred by migration."
    },
    {
      "id": "anema-character",
      "source": null,
      "status": "alignment-required",
      "rule": "Character is context, not authority; do not invent an Anema wire schema."
    }
  ],
  "releaseGates": [
    {
      "id": "ownership-identity",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "record-operation-schemas",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "migration",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "authorization",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "domain-invariants",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "peer-exchange",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "ui-hermes-conformance",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "privacy",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "operational-qualification",
      "status": "open",
      "evidenceRefs": []
    },
    {
      "id": "release-provenance",
      "status": "open",
      "evidenceRefs": []
    }
  ],
  "sources": [
    {
      "id": "rolodex",
      "path": "contracts/imports/rolodex/v0.8.0/ontology.jsonld",
      "sha256": "afd935f58e1a0ec2af090cf4d09f5e14a83c62e1280d96390d2ec2a75d648c95",
      "scope": "inspected-existing-contract; not proof of core implementation"
    },
    {
      "id": "rolodex-context",
      "path": "contracts/imports/rolodex/v0.8.0/context.jsonld",
      "sha256": "bcb4c213b415cc4058361d7c6dbf28b90cb40a39d53ebefe506990c8dca91d6c",
      "scope": "inspected-existing-contract; not proof of core implementation"
    },
    {
      "id": "rolodex-notes",
      "path": "contracts/imports/rolodex/v0.8.0/rolodex.md",
      "sha256": "996e8d30c4b96e11f3cc3f74079f32f84b6ff1a121cd363e550b424264ea4eb3",
      "scope": "inspected-existing-contract; not proof of core implementation"
    },
    {
      "id": "concierge-records",
      "path": "contracts/guest-workspace.schema.json",
      "sha256": "5949a020e6f4352a326fc5253c3a3fff96853d0c55c21906af8799b71925d376",
      "scope": "inspected-existing-contract; not proof of core implementation"
    },
    {
      "id": "concierge-semantics",
      "path": "contracts/concierge-ontology.jsonld",
      "sha256": "19abd6e005c35a2e13c59063b67a9ff5842aa09d67654b1257dd0133fc61d67d",
      "scope": "inspected-existing-contract; not proof of core implementation"
    }
  ],
  "nonClaims": [
    "No live booking, messaging, payment or hold implementation is added.",
    "No authenticated traveler/delegate identity or peer synchronization is qualified.",
    "No global canonical namespace or secS credential schema is minted.",
    "Structural conformance tests do not prove business implementation, formal verification or production readiness."
  ],
  "propertySubtypes": [
    {
      "id": "house",
      "label": "House",
      "parent": "Property",
      "meaning": "A residential house offered as a whole or through explicit accommodation units."
    },
    {
      "id": "apartment",
      "label": "Apartment",
      "parent": "Property",
      "meaning": "An apartment or condominium; bookable unit scope belongs to its offering."
    },
    {
      "id": "villa",
      "label": "Villa",
      "parent": "Property",
      "meaning": "A villa is a subtype of Property and has no special booking authority."
    },
    {
      "id": "chalet",
      "label": "Chalet",
      "parent": "Property",
      "meaning": "A chalet or mountain residence."
    },
    {
      "id": "estate",
      "label": "Estate",
      "parent": "Property",
      "meaning": "A larger property whose bookable spaces must be explicitly identified."
    },
    {
      "id": "other",
      "label": "Other / unclassified",
      "parent": "Property",
      "meaning": "Preserve an unknown or different property type without inferring a classification."
    }
  ],
  "bookingBoundary": {
    "authority": "property-direct-booking-system",
    "integrationModes": [
      "runtime-adapter",
      "direct-server"
    ],
    "channelMeaning": "credential-backed endpoint access",
    "credentialStorage": "existing trusted local credential/authority boundary; no raw secrets in ontology records or guest views",
    "audienceRule": "Bind the actual verified credential to the exact target service and property/action scope; descriptive audience references do not grant authority.",
    "sourceOfTruth": "The concierge runtime calls the property-manager runtime’s authorized channel operation. That runtime invokes its installed Guesty/direct-booking plugin, reconciles the backend result and returns a scoped response.",
    "migration": "Additive candidate concepts and references; retain earlier Peer audience references and bind them explicitly to an endpoint through an adapter before admission.",
    "executionOwner": "property-manager-service",
    "providerCredentialCustody": "property-manager-service",
    "conciergeScope": "Discovery, traveler context and coordination through the manager-authorized channel API; no implied Guesty adapter, account-admin or raw provider access.",
    "runtimeTopology": "Both participants run instances of the shared runtime with different roles, profiles, permissions and installed plugins.",
    "pluginPlacement": "The booking-provider plugin executes inside the property-manager runtime boundary; the concierge does not invoke that plugin or obtain its backend credentials.",
    "integrationModeMeaning": "Backend connection modes for the manager-installed plugin. A self-hosted booking backend does not imply a concierge bypass around the manager runtime."
  },
  "interestContributionPolicy": {
    "profileRelationship": "GuestProfile.interestRefs is a derived reverse projection of Interest.contextRef, filtered by guest identity, source/status and viewer sharing scope.",
    "subject": "Interest.subjectRef identifies whose interest is described, not who entered it.",
    "basisValues": [
      "guest-provided",
      "concierge-observation",
      "agent-suggested",
      "unattributed"
    ],
    "guestContribution": "Verified guest authorship requires a verified guest actor bound to this subject.",
    "conciergeContribution": "An authorized concierge can record a guest statement with guest-provided basis; observations and suggestions stay labeled and cannot be silently promoted to a guest-stated favorite.",
    "agentContribution": "Suggestions retain agent attribution; no inferred guest approval or confirmation.",
    "confirmation": "guestConfirmationRef is absent/null until evidence of the verified guest’s confirmation of this exact interest revision exists; material edits invalidate old confirmation.",
    "projection": "Guest-confirmed or guest-stated interests and unconfirmed observations/suggestions are distinguishable in reads; private concierge observations are not automatically shared into a guest-owned profile.",
    "scope": "Interests can target an open semantic ProfileTopic or a concrete Property, IndexedListing or Offering. Notes and answers may mention a topic without asserting an interest in it.",
    "implementationStatus": "Candidate relationship only; existing concierge profile chunks remain the implemented local contribution workflow, with no verified guest confirmation."
  },
  "profileContextModel": {
    "topicPolicy": "Open-ended, versioned topic definitions. The existing prompted sections are one optional template, not the universal ontology.",
    "entryKinds": [
      "note",
      "statement",
      "answer"
    ],
    "questionPolicy": "Questions may be authored or selected later; answers pin their question revision and retain individual provenance.",
    "multiplicity": "A profile has zero or more entries, topics, questions, interests and character references. Multiple entries per topic/question and multiple character extensions can coexist.",
    "characterCompatibility": "characterExtensionRef remains a deprecated singular candidate alias during adapter overlap. The plural characterExtensionRefs is the intended relationship.",
    "migration": "Preserve existing ProfileChunk IDs, prompts, source, actor and revision. Map them through an explicit accepted adapter; do not synthesize guest facts or convert every topic mention into an Interest."
  }
}
