Why cycle model matters
Three things depend on getting the cycle right:- Comparability. Cycle Analysis can only compare like-for-like. Rice Main Season vs Rice Off Season is apples to oranges (different water regime, different pest pressure, different yield ceiling). Same crop, same Season Type, aligned by phenology week is the honest comparison.
- Rule cards. The Risk Model phenology clock only makes sense inside a cycle. A rule card with
stage_window: bootingneeds a defined planting date to know when booting is. Some rules are also Season-Type specific; bacterial leaf blight pressure is higher in the Off Season, and a rule card can filter for that. - Verification and rollups. One Season is usually one Verification bundle boundary for cyclical crops. For perennials the bundle boundary is a calendar period (month or quarter). Aggregation rollups can slice by Season Type so estate managers can compare Main to Main across years.
The three cycle families
Every supported crop maps to exactly one of these families.Cyclical
Discrete cycles with a planting date and a harvest date. Multiple cycles can happen per calendar year. Each cycle is one Season.Examples: rice, corn, groundnut, most vegetables.
Perennial
One long producing life (years to decades). No planting-to-harvest cycle in the annual sense. Instead, the year is the container, and shorter internal cycles (flowering cohorts, tapping panels) live inside it.Examples: oil palm, rubber, coconut, cocoa.
Rolling continuous
Planting happens continuously through the year. Each batch has its own multi-month cycle. Batches at different ages coexist on the same Field or Estate.Examples: pineapple, banana, papaya, nursery operations.
Cycle vocabulary by crop
The Season Type dropdown in the Fields Workspace changes by crop. Use these tables as the source of truth for what each term means.Rice (cyclical)
Malaysian rice runs on a two-season calendar dictated by the monsoon and by irrigation authority schedules (MADA in Kedah, KADA in Kelantan). A single Field runs two Seasons per year in most granaries.
Comparison rule: compare Main to Main and Off to Off across years. Never compare Main to Off directly; the yield delta is structural, not agronomic.
Season label pattern:
Main Season 1 · 2026, Off Season 2 · 2026. The number represents the cycle index within the year (1 = first, 2 = second), which matters when an unusual year has three cycles.
Oil Palm (perennial)
Oil palm has no traditional season. A single planting yields for 20-25 years, harvested every 10-14 days on a rotation. Fresh Fruit Bunches (FFB) are the harvested unit; downstream mills convert FFB to CPO (crude palm oil) at 20-23% Oil Extraction Rate (OER).
Comparison rule: compare Production Year to Production Year at the same Tree Age Cohort. A 2018-planted block at year 7 compares to a 2019-planted block at year 7, not to itself last year (age differs by one year, which materially changes yield potential).
Season label pattern:
Production Year 2026, with a Tree Age Cohort chip like Planted 2018 · Age 8 for context.
Rubber (perennial)
Rubber is tapped daily or every-other-day; a shallow spiral cut in the bark releases latex overnight into a cup. Bark is organized into panels (A, B, C, D); each panel is tapped for ~5 years then rotated so the tree can regenerate.
Comparison rule: compare Production Year to Production Year on the same Tapping Panel and same Tapping Cycle. Comparing d/2 tapped Panel B to d/3 tapped Panel C is meaningless.
Season label pattern:
Production Year 2026 · Panel B · d/3.
Pineapple (rolling continuous)
Pineapple is planted continuously through the year. Each Planting Batch has its own 14-24 month cycle. Multiple batches at different ages coexist on the same Field or Estate. Flowering is induced (forcing) with ethephon or calcium carbide.
Comparison rule: compare batches at the same age from planting, not the same calendar date. Batch A planted January vs Batch B planted April both at their 12-month mark tells you if the field is trending; comparing them on the same calendar day compares different growth stages.
Season label pattern:
Batch 2026-A · Plant Crop or Batch 2025-B · Ratoon 1.
How cycle model interacts with phenology
Cycle model and phenology work together but describe different things.
The X-axis fix. When Cycle Analysis compares two Seasons, it aligns them by phenology week (days since planting expressed in weeks), not calendar week. Week 8 of Main 2024 is booting, and week 8 of Main 2025 is booting, always. Comparing calendar week 24 across years compares different biological stages and is misleading.
How cycle model interacts with rule cards
All Risk Model rule cards run inside a Season. Three cycle-related fields matter:season_type_filter: the hazard behaves differently across Season Types. Bacterial leaf blight is a good example; humid warm nights of the Off Season make it substantially more likely than in Main Season, so a rule card can gate on that.
When to skip both filters: the hazard is season-independent (most drought, most nutrient stress). Leave them unset; the rule fires wherever phenology matches.
How cycle model interacts with Verification and rollups
Verification bundle boundary:
See Verification for the full evidence bundle spec.
Aggregation rollups:
- Cyclical crops roll up per Season Type per year (Main 2026, Off 2026 as separate slices).
- Perennials roll up per Production Year, with an optional Tree Age Cohort filter.
- Rolling continuous rolls up per Batch cohort (e.g., all Q1-2026 batches).
Related
- Field Data Model - the
Seasonobject and the four cycle-related fields. - Cycle Analysis - the three comparison modes that use this vocabulary.
- Risk Model - phenology clock and
season_type_filter. - Verification - bundle boundaries per cycle family.
- Aggregation Model - how Season Type slices roll up.
- Fields Workspace - where the Season pill exposes this vocabulary to operators.