org.cannadb.strainEdit
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"arrayFields": {
"description": "Open array fields that support additive add/remove merge. Lineage arrays (parents/versionOf and their parallel name arrays) are NOT here — they are replaced wholesale via `set` because their parallel-index structure does not merge element-wise.",
"properties": {
"alsoKnownAs": {
"items": {
"type": "string"
},
"type": "array"
},
"characteristics": {
"items": {
"type": "string"
},
"type": "array"
},
"effects": {
"items": {
"type": "string"
},
"type": "array"
},
"flavors": {
"items": {
"type": "string"
},
"type": "array"
},
"medicinalEffects": {
"items": {
"type": "string"
},
"type": "array"
},
"seedAvailability": {
"items": {
"knownValues": [
"regular",
"feminized",
"autoflower",
"clone_only"
],
"type": "string"
},
"type": "array"
},
"terpenes": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"main": {
"description": "A field-level edit to a strain's living document (collaborative editing). Targets a strain via `subject` (the anchor record of the entity) and carries a sparse patch: scalar field overwrites in `set`, additive ops on open array fields in `add`/`remove`, and field clears in `unset`. The AppView folds accepted edits over the anchor record to materialize the canonical document; this record is one signed contribution, attributed to its publisher DID. See docs/05-collaborative-strains.md.",
"key": "tid",
"record": {
"properties": {
"add": {
"description": "Values to add to open array fields (union at fold time).",
"ref": "#arrayFields",
"type": "ref"
},
"basedOn": {
"description": "Materialized revision hash this edit was authored against, for conflict detection. Optional; absent for blind edits.",
"type": "string"
},
"createdAt": {
"description": "Client-declared timestamp when this edit was created. Also the fold ordering key (ties broken by record URI).",
"format": "datetime",
"type": "string"
},
"remove": {
"description": "Values to remove from open array fields (set-difference at fold time).",
"ref": "#arrayFields",
"type": "ref"
},
"set": {
"description": "Scalar and object-valued fields to overwrite (last-writer-wins per field at fold time).",
"ref": "#scalarFields",
"type": "ref"
},
"subject": {
"description": "AT-URI of the org.cannadb.strain record anchoring the entity this edit targets.",
"format": "at-uri",
"type": "string"
},
"summary": {
"description": "Short human edit summary (the commit message). Capped at 200 graphemes (2000 bytes).",
"maxGraphemes": 200,
"maxLength": 2000,
"type": "string"
},
"unset": {
"description": "Field names to clear. Each must be an editable field of org.cannadb.strain.",
"items": {
"description": "An editable strain field name to clear, e.g., \"growthOdour\".",
"type": "string"
},
"type": "array"
}
},
"required": [
"subject",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"scalarFields": {
"description": "The strain's scalar and object-valued fields, all optional. Mirrors org.cannadb.strain. Range/yield objects reference the same shapes the strain lexicon defines. Identity fields (name, kind, breeder, holder) are expressible here; whether such an edit is accepted is an AppView fold/governance concern, not a lexicon constraint.",
"properties": {
"autoflower": {
"type": "boolean"
},
"breeder": {
"format": "at-uri",
"type": "string"
},
"breederName": {
"type": "string"
},
"cbdDominant": {
"type": "boolean"
},
"cbdRange": {
"ref": "org.cannadb.strain#cannabinoidRange",
"type": "ref"
},
"cultivationNotes": {
"type": "string"
},
"cycleTime": {
"ref": "org.cannadb.strain#dayRange",
"type": "ref"
},
"description": {
"type": "string"
},
"generation": {
"type": "string"
},
"growDifficulty": {
"knownValues": [
"easy",
"intermediate",
"hard"
],
"type": "string"
},
"growthOdour": {
"knownValues": [
"low",
"medium",
"high"
],
"type": "string"
},
"height": {
"ref": "org.cannadb.strain#heightRange",
"type": "ref"
},
"holder": {
"format": "at-uri",
"type": "string"
},
"holderName": {
"type": "string"
},
"indicaSativa": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"kind": {
"knownValues": [
"strain",
"cut"
],
"type": "string"
},
"name": {
"type": "string"
},
"originRegion": {
"type": "string"
},
"originYear": {
"type": "integer"
},
"parentBreederNames": {
"items": {
"type": "string"
},
"type": "array"
},
"parentNames": {
"items": {
"type": "string"
},
"type": "array"
},
"parents": {
"items": {
"format": "at-uri",
"type": "string"
},
"type": "array"
},
"shortDescription": {
"type": "string"
},
"sourceUrl": {
"format": "uri",
"type": "string"
},
"thcCbdRatio": {
"type": "string"
},
"thcRange": {
"ref": "org.cannadb.strain#cannabinoidRange",
"type": "ref"
},
"versionOf": {
"items": {
"format": "at-uri",
"type": "string"
},
"type": "array"
},
"versionOfNames": {
"items": {
"type": "string"
},
"type": "array"
},
"yield": {
"ref": "org.cannadb.strain#yieldRange",
"type": "ref"
}
},
"type": "object"
}
},
"id": "org.cannadb.strainEdit",
"lexicon": 1
}
Metadata
- DID
-
did:plc:lrtzzib3ycggsodkfidzuorw - CID
-
bafyreibfqzuhdlffbu6agh2k5e6jrpu4j3vpviqv7txsb7qcy4bmzqccc4 - Indexed At
- 2026-06-18 16:25 UTC
- AT-URI
-
at://did:plc:lrtzzib3ycggsodkfidzuorw/com.atproto.lexicon.schema/org.cannadb.strainEdit
Referenced Schemas (4)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
org.cannadb.strain record
Cannabis genetic identity. The same record type covers two levels of specificity, distinguished by the `kind` field: "strain" denotes a broad genetic identity (e.g., "Wedding Cake"); "cut" denotes a specific phenotype, …
-
org.cannadb.review record
A review of a cannabis strain or cut. Reviews are where subjective experience lives — the reviewer's perceived flavors and effects, multi-axis ratings, prose body, and optional images. Reviews reference exactly one st…
-
org.cannadb.plant record
A single plant within a grow. The plant is the lifecycle unit: it references the `org.cannadb.grow` it belongs to and (optionally) the `org.cannadb.strain` it is. Its lifecycle stage is NOT stored as a mutable field her…