version: 1
project_id: example-obo-ontology
root_ontology: http://purl.obolibrary.org/obo/example.owl
# '.' is the directory that contains .protege-mcp/ (or the policy's own directory elsewhere).
project_root: .

interoperability:
  profile: https://hakjuoh.github.io/protege-mcp/profiles/project-v1/
  additional_profiles: []
  root_artifact: example-edit.owl
  metadata:
    path: ro-crate-metadata.json
    format: ro-crate-1.1
  canonicalization:
    algorithm: RDFC-1.0
    hash: SHA-256
    scope: root-ontology
    timeout_ms: 120000

prefixes:
  EXAMPLE: http://purl.obolibrary.org/obo/EXAMPLE_
  IAO: http://purl.obolibrary.org/obo/IAO_
  oboInOwl: http://www.geneontology.org/formats/oboInOwl#
  rdfs: http://www.w3.org/2000/01/rdf-schema#
  skos: http://www.w3.org/2004/02/skos/core#

entity_search:
  preferred_properties: [rdfs:label, skos:prefLabel]
  synonym_properties: [skos:altLabel, oboInOwl:hasExactSynonym, oboInOwl:hasRelatedSynonym]
  preferred_languages: [en]
  fallback_languages: [und]

filesystem:
  allow_external_paths: false
audit:
  retention_days: 90
  max_file_bytes: 10485760
  max_files: 10
network:
  default: deny
  allowed_hosts: []

modules:
  - ontology_iri: http://purl.obolibrary.org/obo/example.owl
    path: example-edit.owl
    owned_namespaces:
      - http://purl.obolibrary.org/obo/EXAMPLE_

reasoning:
  # The standalone 0.7.2 runner bundles HermiT; owl_profile still enforces the OBO-oriented EL subset.
  reasoner: HermiT
  owl_profile: EL
  required: true
  timeout_ms: 120000

annotations:
  labels:
    properties: [rdfs:label]
    required_languages: [en]
    one_preferred_per_language: true
  definitions:
    properties: ['IAO:0000115']
    required: true
    required_languages: [en]
  required: ['oboInOwl:hasDbXref']

iri_policy:
  required_namespaces:
    - http://purl.obolibrary.org/obo/EXAMPLE_
  pattern: '^http://purl[.]obolibrary[.]org/obo/EXAMPLE_[0-9]{7}$'

imports:
  mode: locked
  fail_on_missing: true
  lockfile: imports.lock.json
  network: deny

validation:
  required_stages: [interoperability, reasoner, profile, governance, structural, invariants, cqs]
  fail_on: warning
  structural:
    disabled: [property_missing_domain, property_missing_range]
    severity_overrides: {}
  invariants:
    paths: [sparql/*.rq]
  competency_questions:
    convention: robot-sparql-dir
    path: cqs
  waivers: []

release:
  format: obo
  output_dir: releases
  require_version_iri: true
  require_clean_round_trip: true
