@prefix jcd: . @prefix sh: . @prefix xsd: . # Joule Code v1 SHACL shapes — validates JWP receipts, source-tree # transitions, and agent references against the v1 vocabulary # before they cross the receipt-stream boundary. jcd:ReceiptShape a sh:NodeShape ; sh:targetClass jcd:Receipt ; sh:property [ sh:path jcd:tierClosed ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( jcd:L0Cache jcd:L1Lawful jcd:L2Embed jcd:L3Model jcd:L4Wire ) ] ; sh:property [ sh:path jcd:joulesMeasuredUj ; sh:datatype xsd:nonNegativeInteger ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path jcd:joulesEstimatedUj ; sh:datatype xsd:nonNegativeInteger ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path jcd:energyProvenance ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( jcd:HwShunt jcd:ModelBased jcd:Estimator ) ] ; sh:property [ sh:path jcd:closedAt ; sh:datatype xsd:dateTime ; sh:minCount 1 ; sh:maxCount 1 ] . jcd:TransitionShape a sh:NodeShape ; sh:targetClass jcd:Transition ; sh:property [ sh:path jcd:operation ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( jcd:Edit jcd:Refactor jcd:Generate ) ] ; sh:property [ sh:path jcd:sourceBeforeHash ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ; sh:pattern "^[a-f0-9]{64}$" ] ; sh:property [ sh:path jcd:sourceAfterHash ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ; sh:pattern "^[a-f0-9]{64}$" ] . jcd:AgentShape a sh:NodeShape ; sh:targetClass jcd:Agent ; sh:property [ sh:path jcd:agentId ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path jcd:agentVendor ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( jcd:ClaudeCode jcd:Gemini jcd:Codex jcd:GenericAgent ) ] ; sh:property [ sh:path jcd:acpEndpoint ; sh:nodeKind sh:IRI ; sh:maxCount 1 ] ; sh:property [ sh:path jcd:credentialHolder ; sh:datatype xsd:string ; sh:maxCount 1 ] .