# ConceptKernel Core Ontology
# Version: v3.7
# Date: 2026-04-24
# Purpose: Core entity definitions with formal IAO/CCO mid-level grounding
# v3.6: Adds AgentKernel, PersonaTemplate, ModelConfiguration.
# v3.7: Refines Project around the .ckproject symlink + SHA1-manifest model;
#       removes EdgeKernel and WssHubKernel classes (edges are ontology
#       predicates; broadcast externalized to the CK.Stream library kernel).

@prefix : <https://conceptkernel.org/ontology/v3.7/> .
@prefix ckp: <https://conceptkernel.org/ontology/v3.7/> .
@prefix bfo: <http://purl.obolibrary.org/obo/BFO_> .
@prefix iao: <http://purl.obolibrary.org/obo/IAO_> .
@prefix cco: <http://www.ontologyrepository.com/CommonCoreOntologies/> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix vf: <https://w3id.org/valueflows#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .

<https://conceptkernel.org/ontology/v3.7/> a owl:Ontology ;
    dc:title "ConceptKernel Core Ontology" ;
    dc:description "Core entity definitions for ConceptKernel with formal IAO/CCO mid-level grounding per CKP v3.7 ontology layering strategy" ;
    dcterms:created "2025-11-23"^^xsd:date ;
    dcterms:modified "2026-04-24"^^xsd:date ;
    owl:versionInfo "v3.7" ;
    dcterms:creator "Peter Styk <peter@conceptkernel.org>" ;
    rdfs:seeAlso <https://conceptkernel.org> ;
    rdfs:seeAlso <https://github.com/ConceptKernel> ;
    rdfs:comment "Core continuants and occurrents: Kernel, Edge, Instance, Ontology, Action, GovernanceMode. AgentKernel, PersonaTemplate, ModelConfiguration are v3.6 additions. v3.7 refines the Project class around the .ckproject manifest model and removes EdgeKernel/WssHubKernel (edges are ontology predicates; broadcast externalized). Formal IAO/CCO grounding (Layer 0.5)."@en ;
    owl:imports <http://purl.obolibrary.org/obo/bfo.owl> ,
                <http://purl.obolibrary.org/obo/iao.owl> ,
                <http://www.ontologyrepository.com/CommonCoreOntologies/AgentOntology> ,
                <http://www.ontologyrepository.com/CommonCoreOntologies/ArtifactOntology> ,
                <http://www.w3.org/ns/prov#> .

#################################################################
#    Continuants - Entities that persist through time
#################################################################

### Kernel (Independent Continuant - Material Entity + Agent)
### Formally grounded in cco:Agent — a kernel is both material entity AND agent
### v3.7: Renamed conceptually as AutonomousKernel per spec; kept as ckp:Kernel for backward compat

ckp:Kernel a owl:Class ;
    rdfs:subClassOf bfo:0000040 , cco:Agent ;  # bfo:MaterialEntity + cco:Agent
    rdfs:label "Concept Kernel"@en ;
    rdfs:comment "A persistent computational entity that maintains identity across time. Kernels are the fundamental atomic units of computation in ConceptKernel architecture. Dual-grounded: bfo:MaterialEntity (physical persistence) + cco:Agent (autonomous action). v3.7 spec refers to this as AutonomousKernel."@en ;
    ckp:implementationStatus "WELL_IMPLEMENTED"^^xsd:string ;
    ckp:coverageScore "0.85"^^xsd:decimal .

### Kernel Types (Qualities)

ckp:KernelType a owl:Class ;
    rdfs:subClassOf bfo:0000019 ;  # bfo:Quality
    rdfs:label "Kernel Type"@en ;
    rdfs:comment "The type quality of a kernel (hot, cold, hybrid, manual, agent)"@en .

ckp:HotKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel ;
    rdfs:label "Hot Kernel"@en ;
    rdfs:comment "Always-on service kernels that listen for external events (HTTP, WebSocket, etc.)"@en ;
    dc:description "Node.js: metadata.type='node:hot', Python: metadata.type='python:hot'" .

ckp:ColdKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel ;
    rdfs:label "Cold Kernel"@en ;
    rdfs:comment "On-demand kernels triggered by file system events (symlinks in queue/inbox)"@en ;
    dc:description "Node.js: metadata.type='node:cold', Python: metadata.type='python:cold'" .

### InlineKernel — podless browser-side kernel

ckp:InlineKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel ;
    rdfs:label "Inline Kernel"@en ;
    rdfs:comment "Podless kernel: browser-side JS, NATS WSS, JWT. No server-side process — runs entirely in the client browser, communicating via NATS WebSocket and authenticating with JWT."@en ;
    dc:description "Deployment method: INLINE_DEPLOY. Serving: NATSBrowserClient." ;
    ckp:implementationStatus "PARTIAL"^^xsd:string .

### StaticKernel — no process, gateway serves storage/web/

ckp:StaticKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel ;
    rdfs:label "Static Kernel"@en ;
    rdfs:comment "No process: gateway serves storage/web/ directly. A kernel whose web/ assets are served by the gateway without any running tool process."@en ;
    dc:description "Deployment method: VOLUME or FILER. Serving: WebServing only." ;
    ckp:implementationStatus "PARTIAL"^^xsd:string .

### AgentKernel — LLM-capable kernel with agent type (v3.6 addition, unchanged in v3.7)

ckp:AgentKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel ;
    rdfs:label "Agent Kernel"@en ;
    rdfs:comment "A kernel of type 'agent' that supports long-running conversational sessions with LLM inference. Agent kernels MUST support streaming via stream.{kernel}, multi-turn sessions, and persona templates from storage/personas/. CK.Claude is the canonical AgentKernel."@en ;
    dc:description "v3.6 addition. Type: agent. NATS pattern: persistent subscriber with streaming. Example: CK.Claude." ;
    ckp:implementationStatus "PARTIAL"^^xsd:string .

### Kernel Properties

ckp:hasUrn a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range xsd:string ;
    rdfs:label "has URN"@en ;
    rdfs:comment "The Universal Resource Name identifying the kernel: [Domain]:[Concept]:[Version]"@en ;
    dc:description "Example: Org.ConceptKernel:Recipes.BakeCake:v0.1" .

ckp:hasDomain a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range xsd:string ;
    rdfs:label "has domain"@en ;
    rdfs:comment "The organizational domain of the kernel"@en .

ckp:hasVersion a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range xsd:string ;
    rdfs:label "has version"@en ;
    rdfs:comment "Git tag version of the kernel"@en ;
    dc:description "Example: v0.1" .

ckp:hasType a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:KernelType ;
    rdfs:label "has type"@en ;
    rdfs:comment "The type quality of the kernel (hot/cold/hybrid/manual/agent)"@en .

### Kernel Dispositions (Contract Capabilities)

ckp:QueueContract a owl:Class ;
    rdfs:subClassOf iao:0000033 ;  # iao:DirectiveInformationEntity
    rdfs:label "Queue Contract"@en ;
    rdfs:comment "A directive information entity defining what inputs a kernel can accept. A contract directs how to interact — it specifies the expected input format and acceptable edge sources."@en ;
    dc:description "Defined in ontology.yaml: spec.queue_contract" .

ckp:StorageContract a owl:Class ;
    rdfs:subClassOf bfo:0000016 ;  # bfo:Disposition
    rdfs:label "Storage Contract"@en ;
    rdfs:comment "Disposition defining what outputs a kernel will produce"@en ;
    dc:description "Defined in ontology.yaml: spec.storage_contract" .

ckp:NotificationContract a owl:Class ;
    rdfs:subClassOf bfo:0000016 ;  # bfo:Disposition
    rdfs:label "Notification Contract"@en ;
    rdfs:comment "Disposition defining which kernels will be notified of outputs"@en ;
    dc:description "Defined in ontology.yaml: spec.notification_contract" .

ckp:hasQueueContract a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:QueueContract ;
    rdfs:label "has queue contract"@en .

ckp:hasStorageContract a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:StorageContract ;
    rdfs:label "has storage contract"@en .

ckp:hasNotificationContract a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:NotificationContract ;
    rdfs:label "has notification contract"@en .

#################################################################
#    InformationEntity (Generically Dependent Continuant)
#################################################################

ckp:InformationEntity a owl:Class ;
    rdfs:subClassOf iao:0000030 ;  # iao:InformationContentEntity
    rdfs:label "Information Entity"@en ;
    rdfs:comment "An abstract information-bearing entity that can be concretized in multiple bearers. Base class for Instance, Edge, and other information artifacts. Formally grounded in iao:InformationContentEntity."@en .

#################################################################
#    Edge (cco:Artifact — a constructed relational artifact)
#################################################################

ckp:Edge a owl:Class ;
    rdfs:subClassOf cco:Artifact ;  # cco:Artifact (constructed artifact)
    rdfs:label "Edge"@en ;
    rdfs:comment "An abstract relationship between two kernels — the ONLY mechanism for inter-Kernel communication. Edges are constructed artifacts that define the connectivity graph. Formally grounded in cco:Artifact."@en ;
    ckp:implementationStatus "WELL_IMPLEMENTED"^^xsd:string ;
    ckp:coverageScore "0.85"^^xsd:decimal ;
    ckp:architecturalConstraint "NO direct Kernel-to-Kernel communication. All inter-Kernel interaction is mediated by authorized Edges declared in each target's queue_contract.edges."^^xsd:string .

### Edge Relationship Types

ckp:RelationshipType a owl:Class ;
    rdfs:subClassOf bfo:0000019 ;  # bfo:Quality
    rdfs:label "Relationship Type"@en ;
    rdfs:comment "The semantic relationship type of an edge"@en .

ckp:PRODUCES a ckp:RelationshipType ;
    rdfs:label "PRODUCES"@en ;
    rdfs:comment "Source kernel produces instances consumed by target"@en .

ckp:NOTIFIES a ckp:RelationshipType ;
    rdfs:label "NOTIFIES"@en ;
    rdfs:comment "Source kernel notifies target of events"@en .

ckp:REQUIRES a ckp:RelationshipType ;
    rdfs:label "REQUIRES"@en ;
    rdfs:comment "Target kernel requires instances from source"@en .

ckp:VALIDATES a ckp:RelationshipType ;
    rdfs:label "VALIDATES"@en ;
    rdfs:comment "Source kernel validates target's outputs"@en .

ckp:INFLUENCES a ckp:RelationshipType ;
    rdfs:label "INFLUENCES"@en ;
    rdfs:comment "Soft dependency (advisory, not blocking)"@en .

ckp:TRANSFORMS a ckp:RelationshipType ;
    rdfs:label "TRANSFORMS"@en ;
    rdfs:comment "Source data is transformed by target"@en .

### v3.5/v3.7 Edge Predicates (governance-loop relationship types)

ckp:EXTENDS a ckp:RelationshipType ;
    rdfs:label "EXTENDS"@en ;
    rdfs:comment "Source kernel extends target kernel's capabilities (inheritance-like composition). v3.7: Source gains NEW actions backed by target's runtime. Instances sealed in source DATA loop."@en .

ckp:COMPOSES a ckp:RelationshipType ;
    rdfs:label "COMPOSES"@en ;
    rdfs:comment "Source kernel composes target kernel's actions into its own pipeline (hub-spoke module pattern)"@en .

ckp:TRIGGERS a ckp:RelationshipType ;
    rdfs:label "TRIGGERS"@en ;
    rdfs:comment "Source kernel triggers execution of target kernel (event-driven sequential activation)"@en .

### v3.7: LOOPS_WITH edge predicate

ckp:LOOPS_WITH a ckp:RelationshipType ;
    rdfs:label "LOOPS_WITH"@en ;
    rdfs:comment "Bidirectional cooperation: both kernels can invoke each other. Requires circular guard via visited set to prevent infinite recursion."@en ;
    dc:description "v3.7 addition. Both subscribe to each other's event.* topics." .

### Edge Properties

ckp:hasSource a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Edge ;
    rdfs:range ckp:Kernel ;
    rdfs:label "has source"@en ;
    rdfs:comment "The source kernel of the edge relationship"@en ;
    owl:inverseOf ckp:hasOutgoingEdge .

ckp:hasTarget a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Edge ;
    rdfs:range ckp:Kernel ;
    rdfs:label "has target"@en ;
    rdfs:comment "The target kernel of the edge relationship"@en ;
    owl:inverseOf ckp:hasIncomingEdge .

ckp:hasRelationshipType a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Edge ;
    rdfs:range ckp:RelationshipType ;
    rdfs:label "has relationship type"@en ;
    rdfs:comment "The semantic type of the relationship (PRODUCES, NOTIFIES, TRIGGERS, COMPOSES, EXTENDS, LOOPS_WITH)"@en .

ckp:hasOutgoingEdge a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:Edge ;
    rdfs:label "has outgoing edge"@en ;
    rdfs:comment "An edge originating from this kernel"@en ;
    owl:inverseOf ckp:hasSource .

ckp:hasIncomingEdge a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:Edge ;
    rdfs:label "has incoming edge"@en ;
    rdfs:comment "An edge targeting this kernel"@en ;
    owl:inverseOf ckp:hasTarget .

### Edge Authorization (enforced by target kernel's queue_contract.edges)

ckp:isAuthorized a owl:DatatypeProperty ;
    rdfs:domain ckp:Edge ;
    rdfs:range xsd:boolean ;
    rdfs:label "is authorized"@en ;
    rdfs:comment "Whether the target kernel explicitly authorizes this edge in its queue_contract.edges"@en .

#################################################################
#    Instance (iao:DataItem — a truthful data item)
#################################################################

ckp:Instance a owl:Class ;
    rdfs:subClassOf iao:0000027 ;  # iao:DataItem
    rdfs:label "Instance"@en ;
    rdfs:comment "A persistent information entity — the result of a Process. Instances are immutable artifacts stored in {kernel}/data/instances/i-{identifier}/. Formally grounded in iao:DataItem — an instance is a truthful data item about something."@en ;
    ckp:implementationStatus "WELL_IMPLEMENTED"^^xsd:string ;
    ckp:coverageScore "0.80"^^xsd:decimal .

### Instance Properties

ckp:hasTransactionId a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Instance ;
    rdfs:range xsd:string ;
    rdfs:label "has transaction ID"@en ;
    rdfs:comment "Unique transaction ID in format: yyMMddHHmmssf-shortId"@en .

ckp:hasTimestamp a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Instance ;
    rdfs:range xsd:dateTime ;
    rdfs:label "has timestamp"@en ;
    rdfs:comment "ISO 8601 timestamp of instance creation"@en .

ckp:hasReceiptData a owl:DatatypeProperty ;
    rdfs:domain ckp:Instance ;
    rdfs:range xsd:string ;
    rdfs:label "has receipt data"@en ;
    rdfs:comment "JSON-serialized result data stored in receipt.bin"@en .

### Instance-Kernel relationship

ckp:createdByKernel a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Instance ;
    rdfs:range ckp:Kernel ;
    rdfs:label "created by kernel"@en ;
    rdfs:comment "The kernel that produced this instance"@en .

ckp:producesInstance a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:Instance ;
    rdfs:label "produces instance"@en ;
    rdfs:comment "An instance produced by this kernel"@en ;
    owl:inverseOf ckp:createdByKernel .

#################################################################
#    Action (iao:PlanSpecification — a plan that gets realized as a process)
#    v3.7: Actions are the executable operations a kernel exposes
#################################################################

ckp:Action a owl:Class ;
    rdfs:subClassOf iao:0000104 ;  # iao:PlanSpecification
    rdfs:label "Action"@en ;
    rdfs:comment "An executable operation exposed by a kernel. Actions are plan specifications defined in conceptkernel.yaml under spec.actions. When executed, they are realized as ckpp:InvocationProcess instances. Formally grounded in iao:PlanSpecification."@en .

ckp:hasAction a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:Action ;
    rdfs:label "has action"@en ;
    rdfs:comment "An action exposed by this kernel"@en .

ckp:hasAccessLevel a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Action ;
    rdfs:range xsd:string ;
    rdfs:label "has access level"@en ;
    rdfs:comment "Access control level for the action: anon, auth, admin"@en .

#################################################################
#    Reconciliation (Occurrent - Process subclass of Action)
#################################################################

ckp:Reconciliation a owl:Class ;
    rdfs:subClassOf ckp:Action ;
    rdfs:label "Reconciliation"@en ;
    rdfs:comment "Operator reconciliation cycle. A periodic or event-driven process where the operator compares desired state (conceptkernel.yaml) against actual state (running resources) and converges."@en ;
    dc:description "Triggered by tg.sh apply or operator watch loop." ;
    ckp:implementationStatus "PARTIAL"^^xsd:string .

#################################################################
#    v3.7: PersonaTemplate (Information Entity for reusable system prompts)
#################################################################

ckp:PersonaTemplate a owl:Class ;
    rdfs:subClassOf iao:0000030 ;  # iao:InformationContentEntity
    rdfs:label "Persona Template"@en ;
    rdfs:comment "A reusable system prompt template stored in an AgentKernel's DATA loop at storage/personas/{name}.yaml. Persona templates define LLM behaviour (system prompt, tools, temperature, model) that other kernels mount via the EXTENDS edge predicate."@en ;
    dc:description "v3.7 addition. Fields: name, system_prompt, tools, output_format, temperature, model." .

### PersonaTemplate Properties

ckp:personaName a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:PersonaTemplate ;
    rdfs:range xsd:string ;
    rdfs:label "persona name"@en ;
    rdfs:comment "Unique identifier for this persona template, matching config.persona in EXTENDS edges"@en .

ckp:systemPrompt a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:PersonaTemplate ;
    rdfs:range xsd:string ;
    rdfs:label "system prompt"@en ;
    rdfs:comment "The system prompt injected into the LLM context when this persona is mounted"@en .

ckp:personaModel a owl:DatatypeProperty ;
    rdfs:domain ckp:PersonaTemplate ;
    rdfs:range xsd:string ;
    rdfs:label "persona model"@en ;
    rdfs:comment "Default LLM model for this persona (e.g., sonnet, opus, haiku)"@en .

ckp:personaTemperature a owl:DatatypeProperty ;
    rdfs:domain ckp:PersonaTemplate ;
    rdfs:range xsd:decimal ;
    rdfs:label "persona temperature"@en ;
    rdfs:comment "LLM temperature parameter for this persona"@en .

#################################################################
#    v3.7: ModelConfiguration (Quality for model selection)
#################################################################

ckp:ModelConfiguration a owl:Class ;
    rdfs:subClassOf bfo:0000019 ;  # bfo:Quality
    rdfs:label "Model Configuration"@en ;
    rdfs:comment "A quality describing LLM model selection and effort level for a kernel or action. v3.7 defines a three-level precedence chain: CK.Claude default < persona template < EXTENDS edge config."@en ;
    dc:description "v3.7 addition. Properties: defaultModel, modelEffort. Values: haiku, sonnet, opus; low, medium, high, max." .

#################################################################
#    GovernanceMode (Disposition)
#################################################################

ckp:GovernanceMode a owl:Class ;
    rdfs:subClassOf bfo:0000016 ;  # bfo:Disposition
    rdfs:label "Governance Mode"@en ;
    rdfs:comment "The governance disposition of a kernel, determining how decisions are made and enforced."@en .

ckp:STRICT a ckp:GovernanceMode ;
    rdfs:label "STRICT"@en ;
    rdfs:comment "All changes require consensus approval before execution"@en .

ckp:RELAXED a ckp:GovernanceMode ;
    rdfs:label "RELAXED"@en ;
    rdfs:comment "Changes proceed with post-hoc review; consensus is advisory"@en .

ckp:AUTONOMOUS a ckp:GovernanceMode ;
    rdfs:label "AUTONOMOUS"@en ;
    rdfs:comment "Kernel self-governs without external consensus requirements"@en .

ckp:hasGovernanceMode a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:GovernanceMode ;
    rdfs:label "has governance mode"@en ;
    rdfs:comment "The governance disposition of this kernel"@en .

#################################################################
#    Ontology (iao:Document — the ontology file is a document)
#################################################################

ckp:KernelOntology a owl:Class ;
    rdfs:subClassOf iao:0000310 ;  # iao:Document
    rdfs:label "Kernel Ontology"@en ;
    rdfs:comment "Ontology defines the essential nature of a Kernel (its qualities and dispositions). Stored as ontology.yaml in each kernel directory. Formally grounded in iao:Document — an ontology is a document, not a quality of the kernel."@en ;
    dc:description "Format: YAML conforming to apiVersion: conceptkernel/v1, kind: Ontology" ;
    ckp:implementationStatus "WELL_IMPLEMENTED"^^xsd:string ;
    ckp:coverageScore "0.70"^^xsd:decimal .

ckp:definesKernel a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:KernelOntology ;
    rdfs:range ckp:Kernel ;
    rdfs:label "defines kernel"@en ;
    rdfs:comment "The kernel whose nature is defined by this ontology"@en .

ckp:hasOntology a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:KernelOntology ;
    rdfs:label "has ontology"@en ;
    rdfs:comment "The ontology defining this kernel's nature"@en ;
    owl:inverseOf ckp:definesKernel .

#################################################################
#    Project (cco:Organization — organizes kernels)
#################################################################

ckp:Project a owl:Class ;
    rdfs:subClassOf cco:Organization ;  # cco:Organization
    rdfs:label "Project"@en ;
    rdfs:comment "Organizes kernels into a coherent deployment unit: a pinned set of frozen versions, the edges between them, and project-scoped configuration. Formally grounded in cco:Organization."@en ;
    dc:description "Each Project instance is materialized by a .ckproject manifest. The manifest is the authoritative record of the project's frozen deployment — SHA1 commit pins for each of the 3 organs (ck, tool, data) per kernel. The instance lives in CK.Project's DATA organ under ck-data/<project>/.ckproject on the SeaweedFS filer; a symlink at the project root (<project>/.ckproject) points at the same instance. CK.Operator reads the manifest to materialize kernels at their pinned versions."@en ;
    ckp:implementationStatus "PARTIAL"^^xsd:string .

#################################################################
#    System Kernels
#################################################################
#
# v3.7: Edges are ontology-level predicates on kernels (see ckp:Edge,
# ckp:RelationshipType, ckp:isAuthorized above), not a dedicated kernel
# class. Inter-Kernel communication is authorized and traced through
# Edge instances declared in each target's queue_contract.edges and
# carried over NATS — no EdgeKernel mediator is required.
#
# Real-time broadcast responsibilities previously assigned to a
# WssHubKernel are externalized into the CK.Stream library kernel
# concept and out of scope for the core ontology.

### System.Consensus - Governance Mediator

ckp:ConsensusKernel a owl:Class ;
    rdfs:subClassOf ckp:Kernel , ckp:HotKernel ;
    rdfs:label "Consensus Kernel"@en ;
    rdfs:comment "Special system kernel that mediates ALL governance decisions (proposals, voting, enforcement). v3.7: CK.Consensus evaluates proposals through four validation layers."@en ;
    dc:description "URN: ckp://Kernel#CK.Consensus:v1.0" ;
    ckp:implementationStatus "PARTIAL"^^xsd:string ;
    ckp:architecturalRole "Governance Mediator"^^xsd:string .

#################################################################
#    Base Relationship Property
#################################################################

ckp:relatesTo a owl:ObjectProperty ;
    rdfs:label "relates to"@en ;
    rdfs:comment "Base property for kernel-to-kernel relationships. All specific edge predicates (auditsComplianceOf, reportsIssueTo, etc.) are sub-properties of this."@en .

#################################################################
#    Mediation Relationships
#################################################################

ckp:mediates a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range owl:Thing ;
    rdfs:label "mediates"@en ;
    rdfs:comment "A mediator kernel manages or controls some entity or process"@en .

# ckp:mediatesEdge removed in v3.7 — edges are ontology-level predicates,
# not objects managed by a mediator kernel. See ckp:Edge, ckp:hasSource,
# ckp:hasTarget, ckp:hasRelationshipType, ckp:isAuthorized above.

#################################################################
#    Architectural Constraints (as OWL Axioms)
#################################################################

### Constraint 1: Communication requires Edge

ckp:canCommunicateWith a owl:ObjectProperty ;
    rdfs:domain ckp:Kernel ;
    rdfs:range ckp:Kernel ;
    rdfs:label "can communicate with"@en ;
    rdfs:comment "Two kernels can communicate IF AND ONLY IF there exists an Edge connecting them."@en .

ckp:CommunicatingKernels a owl:Class ;
    owl:equivalentClass [
        a owl:Restriction ;
        owl:onProperty ckp:hasOutgoingEdge ;
        owl:someValuesFrom ckp:Edge
    ] .

### Constraint 2: Edge creation requires authorization

ckp:AuthorizedEdge a owl:Class ;
    rdfs:subClassOf ckp:Edge ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty ckp:isAuthorized ;
        owl:hasValue true
    ] ;
    rdfs:label "Authorized Edge"@en ;
    rdfs:comment "An edge where the target kernel explicitly authorizes the relationship in its queue_contract.edges"@en .

#################################################################
#    Consensus Proposal (alias for process:Proposal)
#################################################################

ckp:ConsensusProposal a owl:Class ;
    rdfs:subClassOf bfo:0000040 ;  # bfo:IndependentContinuant
    rdfs:label "Consensus Proposal"@en ;
    rdfs:comment "A proposal submitted for consensus governance review. v3.7: Proposals go through four validation layers (ontological, constraint, topology, compliance)."@en ;
    dc:description "Stored in {kernel}/consensus/proposals/{proposalId}.json" .

#################################################################
#    Implementation Status Annotations
#################################################################

ckp:implementationStatus a owl:AnnotationProperty ;
    rdfs:label "implementation status"@en ;
    rdfs:comment "Current implementation status: WELL_IMPLEMENTED, PARTIAL, NOT_IMPLEMENTED"@en .

ckp:coverageScore a owl:AnnotationProperty ;
    rdfs:label "coverage score"@en ;
    rdfs:comment "Decimal score 0.0-1.0 indicating BFO alignment coverage"@en .

ckp:architecturalConstraint a owl:AnnotationProperty ;
    rdfs:label "architectural constraint"@en ;
    rdfs:comment "Invariant constraint enforced by the architecture"@en .

ckp:architecturalRole a owl:AnnotationProperty ;
    rdfs:label "architectural role"@en ;
    rdfs:comment "The architectural role of a system mediator kernel"@en .

ckp:criticalGap a owl:AnnotationProperty ;
    rdfs:label "critical gap"@en ;
    rdfs:comment "A critical missing feature or integration"@en .

#################################################################
#    Version Materialisation (v3.7)
#################################################################

### VersionDeclaration — a named version with per-kernel git refs
### Grounded as GenericallyDependentContinuant (depends on CK.Project)

ckp:VersionDeclaration a owl:Class ;
    rdfs:subClassOf bfo:0000031 ;  # bfo:GenericallyDependentContinuant
    rdfs:label "Version Declaration"@en ;
    rdfs:comment "A named version with per-kernel git refs, mapped to a URL route. Each version materialises three sibling directories per kernel: ck/ (identity, ReadOnly), tool/ (code, ReadOnly), data/ (state, ReadWrite). No nested mounts — three independent PVs mounted as siblings under /ck/{kernel}/."@en .

ckp:hasVersionName a owl:DatatypeProperty ;
    rdfs:domain ckp:VersionDeclaration ;
    rdfs:range xsd:string ;
    rdfs:label "version name"@en ;
    rdfs:comment "Version tag (v1.0.0, v1.3.2) — used in filer paths, PV names, HTTPRoute rules"@en .

ckp:hasRoute a owl:DatatypeProperty ;
    rdfs:domain ckp:VersionDeclaration ;
    rdfs:range xsd:string ;
    rdfs:label "route"@en ;
    rdfs:comment "URL path prefix on project hostname (e.g. /, /next)"@en .

ckp:hasDataIsolation a owl:ObjectProperty ;
    rdfs:domain ckp:VersionDeclaration ;
    rdfs:range ckp:DataIsolationMode ;
    rdfs:label "data isolation mode"@en ;
    rdfs:comment "Controls whether this version gets its own DATA directory or shares with another version"@en .

ckp:hasKernelRef a owl:ObjectProperty ;
    rdfs:domain ckp:VersionDeclaration ;
    rdfs:range ckp:KernelVersionRef ;
    rdfs:label "kernel version ref"@en ;
    rdfs:comment "Per-kernel git refs for this version"@en .

### KernelVersionRef — per-kernel, per-loop git references

ckp:KernelVersionRef a owl:Class ;
    rdfs:subClassOf bfo:0000031 ;  # bfo:GenericallyDependentContinuant
    rdfs:label "Kernel Version Ref"@en ;
    rdfs:comment "Per-kernel, per-loop git references for version materialisation. Each concept kernel has three independently versioned storage concerns: CK loop (ck_ref from ck.git), TOOL loop (tool_ref from tool.git), DATA loop (directory-based, no git ref). Full-tree git archive produces loop content directly — no subtree filtering."@en .

ckp:refKernelName a owl:DatatypeProperty ;
    rdfs:domain ckp:KernelVersionRef ;
    rdfs:range xsd:string ;
    rdfs:label "kernel name"@en ;
    rdfs:comment "Concept kernel name. Maps to registry {name}/ck.git and {name}/tool.git, filer /ck/{name}/ck.git/ and /ck/{name}/tool.git/"@en .

ckp:ckRef a owl:DatatypeProperty ;
    rdfs:domain ckp:KernelVersionRef ;
    rdfs:range xsd:string ;
    rdfs:label "CK loop ref"@en ;
    rdfs:comment "Git commit hash for CK loop. Full-tree archive from per-kernel CK bare repo. Extracted to /ck/{kernel}/{version}/ck/ on filer. Mounted at /ck/{kernel}/ck/ in pod (ReadOnlyMany)."@en .

ckp:toolRef a owl:DatatypeProperty ;
    rdfs:domain ckp:KernelVersionRef ;
    rdfs:range xsd:string ;
    rdfs:label "TOOL loop ref"@en ;
    rdfs:comment "Git commit hash for TOOL loop. Full-tree archive from per-kernel TOOL bare repo. Extracted to /ck/{kernel}/{version}/tool/ on filer. Mounted at /ck/{kernel}/tool/ in pod (ReadOnlyMany or ReadWriteMany for hot-reload)."@en .

ckp:hasAutoUpdate a owl:ObjectProperty ;
    rdfs:domain ckp:KernelVersionRef ;
    rdfs:range ckp:AutoUpdatePolicy ;
    rdfs:label "auto-update policy"@en ;
    rdfs:comment "Policy for webhook-driven ref updates from the git registry"@en .

### GitRegistryConfig — registry connection for a project

ckp:GitRegistryConfig a owl:Class ;
    rdfs:subClassOf bfo:0000031 ;  # bfo:GenericallyDependentContinuant
    rdfs:label "Git Registry Config"@en ;
    rdfs:comment "Git registry connection configuration. The operator discovers this from the CK.Project ontology at runtime via the COMPOSES edge — not hardcoded."@en .

ckp:registryUrl a owl:DatatypeProperty ;
    rdfs:domain ckp:GitRegistryConfig ;
    rdfs:range xsd:anyURI ;
    rdfs:label "registry URL"@en ;
    rdfs:comment "Registry base URL (e.g. http://soft-serve-http.git.svc)"@en .

ckp:authSecret a owl:DatatypeProperty ;
    rdfs:domain ckp:GitRegistryConfig ;
    rdfs:range xsd:string ;
    rdfs:label "auth secret"@en ;
    rdfs:comment "K8s Secret name containing registry credentials. Optional for cluster-internal registries."@en .

#################################################################
#    Coverage Summary (as OWL Individuals)
#################################################################

:ContinuantCoverage a owl:NamedIndividual ;
    rdfs:label "Continuant Coverage"@en ;
    ckp:coverageScore "0.88"^^xsd:decimal ;
    rdfs:comment "Overall coverage of BFO Continuants: Kernel (85%), Edge (85%), Instance (80%), Ontology (70%), AgentKernel (v3.7), PersonaTemplate (v3.7)"@en .

:OverallCoverage a owl:NamedIndividual ;
    rdfs:label "Overall BFO Coverage"@en ;
    ckp:coverageScore "0.75"^^xsd:decimal ;
    rdfs:comment "Overall BFO alignment: Continuants (88%), Occurrents (55%), v3.7 additions (65%)"@en .

#################################################################
# End of ConceptKernel Base BFO Ontology v3.7
#################################################################
