# Day One core ontology (Layer A). Plain YAML on purpose: readable with no model, no database, no vendor tool.
# Identifiers are CURIEs in the `dayone:` namespace. Never put names or personal data in an id.
version: 1.0.0
namespace:
  prefix: dayone
  base: https://dayone.defendableos.com/ns/dayone/
  resolvable: true            # ontology terms only; records and evidence are never published here
id_rules:
  pattern: "dayone:<kind>/<uuid4>"
  never_reused: true            # ids stay in the registry as active | merged | erased, forever
  no_personal_data_in_ids: true
  merge: "old id keeps resolving to the survivor; merging two people or properties needs a human"
  disambiguation: >
    Similar names or addresses create CANDIDATES, never merges. Two brokers are the same only on human review of
    non-name evidence (licence record, affiliation history, signed document). Vector or fuzzy similarity is never evidence.
classes:
  - {id: dayone:Person, label: Person, definition: A natural person. Holds roles through relationships, not subclasses.}
  - {id: dayone:Organization, label: Organization, definition: Brokerage, firm, lender, owner entity, regulator, association, vendor.}
  - {id: dayone:Team, label: Team, definition: A group of people operating together, possibly across organizations.}
  - {id: dayone:Property, label: Property, definition: A physical asset or parcel.}
  - {id: dayone:Transaction, label: Transaction, definition: A sale, lease, financing or failed attempt at one.}
  - {id: dayone:Agreement, label: Agreement, definition: A contract; rights may differ by data category.}
  - {id: dayone:Interview, label: Interview, definition: A consented research conversation.}
  - {id: dayone:Question, label: ResearchQuestion, definition: An unanswered question. First-class; never closed by a model's plausible answer.}
  - {id: dayone:Hypothesis, label: Hypothesis, definition: A testable explanation with a falsifier.}
  - {id: dayone:Claim, label: Claim, definition: An attributed proposition. Not a fact.}
  - {id: dayone:Evidence, label: Evidence, definition: A source artifact or observation with a hash and permissions. Not truth.}
  - {id: dayone:Finding, label: Finding, definition: A reviewed conclusion that answers or narrows a question.}
  - {id: dayone:Opportunity, label: Opportunity, definition: A commercial hypothesis derived from findings.}
  - {id: dayone:ModelRun, label: ModelRun, definition: A recorded model execution with exact configuration.}
  - {id: dayone:Review, label: HumanReview, definition: A recorded human approval or correction.}
  - {id: dayone:Proposal, label: Proposal, definition: A non-canonical suggestion (concept, branch, entity, relationship or claim) awaiting review. Models may only create these.}
  - {id: dayone:Branch, label: Branch, definition: A node of the knowledge tree.}
relations:
  # kind: structural relations need evidence unless explicitly exploratory. temporal = carries valid_from/valid_to.
  - {id: dayone:AFFILIATED_WITH, domain: dayone:Person, range: dayone:Organization, temporal: true}
  - {id: dayone:MEMBER_OF, domain: dayone:Person, range: dayone:Team, temporal: true}
  - {id: dayone:REPRESENTS, domain: dayone:Person, range: dayone:Person, temporal: true}
  - {id: dayone:PARTICIPATED_IN, domain: dayone:Person, range: dayone:Transaction, temporal: true}
  - {id: dayone:INVOLVES, domain: dayone:Transaction, range: dayone:Property, temporal: true}
  - {id: dayone:PARTY_TO, domain: dayone:Organization, range: dayone:Agreement, temporal: true}
  - {id: dayone:SUPPORTS, domain: dayone:Evidence, range: dayone:Claim, temporal: false}
  - {id: dayone:CONTRADICTS, domain: dayone:Evidence, range: dayone:Claim, temporal: false}
  - {id: dayone:ASSERTS, domain: dayone:Interview, range: dayone:Claim, temporal: false}
  - {id: dayone:CONCERNS, domain: dayone:Claim, range: dayone:Person, temporal: false, note: "subject matter only; never infers agency or ownership"}
  - {id: dayone:SUPPORTED_BY, domain: dayone:Finding, range: dayone:Evidence, temporal: false}
  - {id: dayone:ANSWERS, domain: dayone:Finding, range: dayone:Question, temporal: false}
  - {id: dayone:TESTS, domain: dayone:Hypothesis, range: dayone:Question, temporal: false}
  - {id: dayone:DERIVED_FROM, domain: dayone:Opportunity, range: dayone:Finding, temporal: false}
  - {id: dayone:RAISES, domain: dayone:Finding, range: dayone:Question, temporal: false}
  - {id: dayone:PROPOSED, domain: dayone:ModelRun, range: dayone:Claim, temporal: false}
  - {id: dayone:APPROVED, domain: dayone:Review, range: dayone:Finding, temporal: false}
  - {id: dayone:IN_BRANCH, domain: "*", range: dayone:Branch, temporal: false}
  - {id: dayone:COLLECTED_FROM, domain: dayone:Evidence, range: dayone:Interview, temporal: false, note: "PROV wasDerivedFrom"}
status_vocabulary:   # SKOS-style controlled vocabulary
  claim: [submitted, supported, contested, verified, superseded, rejected]
  finding: [draft, approved, superseded, retracted]
  evidence_verification: [unverified, integrity_checked, source_authenticated, rejected]
  proposal: [PROPOSED, REVIEWED, ACCEPTED, ACTIVE, REVISED, DEPRECATED, REJECTED]
visibility_levels: [public, internal, client_confidential, firm, broker_private, restricted]
epistemic_types: [observed_fact, assertion, interpretation, inference, estimate, hypothesis]
prov_mapping:
  Evidence: prov:Entity
  ModelRun: prov:Activity
  Review: prov:Activity
  Person: prov:Agent
  COLLECTED_FROM: prov:wasDerivedFrom
  APPROVED: prov:wasAssociatedWith
