Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions schema/src/Attestation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
id: Attestation
name: Attestation
prefixes:
linkml: https://w3id.org/linkml/
rfs: https://framework.regen.network/schema/
rft: https://framework.regen.network/taxonomy/

imports:
- linkml:types
- core
- taxonomy
- Entity

default_prefix: rfs
default_range: string

classes:
Attestation:
description: >-
A reviewer's attestation about a Claim. Maps to the KOI
claim_attestations table and aligns with on-chain MsgAttest
and Ethereum Attestation Service (EAS) attestation patterns.
slots:
- name
- description
attributes:
attestsClaim:
slot_uri: rfs:attestsClaim
description: >-
Reference to the Claim being attested, by RID or IRI.
range: string
required: true
hasReviewer:
slot_uri: rfs:hasReviewer
description: >-
The entity providing the attestation. Must have a registered
identity (KOI entity URI and/or wallet address).
range: Entity
required: true
inlined: true
hasVerdict:
slot_uri: rfs:hasVerdict
description: >-
The reviewer's verdict on the claim.
range: VerdictType
required: true
rationale:
slot_uri: rfs:rationale
description: >-
Free-text explanation of the verdict, including any conditions
or caveats noted during review.
range: string
evidenceReviewed:
slot_uri: rfs:evidenceReviewed
description: >-
URIs of evidence documents, datasets, or field observations
reviewed as part of this attestation.
range: uri
multivalued: true
attestationDate:
slot_uri: rfs:attestationDate
description: Date when the attestation was made.
range: date

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The attestationDate is a crucial piece of information for an attestation, but it's currently optional. To ensure data integrity and completeness, consider making it a required field.

        range: date
        required: true

contentHash:
slot_uri: rfs:contentHash
description: >-
BLAKE2b-256 content hash of the canonical attestation
representation, used for on-chain anchoring.
range: string
graphIri:
slot_uri: rfs:graphIri
description: >-
On-chain graph IRI from Regen Data Module MsgAttest,
using ContentHash.Graph encoding.
range: uri
136 changes: 136 additions & 0 deletions schema/src/Claim.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
id: Claim
name: Claim
prefixes:
linkml: https://w3id.org/linkml/
rfs: https://framework.regen.network/schema/
rft: https://framework.regen.network/taxonomy/
schema: http://schema.org/
qudt: http://qudt.org/schema/qudt/
unit: http://qudt.org/vocab/unit/

imports:
- linkml:types
- core
- taxonomy
- Entity
- Impact
- SDG
- Methodology

default_prefix: rfs
default_range: string

classes:
Claim:
description: >-
A verifiable claim about ecological, social, or financial outcomes
associated with a place, practice, or project. Claims are the atomic
unit of the regenerative claims engine, linking a claimant's assertion
to a subject entity with typed impact and temporal bounds.
slots:
- name
- description
- url
slot_usage:
name:
required: true
description: Human-readable title of the claim.
attributes:
hasClaimType:
slot_uri: rfs:hasClaimType
description: >-
The primary category of the claim, drawn from the FWG ClaimType
taxonomy. Determines which verification pathways apply.
range: ClaimType
required: true
hasClaimant:
slot_uri: rfs:hasClaimant
description: >-
The entity making the claim. May be an individual, organization,
or community.
range: Entity
required: true
inlined: true
hasSubject:
slot_uri: rfs:hasSubject
description: >-
The entity or place about which the claim is made. Often a project,
land steward, or community.
range: Entity
required: true
inlined: true
hasOperator:
slot_uri: rfs:hasOperator
description: >-
The entity responsible for operations that produced the claimed
outcome, if different from the claimant.
range: Entity
inlined: true
hasPrimaryImpact:
slot_uri: rfs:hasPrimaryImpact
description: The primary impact claimed.
range: Impact
required: true
inlined: true
hasCoBenefits:
description: Secondary impacts or co-benefits associated with the claim.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with other attributes in this schema that explicitly define a slot_uri, consider adding one here. Based on the attribute name, slot_uri: rfs:hasCoBenefits would be appropriate.

        slot_uri: rfs:hasCoBenefits
        description: Secondary impacts or co-benefits associated with the claim.

range: Impact
multivalued: true
inlined: true
inlined_as_list: true
verificationStatus:
slot_uri: rfs:verificationStatus
description: >-
Current verification state of the claim, from self-reported through
ledger-anchored.
range: VerificationStatus
required: true
claimStartDate:
slot_uri: schema:startDate
description: The start date of the period covered by this claim.
range: date

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

A claim should have a defined temporal bound. The PR description highlights 'Temporal bounds as explicit date attributes', underscoring their importance. To ensure all claims specify the period they cover, consider making claimStartDate a required field.

        range: date
        required: true

claimEndDate:
slot_uri: schema:endDate
description: The end date of the period covered by this claim.
range: date

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

A claim should have a defined temporal bound. The PR description highlights 'Temporal bounds as explicit date attributes', underscoring their importance. To ensure all claims specify the period they cover, consider making claimEndDate a required field.

        range: date
        required: true

quantity:
slot_uri: rfs:quantity
description: >-
Numeric quantity associated with the claim (e.g., tonnes CO2e,
hectares restored).
range: float
quantityUnit:
slot_uri: qudt:unit
description: >-
Unit of measurement for the quantity (e.g., unit:TON, unit:HA).
range: string
Comment on lines +96 to +106

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The quantity and quantityUnit attributes are defined separately, which could allow for a quantity to be specified without a quantityUnit, leading to ambiguity. To improve data integrity, consider grouping these into a single structure.

For example, you could define a new Quantity class:

# In a shared file like core.yaml or a new Quantity.yaml
classes:
  Quantity:
    attributes:
      value:
        range: float
        required: true
        description: "The numeric value of the quantity."
      unit:
        range: string
        required: true
        description: "The unit of measurement."
        slot_uri: qudt:unit

And then use it in Claim.yaml by replacing the current quantity and quantityUnit attributes with:

# In Claim.yaml
      quantity:
        range: Quantity
        inlined: true
        description: >-
          Numeric quantity associated with the claim (e.g., tonnes CO2e,
          hectares restored).

usesMethodology:
description: The methodology used to measure or verify the claimed outcome.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with other attributes in this schema that explicitly define a slot_uri, consider adding one here. Based on the attribute name, slot_uri: rfs:usesMethodology would be appropriate.

        slot_uri: rfs:usesMethodology
        description: The methodology used to measure or verify the claimed outcome.

range: Methodology
multivalued: true
inlined: true
inlined_as_list: true
hasCreditClass:
slot_uri: rfs:hasCreditClass
description: >-
Credit class identifier (e.g., C01, C06) linking this claim to
a registered credit class on Regen Ledger.
range: string
contentHash:
slot_uri: rfs:contentHash
description: >-
BLAKE2b-256 content hash of the canonical claim representation,
used for on-chain anchoring via Regen Data Module.
range: string
dataIri:
slot_uri: rfs:dataIri
description: >-
Regen Data Module IRI derived from the content hash. Bridges the
off-chain claim to its on-chain anchor.
range: uri
supersedes:
slot_uri: rfs:supersedes
description: >-
IRI or RID of a previous claim that this claim supersedes,
forming a version chain.
range: uri
Comment on lines +134 to +136

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Accept RID identifiers in supersedes

supersedes is described as accepting “IRI or RID”, but the declared range is uri, which excludes non-URI RID formats. In claim versioning flows that store prior claims by RID (instead of full IRIs), this field will fail schema validation despite being documented as valid input, blocking interoperability for update chains. Use a range that can represent both forms (for example string or uriorcurie) or tighten the description to URI-only.

Useful? React with 👍 / 👎.

12 changes: 12 additions & 0 deletions schema/src/Entity.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ classes:
type:
range: EntityTypes
required: true
walletAddress:
slot_uri: rfs:walletAddress
description: >-
On-chain wallet address (bech32 or hex) bridging semantic identity
to signing capability. Used by the identity bridge to link KOI
entity URIs to on-chain accounts for CLAMS and EAS interop.
range: string

enums:
EntityTypes:
Expand All @@ -33,3 +40,8 @@ enums:
meaning: rfs:Individual
ORGANIZATION:
meaning: rfs:Organization
COMMUNITY:
meaning: rfs:Community
description: >-
A collective entity such as a community, cooperative, or indigenous
group acting as a unified identity for claims and governance.
2 changes: 2 additions & 0 deletions schema/src/schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ imports:
- Methodology
- Registry
- CreditClassInfo
- Claim
- Attestation
- BT01ProjectInfo
- C01ProjectInfo
- C02ProjectInfo
Expand Down
90 changes: 90 additions & 0 deletions schema/src/taxonomy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -342,3 +342,93 @@ enums:
UNKNOWN:
text: UNKNOWN
title: Unknown
ClaimType:
name: ClaimType
description: >-
Categories of claims that can be made about regenerative outcomes.
Determines which verification pathways and impact metrics apply.
from_schema: https://framework.regen.network/taxonomy/
permissible_values:
ECOLOGICAL:
text: ECOLOGICAL
meaning: rft:Ecological
title: Ecological
description: Claims about ecological outcomes such as carbon sequestration, biodiversity, soil health, or water quality.
SOCIAL:
text: SOCIAL
meaning: rft:Social
title: Social
description: Claims about social outcomes such as community well-being, livelihoods, education, or cultural preservation.
FINANCIAL:
text: FINANCIAL
meaning: rft:Financial
title: Financial
description: Claims about financial outcomes such as revenue generation, cost savings, or investment returns from regenerative practices.
GOVERNANCE:
text: GOVERNANCE
meaning: rft:Governance
title: Governance
description: Claims about governance outcomes such as stakeholder participation, decision-making processes, or institutional arrangements.
BIOCULTURAL:
text: BIOCULTURAL
meaning: rft:Biocultural
title: Biocultural
description: Claims about biocultural outcomes integrating ecological and cultural dimensions, such as traditional ecological knowledge or indigenous stewardship.
VerificationStatus:
name: VerificationStatus
description: >-
Lifecycle states of a claim as it moves through verification.
Each state represents increasing levels of assurance.
from_schema: https://framework.regen.network/taxonomy/
permissible_values:
SELF_REPORTED:
text: SELF_REPORTED
meaning: rft:SelfReported
title: SelfReported
description: Claim submitted by the claimant without independent review.
PEER_REVIEWED:
text: PEER_REVIEWED
meaning: rft:PeerReviewed
title: PeerReviewed
description: Claim reviewed by one or more peer attestors.
VERIFIED:
text: VERIFIED
meaning: rft:Verified
title: Verified
description: Claim verified by an accredited or authorized verifier.
LEDGER_ANCHORED:
text: LEDGER_ANCHORED
meaning: rft:LedgerAnchored
title: LedgerAnchored
description: Claim anchored on-chain via Regen Data Module with a content hash.
WITHDRAWN:
text: WITHDRAWN
meaning: rft:Withdrawn
title: Withdrawn
description: Claim withdrawn by the claimant or invalidated through review.
VerdictType:
name: VerdictType
description: >-
Possible verdicts an attestor can assign when reviewing a claim.
from_schema: https://framework.regen.network/taxonomy/
permissible_values:
PENDING:
text: PENDING
meaning: rft:Pending
title: Pending
description: Attestation is in progress; no verdict has been rendered yet.
APPROVED:
text: APPROVED
meaning: rft:Approved
title: Approved
description: The claim has been reviewed and approved by the attestor.
REJECTED:
text: REJECTED
meaning: rft:Rejected
title: Rejected
description: The claim has been reviewed and rejected by the attestor.
NEEDS_INFO:
text: NEEDS_INFO
meaning: rft:NeedsInfo
title: NeedsInfo
description: The attestor requires additional information or evidence before rendering a verdict.
Loading