Skip to main content

Green Goods Ontology

The formal specification of the Green Goods shared vocabulary: the entities the protocol tracks, the controlled vocabularies each layer spells its own way, the EAS schemas, the constraints the contracts enforce, and the lifecycle state machines. The source of truth is the machine-readable sidecar packages/shared/src/ontology/green-goods-ontology.json; this page is generated from it and CI fails when either drifts from the code.

The ontology currently declares 21 canonical concepts. Availability does not change a term's meaning.

Entities​

EntitySemantic statusAvailabilityCapabilitySurfacesDefinitionLayers
Gardencanonicalavailableimplemented · deployed · active · integratedadmin · client · agent · public · docsA community of gardeners rooted in a place, represented on-chain as an ERC-721 garden token whose ERC-6551 token-bound account holds the garden's treasury, role Hats, and metadata.contracts · indexer (Garden) · shared · docs
Actioncanonicalavailableimplemented · deployed · active · integratedadmin · client · agent · public · docsA documented activity a gardener can perform — the unit of work template (e.g. "Plant native species", "Remove invasive growth").contracts · indexer (Action) · shared · docs
Workcanonicalavailableimplemented · deployed · active · integratedadmin · client · agent · public · docsOne documented instance of an Action performed by a gardener — media, notes, and metadata submitted as an EAS Work attestation for steward review; approval records a separate Work Approval attestation.contracts · shared · docs
Work Approvalcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsThe separate EAS attestation in which a garden steward records approval or rejection of a submitted Work, with feedback, confidence, and verification method. The Work record already exists; this decision never creates it.contracts · shared · docs
Assessmentcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsAn up-front baseline and strategy for a garden — domain, diagnosis, SMART outcome targets, selected Actions, reporting period — authored by an evaluator or steward before work begins, mirrored to a Karma GAP milestone when that module is active; explicitly not a review of submitted Work (that is Work Approval).contracts · shared · docs
Hypercertcanonicalin-buildimplemented · deployed · inactive · partialadmin · client · public · docsAn on-chain claim of impact bundling approved Work into a fractional impact certificate. Funders hold fractions; gardeners hold contribution credit.contracts · indexer (Hypercert) · shared · docs
Vaultcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsA garden's endowment: one ERC-4626 vault per supported asset. Funders deposit and hold the vault's shares, which they can redeem, though a strategy or contract loss can reduce what comes back; the yield is donated onward, by default to the yield resolver, which splits it between the garden's Cookie Jar, Hypercert fraction purchases, and the GOODS treasury per configured ratios.contracts · indexer (GardenVault) · shared · docs
Cookie Jarcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsA garden-scoped emergency or discretionary fund with rate-limited withdrawals. A garden's gardeners can claim from its jar within the configured cap, gated by the gardener Hat; a shared campaign jar admits the addresses on its allowlist instead.contracts · indexer (CampaignCookieJar) · shared · docs
Attestationcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsAn EAS (Ethereum Attestation Service) record. Used for Work submissions, Assessment outcomes, and other off-chain-verifiable claims.contracts · shared · docs
Hatcanonicalavailableimplemented · deployed · active · integratedadmin · client · public · docsA Hats Protocol role token. Determines on-chain authority — steward hats can approve Work; gardener hats can submit Work; evaluator hats can attest.contracts · indexer (Garden) · shared · docs
Seasoncanonicalavailableimplemented · deployed · active · integratedadmin · client · agent · public · docsA garden's main rhythm: a Season-type commitment cycle of the garden's pool, with a name, start and end dates, and the promises scoped to it. It stays a season at every stage, from planned to archived. A pool has at most one open Season at a time, and Campaigns may run beside it. It paces work and is never a countdown.contracts · indexer (CommitmentCycle) · shared · docs
Needcanonicalplannednot-implemented · not-deployed · inactive · not-integratedcommunity · admin · client · public · docsA community-authored statement of a place-based problem paired with a desired outcome. A Need can gather signals, moderation, linked commitments, and verified funding attribution without becoming a commitment or payment itself.spec
Commitment Poolcanonicalavailableimplemented · deployed · active · integratedadmin · client · docsA garden-anchored (or protocol root-garden) pool that registers, curates, and reconciles commitments under a charter.contracts · indexer (CommitmentPool) · spec
Commitment Cyclecanonicalavailableimplemented · deployed · active · integratedadmin · client · docsA bounded run of a pool — a Season or Campaign — seeded with timing and an immutable six-role allocation snapshot at open.contracts · indexer (CommitmentCycle) · spec
Commitment Seriescanonicaldeployed-not-availableimplemented · deployed · active · partialadmin · client · docsThe internal durable, pool-scoped identity for one Offer used over time. It groups ordinary Offer instances without creating obligations automatically, merging history across pools, or becoming a separate product noun.contracts · indexer (CommitmentSeries) · spec
Commitment Provider Exposurecanonicaldeployed-not-availableimplemented · deployed · active · not-integratedadmin · client · docsThe current count of open commitments held by one accountable lead provider in one pool, derived only from self-describing register unit events.indexer (CommitmentProviderExposure) · spec
Commitment Unit Summarycanonicalavailableimplemented · deployed · active · integratedadmin · client · docsExact-label pool or cycle totals for expected, approved, fulfilled, and open commitment units; unlike label hashes are never combined.indexer (CommitmentUnitSummary) · spec
Commitment Series Cycle Summarycanonicaldeployed-not-availableimplemented · deployed · active · not-integratedadmin · client · docsCurrent lifecycle counts for the instances of one commitment series within one cycle.indexer (CommitmentSeriesCycleSummary) · spec
Commitmentcanonicalavailableimplemented · deployed · active · integratedadmin · client · community · docsA module-native promise record (offer or request) with one accountable lead, an optional contributor roster, repeatable action requirements, direction-aware confirmation, unit accounting in a non-transferable register, and evidence/work linkage — deliberately not an EAS attestation.contracts · spec
Commitment Contributorcanonicaldeployed-not-availableimplemented · deployed · active · partialadmin · client · community · docsA person on a commitment's roster whose approved Work or confirmed evidence can earn Hypercert recognition and a contributor payout; one roster member is the accountable lead.contracts · spec
Commitment Payout Plancanonicaldeployed-not-availableimplemented · deployed · active · partialadmin · client · docsA garden-managed split of a fulfilled commitment's declared support into an explicit garden-retained amount and contributor child payouts. Its complete recognition vector is hash-bound, payment weights derive from amounts, and explicit finalization freezes it before dispatch.contracts · indexer (CommitmentPayoutPlan) · shared · spec

Personas​

PersonaHatSurfacesDefinition
Gardenergardeneradmin · client · agent · public · docsA person doing regenerative Work in a garden. Submits Work, holds gardener Hats, receives credit toward Hypercerts and yield splits.
Stewardstewardadmin · client · agent · public · docsA person who stewards a garden — creates Actions, approves Work, configures Vault and Hat hierarchy. Holds the garden's steward Hats (the deployed Operator role).
Evaluatorevaluatoradmin · client · public · docsA person who authors or strengthens Assessments and attests impact methodology or outcomes. Evaluators do not approve or reject submitted Work; that authority belongs to stewards.
Funderfunderadmin · client · public · docsA person or organization who funds a garden's work, from an individual or diaspora supporter to a grantmaker, institution, or crypto ecosystem fund. A funder donates to the garden's cookie jar, endows its vault, or backs the garden through a grant or partnership. A donation is a gift with nothing to withdraw. An endowment is a vault deposit the funder can redeem, less any strategy or contract loss; its yield is donated onward through the garden's configured splits, never paid to the funder. Giving needs no role; a steward or owner may grant the funder Hat, which makes its holder a garden member.
Community Membercommunityclient · public · docsA local resident affected by a garden's Work. Signals or attests that Work exists and is healthy, and helps prioritize future Actions through public signal and conviction flows.

The on-chain hat tree has six roles; the Owner hat carries full garden control but has no dedicated persona — owners act through the steward surfaces.

Supporting terms​

Technical terms kept in this Builders reference and deliberately excluded from the canonical entity and persona sets. Declaring them here preserves their meaning and published glossary links.

TermWhy it is not an entity
DomainThe `domain` controlled vocabulary — the four action domains — not an entity.
EAS (Ethereum Attestation Service)The external attestation protocol; the record it produces is the Attestation entity.
Eight Forms of CapitalThe impact framework behind the `capital` vocabulary, not an entity.
Impact TokenThe broader tokenized-impact concept; the Green Goods implementation of it is Hypercert.
IndicatorThe unit an outcome is measured in, carried inside Assessment fields rather than as its own record.
IPFS (InterPlanetary File System)External storage protocol, referenced by CID from attestations.
Karma GAP (Grantee Accountability Protocol)External reporting protocol, tracked in the integration matrix rather than the entity set.
MDR (Media-Details-Review)The client's three-step submission workflow, not a domain record.
On-ChainA property of where data lives, not something the protocol tracks.
OutcomeA SMART target held inside an Assessment, not a separate record.
OwnerA `garden-role` member with no dedicated persona — see personas_note.
PasskeyAuthentication credential; account infrastructure, not domain vocabulary.
PWA (Progressive Web App)A delivery surface, listed under Surfaces rather than entities.
ResolverThe contract that gates an attestation; declared per schema as `resolver`, not modeled as an entity.
SchemaThe attestation template layer; the sidecar's `schemas` section is its canon.
Smart Account (Account Abstraction)Wallet infrastructure, not domain vocabulary.

The canonical machine ordering is the Capital enum: Social (0), Material (1), Financial (2), Living (3), Intellectual (4), Experiential (5), Spiritual (6), Cultural (7).

Language policy​

Product copy uses the declared terms and aliases. The vocabulary policy owns lint rules and admin/client prompt vocabulary; consult that source for the current lists.

Vocabularies​

Each vocabulary has one canonical member list and a declared expected spelling per layer. The drift gate compares every representation against its source file; deviations are either declared here (layer conventions like the indexer's UNKNOWN sentinel) or recorded in the burn-down baseline.

capital​

Eight Forms of Capital used to tag actions and assessments by the kind of value they create.

Canonical members: SOCIAL (0) · MATERIAL (1) · FINANCIAL (2) · LIVING (3) · INTELLECTUAL (4) · EXPERIENTIAL (5) · SPIRITUAL (6) · CULTURAL (7)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/registries/Action.sol · CapitalSOCIAL, MATERIAL, FINANCIAL, LIVING, INTELLECTUAL, EXPERIENTIAL, SPIRITUAL, CULTURAL
indexerindexerpackages/indexer/schema.graphql · CapitalSOCIAL, MATERIAL, FINANCIAL, LIVING, INTELLECTUAL, EXPERIENTIAL, SPIRITUAL, CULTURAL, UNKNOWNUNKNOWN is the indexer's permanent fallback sentinel for unmapped on-chain values — declared, not drift.
shared-enumsharedpackages/shared/src/types/domain.ts · CapitalSOCIAL=0, MATERIAL=1, FINANCIAL=2, LIVING=3, INTELLECTUAL=4, EXPERIENTIAL=5, SPIRITUAL=6, CULTURAL=7
capital-typesharedpackages/shared/src/types/hypercerts.ts · CapitalTypesocial, material, financial, living, intellectual, experiential, spiritual, culturalOrdered deliberately: the union is declared here in canonical machine order because index-based bridges between Capital and CapitalType lists are a live bug risk. The current file deviates (living-first presentational order) — baselined until reordered or a mapping function lands.
  • Mapping capital-enum-to-capital-type (shared-enum → capital-type; explicit; total; bijective): SOCIAL → social, MATERIAL → material, FINANCIAL → financial, LIVING → living, INTELLECTUAL → intellectual, EXPERIENTIAL → experiential, SPIRITUAL → spiritual, CULTURAL → cultural.
    • Code anchor: none — no runtime mapping function exists yet.
    • No runtime mapping function exists yet — see known_issues.missing-capital-mapping-fn.

domain​

Category of regenerative work — where the work happens. Four production domains; a domain is neither an outcome nor a capital.

Canonical members: SOLAR (0) · AGRO (1) · EDU (2) · WASTE (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/registries/Action.sol · DomainSOLAR, AGRO, EDU, WASTE
indexerindexerpackages/indexer/schema.graphql · DomainSOLAR, AGRO, EDU, WASTE, UNKNOWNUNKNOWN is the indexer's permanent fallback sentinel — declared, not drift.
shared-enumsharedpackages/shared/src/types/domain.ts · DomainSOLAR=0, AGRO=1, EDU=2, WASTE=3
action-domainsharedpackages/shared/src/types/hypercerts.ts · ActionDomainsolar, waste, agroforestry, educationLong-form lowercase spellings used in hypercert metadata. Mutual credit was retired as a domain on 2026-10-18; commitment pooling and promises serve that need. Hypercert metadata minted before then may carry mutual_credit, which only meant that none of the bundled work named a domain.
slug-prefixsharedpackages/shared/src/hooks/action/useActionForm.ts · DOMAIN_SLUG_PREFIXsolar, agro, edu, wasteShort lowercase prefixes baked into immutable on-chain action slugs (agro., edu.).
  • Mapping domain-to-action-domain (solidity → action-domain; explicit; total; bijective): SOLAR → solar, AGRO → agroforestry, EDU → education, WASTE → waste.

    • Code anchor: packages/shared/src/modules/data/hypercerts-filters.ts
  • Mapping action-domain-vs-slug-prefix (action-domain → slug-prefix; identity; partial): identity (same spelling on both sides).

    • Code anchor: none — no runtime mapping function exists yet.
    • The two lowercase spellings of the same domain must converge on one word per member; agroforestry/education vs agro/edu currently diverge — baselined.

garden-role​

The six per-garden Hats roles that gate every protocol permission. The enum member name is compile-time only — GardenRole never appears in the ABI, so callers pass the pinned index.

Canonical members: Gardener (0) · Evaluator (1) · Steward (2) · Owner (3) · Funder (4) · Community (5)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/IHatsModule.sol · GardenRoleGardener, Evaluator, Steward, Owner, Funder, Community
shared-idssharedpackages/shared/src/utils/blockchain/garden-roles.ts · GARDEN_ROLE_IDSgardener=0, evaluator=1, steward=2, owner=3, funder=4, community=5Key order and numeric ids must track the Solidity enum exactly — these ids go into contract calls.

transfer-restriction​

Garden NFT transfer mode.

Canonical members: Unrestricted (0) · OwnerOnly (1) · Locked (2)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/tokens/Garden.sol · TransferRestrictionUnrestricted, OwnerOnly, Locked

badge-rule​

GreenWill badge eligibility rule kinds, proven from on-chain state at claim time.

Canonical members: None (0) · Hat (1) · WorkAttestation (2) · VaultShares (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/registries/GreenWill.sol · BadgeRuleNone, Hat, WorkAttestation, VaultShares

ens-name-type​

Kind of *.greengoods.eth subname being registered.

Canonical members: Gardener (0) · Garden (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/registries/ENS.sol · NameTypeGardener, Garden

weight-scheme​

Conviction-voting weight scheme selected immutably at garden mint.

Canonical members: Linear (0) · Exponential (1) · Power (2)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/IGardensModule.sol · WeightSchemeLinear, Exponential, Power
indexerindexerpackages/indexer/schema.graphql · WeightSchemeLINEAR, EXPONENTIAL, POWER
sharedsharedpackages/shared/src/types/gardens-community.ts · WeightSchemeLinear=0, Exponential=1, Power=2Genuine raw uint8 decode path (Number(weightSchemeRaw) as WeightScheme) — ordering is load-bearing and correct.

signal-pool-type​

Name collision

Solidity carries two unrelated PoolType enums: the live Gardens V2 signal-pool vocabulary (signal-pool-type, ActionSignal/HypercertSignal) and the commitment-pooling anchor vocabulary (commitment-pool-type, Garden/Protocol). They are separate vocabularies in this ontology — never merge or cross-map them.

Kind of Gardens V2 conviction signal pool attached to a garden. Distinct from the commitment-pooling PoolType (Garden/Protocol) — same Solidity identifier, different vocabulary; never merge them.

Canonical members: ActionSignal (0) · HypercertSignal (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/IGardensModule.sol · PoolTypeActionSignal, HypercertSignal
indexerindexerpackages/indexer/schema.graphql · PoolTypeACTION_SIGNAL, HYPERCERT_SIGNALCurrently {HYPERCERT, ACTION} — inverted vs chain and referenced by zero entity fields (dead surface). Baselined; fix direction is deletion or correction alongside the shared enum.
sharedsharedpackages/shared/src/types/gardens-community.ts · PoolTypeActionSignal=0, HypercertSignal=1Currently {Hypercert = 0, Action = 1} — inverted vs chain. Verified latent, not live: pool types are assigned by address identity (annotateGardenSignalPools), never decoded from a raw uint8. Baselined with a mandatory blast-radius re-check before burn-down.

vault-event-type​

Vault history event kinds recorded by the indexer.

Canonical members: DEPOSIT · WITHDRAW · HARVEST · EMERGENCY_PAUSED

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · VaultEventTypeDEPOSIT, WITHDRAW, HARVEST, EMERGENCY_PAUSED
sharedsharedpackages/shared/src/types/vaults.ts · VaultEventTypeDEPOSIT, WITHDRAW, HARVEST, EMERGENCY_PAUSED

hypercert-status​

Lifecycle status of an indexed hypercert.

Canonical members: ACTIVE · CLAIMED · SOLD · UNKNOWN

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · HypercertStatusACTIVE, CLAIMED, SOLD, UNKNOWNSOLD is declared but never assigned by any handler (marketplace is outside the indexing boundary).
sharedsharedpackages/shared/src/types/hypercerts.ts · HypercertStatusactive, claimed, sold, unknown

hypercert-bundle-kind​

Metadata discriminator separating legacy Work bundles from commitment-backed Hypercert bundles.

Canonical members: WORK_LEGACY · COMMITMENT

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · HypercertBundleKindWORK_LEGACY, COMMITMENT
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · HypercertBundleKindWORK_LEGACY, COMMITMENT

work-display-status​

Canonical display status for work items across the UI — protocol states plus client-derived offline/sync states.

Canonical members: approved · rejected · pending · syncing · uploading · sync_failed · offline

RepresentationLayerSourceExpected membersNote
shared-unionsharedpackages/shared/src/types/domain.ts · WorkDisplayStatusapproved, rejected, pending, syncing, uploading, sync_failed, offline
enhanced-work-approvalsharedpackages/shared/src/hooks/work/useWorkApprovals.ts · EnhancedWorkApproval.statusapproved, rejected, pending, syncing, uploading, sync_failed, offlineDeclared as the canonical union; the current file carries a divergent five-value list (failed instead of sync_failed; missing uploading/offline) — baselined.
offline-work-itemsharedpackages/shared/src/types/offline.ts · OfflineWorkItem.statusapproved, rejected, pending, syncing, uploading, sync_failed, offlineDeclared as the canonical union; the current file carries a divergent four-value list — baselined pending status-union consolidation.
hypercert-sync-statussharedpackages/shared/src/hooks/hypercerts/useHypercerts.ts · HypercertSyncStatusapproved, rejected, pending, syncing, uploading, sync_failed, offlineDeclared as the canonical union; the current file carries a divergent four-value sync list — baselined pending status-union consolidation.

cynefin-phase​

Cynefin complexity phase classifying an assessment's operating environment.

Canonical members: CLEAR (0) · COMPLICATED (1) · COMPLEX (2) · CHAOTIC (3)

RepresentationLayerSourceExpected membersNote
sharedsharedpackages/shared/src/types/domain.ts · CynefinPhaseCLEAR=0, COMPLICATED=1, COMPLEX=2, CHAOTIC=3

confidence​

Four-value verification confidence carried on work approvals (on-chain uint8, bounded to 3).

Canonical members: NONE (0) · LOW (1) · MEDIUM (2) · HIGH (3)

RepresentationLayerSourceExpected membersNote
sharedsharedpackages/shared/src/types/domain.ts · ConfidenceNONE=0, LOW=1, MEDIUM=2, HIGH=3

verification-method​

Verification method bitmask flags on work approvals (uint8, bounded to 15).

Canonical members: HUMAN · IOT · ONCHAIN · AGENT

Values are explicit (not index-derived) for this vocabulary.

RepresentationLayerSourceExpected membersNote
sharedsharedpackages/shared/src/types/domain.ts · VerificationMethodHUMAN=1, IOT=2, ONCHAIN=4, AGENT=8Bitmask members declared with shift expressions (1 << n) in source; the extractor evaluates them.

action-type​

Action archetype tags used in hypercert metadata and filtering.

Canonical members: hub_session · workshop · node_deployment · cleanup · recycling · composting · planting · nursery · maintenance · training · certification · commitment · exchange

RepresentationLayerSourceExpected membersNote
sharedsharedpackages/shared/src/types/hypercerts.ts · ActionTypehub_session, workshop, node_deployment, cleanup, recycling, composting, planting, nursery, maintenance, training, certification, commitment, exchange

job-kind​

Offline job-queue mutation kinds (the write-ahead ledger's vocabulary).

Canonical members: work · approval · commitmentSeries · commitment · claim · evidence · workLink · confirmation

RepresentationLayerSourceExpected membersNote
sharedsharedpackages/shared/src/types/job-queue.ts · JobKindMapwork, approval, commitmentSeries, commitment, claim, evidence, workLink, confirmation

commitment-pool-type​

Name collision

Solidity carries two unrelated PoolType enums: the live Gardens V2 signal-pool vocabulary (signal-pool-type, ActionSignal/HypercertSignal) and the commitment-pooling anchor vocabulary (commitment-pool-type, Garden/Protocol). They are separate vocabularies in this ontology — never merge or cross-map them.

Commitment-pooling pool anchor kind. Name-collides with the live Gardens V2 signal-pool PoolType — the sidecar keeps them as separate vocabularies on purpose.

Canonical members: Garden (0) · Protocol (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · PoolTypeGarden, Protocol
indexerindexerpackages/indexer/schema.graphql · CommitmentPoolTypeUNKNOWN, GARDEN, PROTOCOLUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentPoolTypeUNKNOWN, GARDEN, PROTOCOL

pool-state​

Commitment pool lifecycle — every state is on-chain.

Canonical members: None (0) · NotReady (1) · Ready (2) · Open (3) · Paused (4) · Closed (5) · Composted (6)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · PoolStateNone, NotReady, Ready, Open, Paused, Closed, Composted
indexerindexerpackages/indexer/schema.graphql · CommitmentPoolStateUNKNOWN, NOT_READY, READY, OPEN, PAUSED, CLOSED, COMPOSTEDUNKNOWN represents the Solidity None sentinel and unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentPoolStateUNKNOWN, NOT_READY, READY, OPEN, PAUSED, CLOSED, COMPOSTED

cycle-type​

Cycle kinds: one open Season per pool; Campaigns may overlap.

Canonical members: Season (0) · Campaign (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CycleTypeSeason, Campaign
indexerindexerpackages/indexer/schema.graphql · CommitmentCycleTypeUNKNOWN, SEASON, CAMPAIGNUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentCycleTypeUNKNOWN, SEASON, CAMPAIGN

cycle-state​

On-chain cycle states; Draft lives in app IndexedDB and InProgress/Reviewing are derived from events.

Canonical members: None (0) · Seeded (1) · Open (2) · Reconciled (3) · Composted (4) · Cancelled (5)

Derived states (never stored): Draft · InProgress · Reviewing

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CycleStateNone, Seeded, Open, Reconciled, Composted, Cancelled
indexerindexerpackages/indexer/schema.graphql · CommitmentCycleStateUNKNOWN, SEEDED, OPEN, RECONCILED, COMPOSTED, CANCELLEDUNKNOWN represents the Solidity None sentinel and unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentCycleStateUNKNOWN, SEEDED, OPEN, RECONCILED, COMPOSTED, CANCELLED

commitment-direction​

Whether a commitment offers capacity or requests it; drives the direction-aware default confirmer.

Canonical members: Offer (0) · Request (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CommitmentDirectionOffer, Request
indexerindexerpackages/indexer/schema.graphql · CommitmentDirectionUNKNOWN, OFFER, REQUESTUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentDirectionUNKNOWN, OFFER, REQUEST

commitment-type​

Commitment archetypes; DomainImpact keeps the full Work → WorkApproval path, the others confirm via counterparty.

Canonical members: DomainImpact (0) · SupportService (1) · SeasonCampaign (2) · StewardCaptured (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CommitmentTypeDomainImpact, SupportService, SeasonCampaign, StewardCaptured
indexerindexerpackages/indexer/schema.graphql · CommitmentKindUNKNOWN, DOMAIN_IMPACT, SUPPORT_SERVICE, SEASON_CAMPAIGN, STEWARD_CAPTUREDUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentKindUNKNOWN, DOMAIN_IMPACT, SUPPORT_SERVICE, SEASON_CAMPAIGN, STEWARD_CAPTURED

commitment-state​

On-chain commitment states; Draft is app-side and Active/EvidenceSubmitted/PartiallyApproved/Reconciled are derived from module events.

Canonical members: None (0) · Offered (1) · Requested (2) · Accepted (3) · ReadyForConfirmation (4) · Fulfilled (5) · Cancelled (6) · Expired (7) · Disputed (8)

Derived states (never stored): Draft · Active · EvidenceSubmitted · PartiallyApproved · Reconciled

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CommitmentStateNone, Offered, Requested, Accepted, ReadyForConfirmation, Fulfilled, Cancelled, Expired, Disputed
indexerindexerpackages/indexer/schema.graphql · CommitmentOnchainStateUNKNOWN, OFFERED, REQUESTED, ACCEPTED, READY_FOR_CONFIRMATION, FULFILLED, CANCELLED, EXPIRED, DISPUTEDUNKNOWN represents the Solidity None sentinel and unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentOnchainStateUNKNOWN, OFFERED, REQUESTED, ACCEPTED, READY_FOR_CONFIRMATION, FULFILLED, CANCELLED, EXPIRED, DISPUTED

claim-type​

Immutable claimant-eligibility class set at commitment creation; runtime claim kind must equal it.

Canonical members: Garden (0) · Individual (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · ClaimTypeGarden, Individual
indexerindexerpackages/indexer/schema.graphql · CommitmentClaimTypeUNKNOWN, GARDEN, INDIVIDUALUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentClaimTypeUNKNOWN, GARDEN, INDIVIDUAL

contributor-policy​

How contributor membership is established before the commitment roster freezes.

Canonical members: Open (0) · LeadManaged (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · ContributorPolicyOpen, LeadManaged
indexerindexerpackages/indexer/schema.graphql · CommitmentContributorPolicyUNKNOWN, OPEN, LEAD_MANAGEDUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentContributorPolicyUNKNOWN, OPEN, LEAD_MANAGED

claim-mode​

Whether claiming transitions immediately (Open) or awaits steward acceptance (ApprovalGated).

Canonical members: Open (0) · ApprovalGated (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · ClaimModeOpen, ApprovalGated
indexerindexerpackages/indexer/schema.graphql · CommitmentClaimModeUNKNOWN, OPEN, APPROVAL_GATEDUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentClaimModeUNKNOWN, OPEN, APPROVAL_GATED

dispute-resolution​

Steward-only dispute outcomes; RestorePrevious replays the stored pre-dispute state.

Canonical members: RestorePrevious (0) · Fulfilled (1) · Cancelled (2) · Expired (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · DisputeResolutionRestorePrevious, Fulfilled, Cancelled, Expired

consideration-rail​

Consideration reference rail: ArbitrumExternal records steward-paid jar/treasury payments; CeloSettlement is consumed only by the SettlementModule. Direction is carried by Commitment.payerGarden, not by the rail.

Canonical members: None (0) · ArbitrumExternal (1) · CeloSettlement (2)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · ConsiderationRailNone, ArbitrumExternal, CeloSettlement
indexerindexerpackages/indexer/schema.graphql · CommitmentConsiderationRailUNKNOWN, NONE, ARBITRUM_EXTERNAL, CELO_SETTLEMENTUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentConsiderationRailUNKNOWN, NONE, ARBITRUM_EXTERNAL, CELO_SETTLEMENT

accounting-state​

CommitmentRegistry unit-class accounting states (non-transferable, ERC-1155-style).

Canonical members: Registered (0) · Committed (1) · Released (2) · Fulfilled (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentRegistry.sol · AccountingStateRegistered, Committed, Released, Fulfilled

commitment-payout-plan-status​

Derived progress of a frozen commitment payout plan across its contributor child disbursements.

Canonical members: Draft (0) · Pending (1) · Partial (2) · Complete (3) · Failed (4)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · PayoutPlanStatusDraft, Pending, Partial, Complete, Failed
indexerindexerpackages/indexer/schema.graphql · CommitmentPayoutPlanStatusDRAFT, PENDING, PARTIAL, COMPLETE, FAILED

confirmation-path​

The authority path that produced fulfillment provenance. PoolFallback is local-garden authority; ProtocolFallback is an explicitly selected Green Goods protocol-garden authority.

Canonical members: Ordinary (0) · PoolFallback (1) · ProtocolFallback (2)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · ConfirmationPathOrdinary, PoolFallback, ProtocolFallback
indexerindexerpackages/indexer/schema.graphql · CommitmentConfirmationPathUNKNOWN, ORDINARY, POOL_FALLBACK, PROTOCOL_FALLBACKUNKNOWN represents the Solidity sentinel or unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentConfirmationPathUNKNOWN, ORDINARY, POOL_FALLBACK, PROTOCOL_FALLBACK

disbursement-state​

Settlement disbursement lifecycle. The GraphQL mirror prepends UNKNOWN and otherwise preserves the Solidity states.

Canonical members: None (0) · Queued (1) · Dispatched (2) · Confirmed (3) · Failed (4) · Cancelled (5)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · DisbursementStateNone, Queued, Dispatched, Confirmed, Failed, Cancelled
indexerindexerpackages/indexer/schema.graphql · DisbursementStateUNKNOWN, QUEUED, DISPATCHED, CONFIRMED, FAILED, CANCELLEDUNKNOWN represents the Solidity None sentinel and unexpected values.

disbursement-kind​

Purpose of an outbound settlement entry. ContributorConsideration and GardenBeneficiary are the two immutable provider-payment shapes; LoanPrincipal is the records-only Commitment Credit companion shape; Refund returns a steward-confirmed member deposit from the garden Safe through the ordinary settlement rail.

Canonical members: ContributorConsideration (0) · Funding (1) · LoanPrincipal (2) · GardenBeneficiary (3) · Refund (4)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · DisbursementKindContributorConsideration, Funding, LoanPrincipal, GardenBeneficiary, Refund
indexerindexerpackages/indexer/schema.graphql · DisbursementKindUNKNOWN, CONTRIBUTOR_CONSIDERATION, FUNDING, LOAN_PRINCIPAL, GARDEN_BENEFICIARY, REFUNDUNKNOWN is the indexer's fail-closed fallback for unmapped values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · DisbursementKindUNKNOWN, CONTRIBUTOR_CONSIDERATION, FUNDING, LOAN_PRINCIPAL, GARDEN_BENEFICIARY, REFUND

funding-route​

Typed funding route for non-commitment settlement entries; ProtocolToGarden is the only initial route.

Canonical members: None (0) · ProtocolToGarden (1)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · FundingRouteNone, ProtocolToGarden
indexerindexerpackages/indexer/schema.graphql · FundingRouteUNKNOWN, NONE, PROTOCOL_TO_GARDENUNKNOWN is the indexer's fail-closed fallback for unmapped values.

funding-state​

Lifecycle of one member-funded priced-Offer claim. Pledged records intent; DepositRecorded records the full steward-confirmed Safe deposit; Consumed binds it to the accepted claimant; Closed follows completed delivery; RefundQueued and Refunded reuse one persistent settlement child; Withdrawn means no recorded deposit was owed.

Canonical members: None (0) · Pledged (1) · DepositRecorded (2) · Consumed (3) · Closed (4) · RefundQueued (5) · Refunded (6) · Withdrawn (7)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · FundingStateNone, Pledged, DepositRecorded, Consumed, Closed, RefundQueued, Refunded, Withdrawn
indexerindexerpackages/indexer/schema.graphql · FundingStateUNKNOWN, PLEDGED, DEPOSIT_RECORDED, CONSUMED, CLOSED, REFUND_QUEUED, REFUNDED, WITHDRAWNUNKNOWN represents the Solidity None sentinel and unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · FundingStateUNKNOWN, PLEDGED, DEPOSIT_RECORDED, CONSUMED, CLOSED, REFUND_QUEUED, REFUNDED, WITHDRAWN

commitment-settlement-flow​

Read-model direction derived from immutable payer and provider gardens plus the write-once protocol garden. It describes Green Goods settlement intent, not observation of later Celo token circulation.

Canonical members: Internal · ProtocolToGarden · GardenToProtocol · GardenToGarden

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · CommitmentSettlementFlowUNKNOWN, INTERNAL, PROTOCOL_TO_GARDEN, GARDEN_TO_PROTOCOL, GARDEN_TO_GARDENUNKNOWN is retained until the protocol garden configuration is observed.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentSettlementFlowUNKNOWN, INTERNAL, PROTOCOL_TO_GARDEN, GARDEN_TO_PROTOCOL, GARDEN_TO_GARDEN

loan-state​

Records-only pool-credit loan lifecycle: Requested → Approved → Disbursed → Repaid, with recoverable Defaulted and pre-disbursement Cancelled. Default is not terminal — later repayment records LoanRepaid(recoveredFromDefault). The Repaying overlay is derived by shared consumers from indexed repayment amounts while repayment sits between zero and principal + feeAmount and is never stored as a contract or indexer hard state.

Canonical members: None (0) · Requested (1) · Approved (2) · Disbursed (3) · Repaid (4) · Defaulted (5) · Cancelled (6)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICreditRegistry.sol · LoanStateNone, Requested, Approved, Disbursed, Repaid, Defaulted, Cancelled
indexerindexerpackages/indexer/schema.graphql · LoanStateREQUESTED, APPROVED, DISBURSED, REPAID, DEFAULTED, CANCELLED
sharedsharedpackages/shared/src/modules/commitment-pooling/types-credit.ts · LoanStateREQUESTED, APPROVED, DISBURSED, REPAID, DEFAULTED, CANCELLED

loan-rail​

Disbursement rail recorded on a loan and projected by the CreditRegistry indexer read model. Jar and Treasury are steward-attested Arbitrum-side records; GDollarSettlement binds the loan to its one Confirmed SettlementModule LoanPrincipal child. Repayment recording is Jar/Treasury only — the G$ rail reverts GDollarRepaymentDisabled until a bounded authenticated receipt policy clears its gates.

Canonical members: None (0) · Jar (1) · Treasury (2) · GDollarSettlement (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICreditRegistry.sol · LoanRailNone, Jar, Treasury, GDollarSettlement
indexerindexerpackages/indexer/schema.graphql · LoanRailNONE, JAR, TREASURY, GDOLLAR_SETTLEMENT
sharedsharedpackages/shared/src/modules/commitment-pooling/types-credit.ts · LoanRailNONE, JAR, TREASURY, GDOLLAR_SETTLEMENT

failure-code​

Stored settlement failure taxonomy used for deterministic recovery and steward rendering.

Canonical members: None (0) · GardenRouteUnavailable (1) · InvalidRecipient (2) · BatchSizeExceeded (3) · TransferAmountExceeded (4) · BatchAmountExceeded (5) · PeriodCapExceeded (6) · RouteRejected (7) · RouteReverted (8) · UnsupportedReceiverPaysFee (9) · FeeQuoteExceeded (10) · BalanceDeltaMismatch (11) · SourceStranded (12)

RepresentationLayerSourceExpected membersNote
source-soliditysoliditypackages/contracts/src/interfaces/ISettlementModule.sol · FailureCodeNone, GardenRouteUnavailable, InvalidRecipient, BatchSizeExceeded, TransferAmountExceeded, BatchAmountExceeded, PeriodCapExceeded, RouteRejected, RouteReverted, UnsupportedReceiverPaysFee, FeeQuoteExceeded, BalanceDeltaMismatch, SourceStranded
executor-soliditysoliditypackages/contracts/src/interfaces/ICeloSettlementExecutor.sol · FailureCodeNone, GardenRouteUnavailable, InvalidRecipient, BatchSizeExceeded, TransferAmountExceeded, BatchAmountExceeded, PeriodCapExceeded, RouteRejected, RouteReverted, UnsupportedReceiverPaysFee, FeeQuoteExceeded, BalanceDeltaMismatch
  • Mapping executor-failure-codes-to-source (executor-solidity → source-solidity; identity; total; unmapped on the right: SourceStranded): identity (same spelling on both sides).
    • Code anchor: none — no runtime mapping function exists yet.
    • SourceStranded is a source-only recovery disposition and is never accepted from the executor over CCIP.

result-status​

Celo executor result stored in Solidity; GraphQL exposes the same outcomes as SettlementExecutionStatus with an UNKNOWN sentinel.

Canonical members: None (0) · Success (1) · Failed (2)

RepresentationLayerSourceExpected membersNote
executor-soliditysoliditypackages/contracts/src/interfaces/ICeloSettlementExecutor.sol · ResultStatusNone, Success, Failed

acknowledgment-deferral-code​

Why an executor acknowledgment could not be sent immediately without changing the stored execution result.

Canonical members: None (0) · QuoteFailed (1) · FeeReserveLow (2) · SendFailed (3)

RepresentationLayerSourceExpected membersNote
executor-soliditysoliditypackages/contracts/src/interfaces/ICeloSettlementExecutor.sol · AcknowledgmentDeferralCodeNone, QuoteFailed, FeeReserveLow, SendFailed

settlement-execution-status​

GraphQL execution-result mirror with an explicit UNKNOWN sentinel.

Canonical members: UNKNOWN · SUCCESS · FAILED

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · SettlementExecutionStatusUNKNOWN, SUCCESS, FAILED

commitment-claim-request-state​

Indexer lifecycle of a commitment claim request, including peer supersession after one request is accepted.

Canonical members: PENDING · ACCEPTED · DECLINED · SUPERSEDED

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · CommitmentClaimRequestStatePENDING, ACCEPTED, DECLINED, SUPERSEDED
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentClaimRequestStatePENDING, ACCEPTED, DECLINED, SUPERSEDED

commitment-event-type​

Normalized event vocabulary for commitment-pooling history and read-model aggregation.

Canonical members: MODULE_UPDATED · MODULE_DEPENDENCY_UPDATED · MODULE_SCHEMA_UID_UPDATED · MODULE_PAUSE_STATUS_CHANGED · POOL_REGISTERED · POOL_CHARTER_UPDATED · POOL_READY · POOL_OPENED · POOL_PAUSED · POOL_RESUMED · POOL_CLOSED · POOL_COMPOSTED · POOL_REOPENED · CLASS_REGISTERED · PROVIDER_OPEN_COMMITMENT_CAP_UPDATED · CYCLE_SEEDED · CYCLE_OPENED · CYCLE_CLOSED · CYCLE_COMPOSTED · CYCLE_CANCELLED · CREATED · CONSIDERATION_DECLARED · VALUE_DECLARED · CONFIRMER_RULE_SET · CLAIM_REQUESTED · CLAIM_DECLINED · ACCEPTED · EXCHANGE_ACCEPTED · COMMITMENT_SERIES_CREATED · COMMITMENT_SERIES_METADATA_UPDATED · COMMITMENT_SERIES_RESTED · COMMITMENT_SERIES_RESUMED · COMMITMENT_SERIES_RETIRED · CONTRIBUTOR_ADDED · CONTRIBUTOR_REMOVED · CONTRIBUTOR_REQUIREMENT_ASSIGNED · CONTRIBUTOR_ROSTER_FROZEN · WORK_LINKED · WORK_UNLINKED · APPROVED_WORK_COUNTED · APPROVED_WORK_REVERSED · EVIDENCE_ATTACHED · ASSESSMENT_ATTACHED · READY_FOR_CONFIRMATION · CONFIRMATION_RECORDED · FULFILLED · CANCELLED · EXPIRED · DISPUTED · DISPUTE_RESOLVED · CONSIDERATION_PAID · UNITS_COMMITTED · UNITS_RELEASED · UNITS_FULFILLED · FUNDING_PLEDGED · FUNDING_DEPOSIT_RECORDED · FUNDING_CONSUMED · FUNDING_WITHDRAWN

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · CommitmentEventTypeMODULE_UPDATED, MODULE_DEPENDENCY_UPDATED, MODULE_SCHEMA_UID_UPDATED, MODULE_PAUSE_STATUS_CHANGED, POOL_REGISTERED, POOL_CHARTER_UPDATED, POOL_READY, POOL_OPENED, POOL_PAUSED, POOL_RESUMED, POOL_CLOSED, POOL_COMPOSTED, POOL_REOPENED, CLASS_REGISTERED, PROVIDER_OPEN_COMMITMENT_CAP_UPDATED, CYCLE_SEEDED, CYCLE_OPENED, CYCLE_CLOSED, CYCLE_COMPOSTED, CYCLE_CANCELLED, CREATED, CONSIDERATION_DECLARED, VALUE_DECLARED, CONFIRMER_RULE_SET, CLAIM_REQUESTED, CLAIM_DECLINED, ACCEPTED, EXCHANGE_ACCEPTED, COMMITMENT_SERIES_CREATED, COMMITMENT_SERIES_METADATA_UPDATED, COMMITMENT_SERIES_RESTED, COMMITMENT_SERIES_RESUMED, COMMITMENT_SERIES_RETIRED, CONTRIBUTOR_ADDED, CONTRIBUTOR_REMOVED, CONTRIBUTOR_REQUIREMENT_ASSIGNED, CONTRIBUTOR_ROSTER_FROZEN, WORK_LINKED, WORK_UNLINKED, APPROVED_WORK_COUNTED, APPROVED_WORK_REVERSED, EVIDENCE_ATTACHED, ASSESSMENT_ATTACHED, READY_FOR_CONFIRMATION, CONFIRMATION_RECORDED, FULFILLED, CANCELLED, EXPIRED, DISPUTED, DISPUTE_RESOLVED, CONSIDERATION_PAID, UNITS_COMMITTED, UNITS_RELEASED, UNITS_FULFILLED, FUNDING_PLEDGED, FUNDING_DEPOSIT_RECORDED, FUNDING_CONSUMED, FUNDING_WITHDRAWN

commitment-unit-scope​

Read-model grouping boundary for exact-label commitment-unit summaries.

Canonical members: POOL · CYCLE

RepresentationLayerSourceExpected membersNote
indexerindexerpackages/indexer/schema.graphql · CommitmentUnitScopePOOL, CYCLE
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentUnitScopePOOL, CYCLE

commitment-series-state​

Lifecycle of the internal durable identity for one Offer used over time in one pool. Retired is terminal; instance lifecycles remain independent.

Canonical members: None (0) · Active (1) · Resting (2) · Retired (3)

RepresentationLayerSourceExpected membersNote
soliditysoliditypackages/contracts/src/interfaces/ICommitmentPoolingModule.sol · CommitmentSeriesStateNone, Active, Resting, Retired
indexerindexerpackages/indexer/schema.graphql · CommitmentSeriesStateUNKNOWN, ACTIVE, RESTING, RETIREDUNKNOWN represents the Solidity None sentinel and unexpected values.
sharedsharedpackages/shared/src/modules/commitment-pooling/types-vocabulary.ts · CommitmentSeriesStateUNKNOWN, ACTIVE, RESTING, RETIRED

Specified vocabularies without an implemented source​

These vocabularies are canonical specifications whose declared implementation anchor has not arrived. The gate watches each anchor and requires the source status and representations to be updated when it lands.

EAS Schemas​

assessment — Green Goods Assessment v2​

source: implemented · revocable: false · resolver: packages/contracts/src/resolvers/Assessment.sol

FieldType
titlestring
descriptionstring
assessmentConfigCIDstring
domainuint8
startDateuint256
endDateuint256
locationstring

work — Green Goods Work Submission​

source: implemented · revocable: false · resolver: packages/contracts/src/resolvers/Work.sol

FieldType
actionUIDuint256
titlestring
feedbackstring
metadatastring
mediastring[]

workApproval — Green Goods Work Approval​

source: implemented · revocable: false · resolver: packages/contracts/src/resolvers/WorkApproval.sol

FieldType
actionUIDuint256
workUIDbytes32
approvedbool
feedbackstring
confidenceuint8
verificationMethoduint8
reviewNotesCIDstring

badge — GreenGoodsBadge​

source: implemented · revocable: true · resolver: none

Registered via the standalone badge-schemas path outside config/schemas.json; the only revocable Green Goods schema, with no resolver. Records no canonical entity: GreenWill badging is a demonstration sidecar, not part of the v1 entity set.

FieldType
badgeTypestring
recipientaddress
earnedAtuint40
evidenceUristring
tieruint8

assessmentV3 — Green Goods Assessment v3​

source: implemented · revocable: false · resolver: none

Assessment v2 fields plus assessmentKind, cycleId, and baselineUID; one of exactly two new EAS registrations in the commitment-pooling track.

FieldType
titlestring
descriptionstring
assessmentConfigCIDstring
domainuint8
startDateuint256
endDateuint256
locationstring
assessmentKinduint8
cycleIduint256
baselineUIDbytes32

communityTestimony — Green Goods Community Testimony​

source: implemented · revocable: false · resolver: none

Community-Hat-gated testimony attached to a commitment; the second of exactly two new EAS registrations. Records no canonical entity yet: community testimony is specified but has no entity until the surface is designed.

FieldType
commitmentIduint256
titlestring
testimonyCIDstring

need — Green Goods Need​

source: specified · revocable: true · planned resolver: NeedsResolver

Root Needs use EAS recipient as the canonical garden, refUID zero, and expirationTime zero. NeedsResolver authorizes the attester through the recipient garden's Community role.

FieldType
statementCIDstring
desiredOutcomeCIDstring
horizonuint8
mediaCIDstring

needSignal — Green Goods Need Signal​

source: specified · revocable: true · planned resolver: NeedsResolver

Child signal records use EAS recipient as the garden, refUID as the exact live same-garden Need, and expirationTime zero. Readers derive one current direction per attester through the canonical latest-winner rule.

FieldType
supportbool

needStatus — Green Goods Need Status​

source: specified · revocable: false · planned resolver: NeedsResolver

Steward-authored child moderation records use EAS recipient as the garden, refUID as the exact live same-garden Need, and expirationTime zero. mergedIntoNeedUID remains custom data because it is a second Need relationship.

FieldType
statusuint8
domainsuint8[]
mergedIntoNeedUIDbytes32
noteCIDstring

fundingAttribution — Green Goods Funding Attribution​

source: specified · revocable: false · planned resolver: FundingAttributionResolver

Ungated child funding records use EAS recipient as the garden, refUID as the exact live same-garden Need, and expirationTime zero. FundingAttributionResolver remains separate from NeedsResolver and the joined reader verifies canonical receipts before display.

FieldType
chainIduint256
txHashbytes32
tokenaddress
amountuint256
railuint8

Constraints​

Cross-layer invariants and where they are enforced. This catalog is documentation-grade: the drift gate verifies the anchors exist, not the semantics — the contracts and their tests own the semantics.

  • domain-closed-set · closed-set · implemented — Action domains form a closed four-member set; resolvers reject domain values above 3 and garden domain masks are validated as 4-bit. (enforced at: packages/contracts/src/registries/Action.sol:28-34, packages/contracts/src/resolvers/Assessment.sol:134-136)
  • work-attester-role · domain-range · implemented — A Work attestation's attester must be a gardener or steward of the recipient garden, and the referenced action must exist, be started, not be expired, and belong to a domain enabled on that garden. (enforced at: packages/contracts/src/resolvers/Work.sol:87-139)
  • approval-steward-only · domain-range · implemented — Only a steward of the garden may attest a Work Approval, and the approval's actionUID and recipient must match the referenced Work attestation. (enforced at: packages/contracts/src/resolvers/WorkApproval.sol:115-177)
  • approval-no-self-attestation · disjoint · implemented — The approver and the work attester must be different accounts — self-approval reverts. (enforced at: packages/contracts/src/resolvers/WorkApproval.sol#SelfAttestation)
  • assessment-author-role · domain-range · implemented — An Assessment attester must be an evaluator or steward of the recipient garden. (enforced at: packages/contracts/src/resolvers/Assessment.sol:118-122)
  • yield-split-sum · sum · implemented — The three-way yield split (CookieJar / Hypercert fractions / Juicebox) must sum to exactly 10000 bps. (enforced at: packages/contracts/src/resolvers/Yield.sol:107,373)
  • garden-nft-transfer-restriction · non-transferable · implemented — Garden NFT transfers obey the TransferRestriction mode (Unrestricted / OwnerOnly / Locked); minting is always allowed. (enforced at: packages/contracts/src/tokens/Garden.sol#_beforeTokenTransfer)
  • resolver-schema-pinning · existence · implemented — Each core resolver validates that incoming attestations use its pinned schema UID. (enforced at: packages/contracts/src/resolvers/Work.sol:87-95, packages/contracts/src/resolvers/WorkApproval.sol:115-123, packages/contracts/src/resolvers/Assessment.sol:98-106)
    • ⚠️ Hole: Schema validation is skipped while the stored schemaUID is zero (the deployment window) — a documented gap the commitment-pooling spec explicitly refuses to inherit (its module deploys fail-closed). (packages/contracts/src/resolvers/Work.sol:60-62, packages/contracts/src/resolvers/WorkApproval.sol:81-83, packages/contracts/src/resolvers/Assessment.sol:71-73)
  • pooling-allocation-bps-sum · sum · implemented — The six-role allocation snapshot stored at cycle open must sum to exactly 10000 bps and is immutable for the cycle. (enforced at: packages/contracts/src/lib/CommitmentPooling/CyclesLib.sol:67-85)
  • pooling-provider-confirmation-disjoint · disjoint · implemented — Every member of a commitment's accountable lead/contributor team is excluded from every fulfillment-confirmation path, including the steward fallback; confirmation defaults are direction-aware (Offer → recipient, Request → creator). (enforced at: packages/contracts/src/lib/CommitmentPooling/ConfirmLib.sol:101-195)
  • pooling-recognition-allocation-sum · sum · implemented — The gardener-class recognition budget is fully allocated only after every fulfilled commitment has an eligible contributor: equal budget per fulfilled commitment, then the immutable cycle-open RecognitionPolicy allocates its equal-participation and verified-contribution components through separate deterministic remainder passes before the row results are added. The protocol default and immutable cycle-less preset are 20% equal / 80% verified, but an opened cycle may select any two values summing to 10000 bps. Zero eligible contributors block certificate expansion; there is no lead fallback. (enforced at: packages/contracts/src/lib/CommitmentPooling/RecognitionLib.sol:58-147)
  • pooling-payout-plan-conservation · sum · implemented — An explicitly finalized commitment payout plan conserves the declared support amount exactly: garden-retained amount plus all contributor child amounts equals the parent amount. A zero-child all-retained plan completes at finalization without a transfer. (enforced at: packages/contracts/src/lib/Settlement/PlanLib.sol:240-289, 562-586)
  • pooling-payout-plan-integrity · functional · implemented — Each fulfilled commitment has at most one stable payout-plan pointer. The complete recognition vector matches its snapshot hash, payment weights derive from the atomic amount vector, finalization precedes dispatch, and child or batch cancellation never clears the parent pointer. (enforced at: packages/contracts/src/lib/Settlement/PlanLib.sol:148-200, 240-337, 545-616)
  • pooling-one-open-season · functional · implemented — A pool may have at most one open Season at a time (O(1) openSeasonCycleId guard); Campaigns may overlap freely. (enforced at: packages/contracts/src/lib/CommitmentPooling/CyclesLib.sol:73-88, 177-193)
  • commitment-register-non-transferable · non-transferable · implemented — CommitmentRegistry unit classes are non-transferable by construction — no transfer, approval, or custody surface; balances move only via the module. (enforced at: packages/contracts/src/registries/Commitment.sol:11-159)
  • needs-eas-envelope-reference · domain-range · specified — All four Needs schemas use EAS recipient as the canonical garden and expirationTime zero; a Need is a root with refUID zero, while NeedSignal, NeedStatus, and FundingAttribution use refUID to reference an exact live same-garden Need. (specified in .plans/backlog/community-interface/spec.md; watches packages/contracts/src/resolvers/Needs.sol#NeedsResolver)
  • need-signal-latest-winner · functional · specified — For each Need and attester, readers first select the greatest unsigned (timeCreated, uid) NeedSignal tuple and then apply revocation and expiry; a revoked or expired winner clears the signal without restoring an older record, and support and non-support remain separate counts. (specified in .plans/backlog/community-interface/spec.md; watches packages/shared/src/modules/community-needs/signals.ts#NeedSignal)
  • needs-resolver-trust-boundaries · closed-set · specified — Exactly four Needs schemas route through two resolvers: NeedsResolver accepts only Need, NeedSignal, and NeedStatus with schema-specific Community or Steward authorization, while the ungated FundingAttribution schema routes through FundingAttributionResolver; unknown schema branches fail closed. (specified in .plans/backlog/community-interface/spec.md; watches packages/contracts/src/resolvers/Needs.sol#NeedsResolver)

State Machines​

work-display-status​

The union in types/domain.ts documents itself as the single source of truth: pending/approved/rejected reflect protocol state; syncing/uploading/sync_failed/offline are client-derived from the offline job queue.

StateStorage
pendingprotocol
approvedprotocol
rejectedprotocol
syncingclient-derived
uploadingclient-derived
sync_failedclient-derived
offlineclient-derived
FromToLayerMechanism
offline · sync_failedsyncingoff-chainthe offline job queue starts or retries the Work submission
syncinguploadingoff-chainqueued media begins uploading before the attestation is submitted
syncing · uploadingsync_failedoff-chaina recoverable queue or upload failure preserves the job for retry
uploadingpendingon-chainsuccessful EAS Work attestation submission creates the pending public record
pendingapproved · rejectedon-chaina steward records a separate Work Approval attestation

commitment-pool​

Every pool state is on-chain; transitions are rare steward-console actions.

StateStorage
Noneon-chain
NotReadyon-chain
Readyon-chain
Openon-chain
Pausedon-chain
Closedon-chain
Compostedon-chain
FromToLayerMechanism
NoneNotReadyon-chainonGardenMinted (GardenToken-only, idempotent) or registerPool → PoolRegistered
NotReadyReadyon-chainmarkPoolReady — requires non-empty charter CID and a non-zero provider open-commitment cap → PoolReady
ReadyOpenon-chainopenPool → PoolOpened
OpenPausedon-chainpausePool with mandatory reasonCID → PoolPaused; resumePool returns to Open
Open · PausedClosedon-chainclosePool → PoolClosed
ClosedCompostedon-chaincompostPool → PoolComposted
CompostedReady · Openon-chainreopenPool(toOpen) → PoolReopened

commitment-cycle​

One open Season per pool (openSeasonCycleId guard); Campaigns overlap freely. Succession between cycles is derived by pool ordering — no on-chain predecessor pointer.

StateStorage
Noneon-chain
Seededon-chain
Openon-chain
InProgressderived
Reviewingderived
Reconciledon-chain
Compostedon-chain
Cancelledon-chain
FromToLayerMechanism
NoneSeededon-chainseedCycle(poolId, cycleType, startTime, endTime, metadataCID) → CycleSeeded; no allocation stored yet
SeededOpenon-chainopenCycle(cycleId, allocation, recognitionPolicy) — six-role allocation bps and two-part recognition bps each sum to 10000, both store immutably → CycleOpened
OpenInProgressderivedfirst CommitmentAccepted for the cycle OR block time ≥ startTime
InProgressReviewingderivedblock time > endTime, OR all cycle commitments terminal or ReadyForConfirmation; new evidence/work flips back
ReviewingReconciledon-chaincloseCycle (the reconcile act) requires liveCommitmentCount = 0 → CycleClosed; commitment-level Reconciled derives from this event
ReconciledCompostedon-chaincompostCycle → CycleComposted
Seeded · OpenCancelledon-chaincancelCycle(reasonCID) requires liveCommitmentCount = 0 → CycleCancelled; Draft is discarded off-chain

commitment​

Direction-aware fulfillment: the party receiving the team's work confirms by default (Offer → receiver, Request → creator), or a named group may be set before acceptance. A current local-garden steward/owner may use PoolFallback. When explicitly selected before acceptance and no ordinary/local confirmer is reachable, a current steward/owner of the registered Green Goods protocol garden may use ProtocolFallback. The authority paths are not time-based; module ownership alone grants neither fallback; every lead/contributor is excluded. Evidence/Work credit records only while Accepted and unfrozen; the contributor roster and credit ledger freeze atomically on the transition to ReadyForConfirmation or before a direct Fulfilled dispute resolution; Ready requires pre-freeze totalVerifiedCredits > 0 and a structurally reachable confirmer, while recognition additionally requires Fulfilled plus an opened cycle policy or the immutable cycle-less 20/80 default; disputes restore an explicitly stored prior state.

StateStorage
Noneon-chain
Offeredon-chain
Requestedon-chain
Acceptedon-chain
Activederived
EvidenceSubmittedderived
PartiallyApprovedderived
ReadyForConfirmationon-chain
Fulfilledon-chain
Reconciledderived
Cancelledon-chain
Expiredon-chain
Disputedon-chain
FromToLayerMechanism
NoneOffered · Requestedon-chaincreateCommitment → CommitmentCreated (direction sets the initial state)
Offered · RequestedAcceptedon-chainclaimCommitment (runtime kind must equal immutable claimType; Open mode transitions immediately, ApprovalGated waits for steward acceptClaim) → CommitmentAccepted; register records committed units
AcceptedActivederivedfirst WorkLinked or EvidenceAttached after acceptance
ActiveEvidenceSubmittedderivedany EvidenceAttached or WorkLinked event
EvidenceSubmittedPartiallyApprovedderivedApprovedWorkCounted with some requirement counters below their required counts
Accepted · Active · EvidenceSubmitted · PartiallyApprovedReadyForConfirmationon-chainautomatic once every repeatable action requirement is met and any declared assessment attached; submitForConfirmation for evidence-only types requires evidenceCount ≥ 1; steward markReadyForConfirmation with reason; every path requires an Open cycle when scoped or the immutable cycle-less 20/80 policy, pre-freeze totalVerifiedCredits > 0, and either a reachable ordinary named/default confirmer threshold or an explicitly selected registered protocol-garden fallback; local-garden authority is confirmation-time PoolFallback provenance only and does not independently satisfy Ready reachability; contributor roster and credit ledger freeze atomically before the ready event
ReadyForConfirmationFulfilledon-chainconfirmFulfillment by named confirmer or direction-aware default, or confirmFulfillmentAsFallback with reason by current local-garden authority (PoolFallback) or explicitly selected registered protocol-garden authority (ProtocolFallback); local authority wins for dual-role callers; threshold N → CommitmentFulfilled with actor/path/reason; register converts units; every lead/contributor on the already-frozen roster is excluded from every confirmation path
FulfilledReconciledderivedCycleClosed for the commitment's cycle (or PoolClosed when cycle-less)
Offered · Requested · AcceptedCancelledon-chaincancelCommitment(reasonCID) — creator or steward pre-acceptance, steward-only after; Accepted releases committed units
Offered · Requested · Accepted · ReadyForConfirmationExpiredon-chainexpireCommitment — permissionless once past dueDate (or cycle endTime); releases still-committed units
Accepted · ReadyForConfirmation · ExpiredDisputedon-chainraiseDispute(reasonCID) — module stores the exact prior state in preDisputeState → CommitmentDisputed
DisputedAccepted · ReadyForConfirmation · Fulfilled · Cancelled · Expiredon-chainresolveDispute steward-only; RestorePrevious replays preDisputeState; an Expired prior state can never resolve Fulfilled; a direct Fulfilled resolution requires an available recognition policy and verified contributor, then freezes an unfrozen roster before DisputeResolved

commitment-loan​

Records-only pool credit (CreditRegistry). Default is not terminal — a defaulted loan can still be repaid, recorded as LoanRepaid(recoveredFromDefault = true). Registry pause blocks every mutation except markDefaulted and cancelLoan (wind-down). The G$ leg binds the loan to exactly one Confirmed DisbursementKind.LoanPrincipal settlement child; nothing in this machine moves value. Drawn as D30 in the commitment-pooling gallery.

Implementation evidence: packages/contracts/src/registries/Credit.sol#requestLoan, packages/contracts/test/unit/CreditRegistry.t.sol#testCreditRegistry_requestApproveDisburseAndRepayInInstallments, packages/indexer/test/credit-registry.test.ts#CreditRegistry.

StateStorage
Noneon-chain
Requestedon-chain
Approvedon-chain
Disbursedon-chain
Repaidon-chain
Defaultedon-chain
Cancelledon-chain
Repayingderived
FromToLayerMechanism
NoneRequestedon-chainrequestLoan(params) → LoanRequested; pool member for self or steward onBehalfOf; pool Open + credit enabled; principal within remaining borrowerCap
RequestedApprovedon-chainapproveLoan(loanId) → LoanApproved; steward, never the borrower (SelfApproval); re-checks authority and reserves cap exposure
RequestedCancelledon-chaincancelLoan(loanId, reasonCID) → LoanCancelled; borrower or steward
ApprovedDisbursedon-chainrecordDisbursed(loanId, rail, executionRef) → LoanDisbursed; steward or pool executor; reservation becomes outstanding; the G$ rail requires the one field-matched Confirmed LoanPrincipal child
ApprovedCancelledon-chaincancelLoan(loanId, reasonCID) → LoanCancelled; steward; any settlement child must already be Cancelled; releases the cap reservation
DisbursedRepaidon-chainrecordRepayment(loanId, amount, executionRef) clearing principal + fee → RepaymentRecorded + LoanRepaid; steward or executor, never the borrower; Jar/Treasury only
DisbursedDefaultedon-chainmarkDefaulted(loanId, reasonCID) → LoanDefaulted; steward; past dueDate only (NotDue); callable while paused
DefaultedRepaidon-chainrecordRepayment clearing the balance → LoanRepaid(recoveredFromDefault = true); default is not terminal

Agent query seam​

Agents and application code should use the compact read-only query API exported by @green-goods/shared. It resolves canonical ids, typed refs, display names, and declared aliases without importing the full semantic sidecar.

import {
getOntologyMaturity,
getOntologyRelationships,
getOntologySafeClaims,
getOntologyTerm,
} from "@green-goods/shared";

const term = getOntologyTerm("Commitment");
const maturity = getOntologyMaturity("entity:commitment");
const relationships = getOntologyRelationships("Commitment");
const claims = getOntologySafeClaims("Commitment");

Use maturity.availability and the returned evidence before making a release claim. A canonical term can still be planned or deployed without being available to users.

Known Issues​

  • missing-capital-mapping-fn — No runtime mapping function exists between the numeric Capital enum and the lowercase CapitalType union; index-based bridges are unsafe because the two declared orders currently differ. (packages/shared/src/types/domain.ts, packages/shared/src/types/hypercerts.ts)
  • community-surface-token — The ontology uses a community surface token on Need, Commitment, and Commitment Contributor while the product still treats community experiences as part of the client and public surfaces. Either promote Community to a distinct product surface or fold the token into client; until then the generated glossary carries the declared value verbatim. (docs/docs/reference/glossary.generated.mdx, packages/shared/src/ontology/green-goods-ontology.json)

Deliberately excluded from v1​

  • Impact-axes taxonomy — canon is maintained outside the repo; this public file carries only the four production action domains.
  • ModuleDependency and ModuleSchemaKind from the commitment-pooling spec — module wiring plumbing, not domain vocabulary.

How this page stays honest​

bun run check --only ontology cross-checks declared representations, evidence paths, stable implementation symbols, state-machine structure, Solidity and GraphQL enums, shared TypeScript vocabularies, EAS schemas, formal definition tables, and public glossary links. Constraint prose and transition behavior remain test-owned rather than inferred by this gate. Known drift stays bidirectional in scripts/data/ontology-drift-baseline.json. To change the ontology, edit its semantic or projection source and run bun run scripts/quality/check-ontology.mjs --generate and bun run scripts/docs/generate.mjs --scope ontology.