org.cannadb.growEntry

One append-only event on a plant's timeline. A single record type unifies what other journals split into status changes, activities, measurements, and notes — because they are all the same shape (a timestamped thing that happened to a plant) and the distinguishing detail is an open `kind` vocabulary. Stage transitions (kind "stage") are how lifecycle is tracked: the AppView reads the latest stage entry as the plant's current stage and the full set as its lifecycle history. Activities (watering, feeding, training, …) optionally carry structured `measurements`. Freeform observation is the `note` field — deliberately loose so growers can record measurements prose, LST details, and anything else without the schema being prescriptive. Photos are NOT embedded here; they are separate `org.cannadb.growPhoto` records that may link back to an entry. Publishing this record IS the claim — contextualized by the publisher DID at display time.

Repository @cannadb.org did:plc:lrtzzib3ycggsodkfidzuorw namespace authority
Details · record, key tid
Kindrecord
Record keytid
Authoritycannadb.org
Indexed

Record

record · key tid

Properties

createdAt

requiredstring · datetime

Client-declared timestamp when this entry record was created.

grow

string · at-uri

Optional denormalized AT-URI reference to the plant's `org.cannadb.grow`. Lets the AppView assemble a whole-grow timeline and gate on the grow's `listed` preference without resolving every plant first. The plant ref is canonical; this is a cache for query efficiency and ref resilience.

kind

string

What kind of event this is. Open vocabulary — clients should accept unknown values and fall back to generic display, and may offer user-defined kinds. "stage" marks a lifecycle transition and is the one kind that gives `stage` meaning.

  • knownValues: stage | watering | feeding | note | measurement | training | transplant | topping | defoliation | flush | pest | disease | treatment | harvest

Structured readings recorded with this event (height, pH, EC/PPM, runoff pH, water volume, …). Optional — most entries carry none. A feeding entry might carry pH and EC; a check-up entry might carry height. Mirrors how journaling tools attach measurements to an activity.

itemsref
Reference

note

string

Markdown-formatted free-form note — the catch-all for anything the structured fields don't capture (measurement context, LST/defoliation details, observations, photos commentary). Deliberately unstructured.

  • maxLength: 100000
  • maxGraphemes: 10000

occurredAt

string · datetime

When the event actually happened, if different from `createdAt` (e.g., logging yesterday's feeding today). Consumers default to `createdAt` when absent. This is the field timelines sort on.

plant

requiredstring · at-uri

AT-URI reference to the `org.cannadb.plant` this event belongs to. (Consumers should validate the ref resolves to an `org.cannadb.plant` record.)

stage

string

The lifecycle stage this entry marks a transition into. Set on stage transitions (typically with `kind` "stage"). The AppView treats the most recent entry carrying a `stage` as the plant's current stage, and the full ordered set as its lifecycle history. Display ordering of stages is an AppView concern. Open vocabulary.

  • knownValues: germinating | seedling | vegetative | flowering | drying | curing | harvested | dead

#measurement

object

A single structured reading. Both `metric` and `unit` are open vocabularies. `value` is a scaled integer in hundredths of `unit` (atproto has no float type), matching the scaled-integer convention used for cannabinoid percentages on `org.cannadb.strain`: pH 6.25 = 625 with unit "ph"; height 30.5 cm = 3050 with unit "cm"; EC 1.85 = 185 with unit "mS_cm".

Properties

metric

requiredstring

What was measured. Open vocabulary — consumers accept unknown metrics and may offer user-defined ones.

  • knownValues: height | ph | ec | ppm | tds | runoff_ph | water_volume | temperature | humidity | pot_size

unit

string

Unit of `value`. Open vocabulary; required to interpret the scaled integer. Consumers should accept unknown units and fall back to displaying the unit string as written.

  • knownValues: cm | in | ph | mS_cm | ppm | ml | l | gal | celsius | fahrenheit | percent

value

requiredinteger

The measured value in hundredths of `unit` (e.g., 625 = 6.25). Scaled integer because atproto has no float type.

Similar lexicons

semantic match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • 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 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

  • A grow — one documented cultivation run (a tent, a garden, a season's cycle). The grow is a lightweight container: it groups one or more `org.cannadb.plant` records and carries the shared setup and a publisher-chosen listing preference. Per-plant lifecycle, activities, notes, and measurements live in `org.cannadb.growEntry` records that reference a plant; photos live in `org.cannadb.growPhoto` records. Publishing this record IS the claim — every field is contextualized by the publisher DID at di

  • A single photo in a grow's gallery. Modeled as its own record (rather than blobs embedded in entries) so galleries can grow without bloating other records and so each photo carries its own caption, ordering, and capture date. A photo attaches to a plant (the usual case — per-plant galleries) and/or to the grow (group/room shots, the cover), and may optionally link to the `org.cannadb.growEntry` it documents. The image blob lives on the publishing PDS; the record carries the blob ref plus metadat