org.cannadb.strainEdit
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.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | cannadb.org |
| Indexed |
Checks
Validunlimited-stringdefs.arrayFields.properties.alsoKnownAs.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.characteristics.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.effects.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.flavors.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.medicinalEffects.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.seedAvailability.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.arrayFields.properties.terpenes.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.main.record.properties.basedOnNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.main.record.properties.unset.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.breederNameNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.cultivationNotesNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.descriptionNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.generationNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.growDifficultyNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.growthOdourNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.holderNameNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.kindNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.nameNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.originRegionNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.parentBreederNames.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.parentNames.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.shortDescriptionNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.thcCbdRatioNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.scalarFields.properties.versionOfNames.itemsNo maxLength, maxGraphemes or format limits this string.
{
"$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
}