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 |
Record
record · key tidProperties
add
refValues to add to open array fields (union at fold time).
basedOn
stringMaterialized revision hash this edit was authored against, for conflict detection. Optional; absent for blind edits.
Client-declared timestamp when this edit was created. Also the fold ordering key (ties broken by record URI).
remove
refValues to remove from open array fields (set-difference at fold time).
set
refScalar and object-valued fields to overwrite (last-writer-wins per field at fold time).
AT-URI of the org.cannadb.strain record anchoring the entity this edit targets.
summary
stringShort human edit summary (the commit message). Capped at 200 graphemes (2000 bytes).
maxLength: 2000maxGraphemes: 200
unset
arrayField names to clear. Each must be an editable field of org.cannadb.strain.
An editable strain field name to clear, e.g., "growthOdour".
#arrayFields
objectOpen 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
arraycharacteristics
arrayeffects
arrayflavors
arraymedicinalEffects
arrayseedAvailability
arrayknownValues: regular | feminized | autoflower | clone_only
terpenes
array#scalarFields
objectThe 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
booleanbreeder
string · at-uribreederName
stringcbdDominant
booleancbdRange
refcultivationNotes
stringcycleTime
refdescription
stringgeneration
stringgrowDifficulty
stringknownValues: easy | intermediate | hard
growthOdour
stringknownValues: low | medium | high
height
refholder
string · at-uriholderName
stringindicaSativa
integerminimum: 0maximum: 100
kind
stringknownValues: strain | cut
name
stringoriginRegion
stringoriginYear
integerparentBreederNames
arrayparentNames
arrayparents
arrayshortDescription
stringsourceUrl
string · urithcCbdRatio
stringthcRange
refversionOf
arrayversionOfNames
arrayyield
refSimilar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
org.cannadb.strain
recordCannabis 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, clone, or keeper pheno (e.g., "Forum cut of GSC"). Captures intrinsic identity, structured cultivation profile, and the publisher's contextualized field assertions; subjective experience and measured outcomes live in separate record types (`org.cannadb.review`, future `org.cannadb
-
org.cannadb.review
recordA 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 strain record via `subject` and aggregate at the AppView layer into per-strain summaries (community-derived effect/flavor percentages, average ratings). Publishing this record IS the claim — every field is contextualized by the publisher DID at display time. CannaDB editorial accounts
-
org.cannadb.plant
recordA 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 here — stage transitions are append-only `org.cannadb.growEntry` events (kind "stage"), and the AppView computes the current stage from the latest such event. Measured harvest outcomes, once known, are recorded in the optional `harvest` object so the AppView can aggregate real cultiv