# Design: Nudged-Plant Cooldown & Fold-Back (Bekky, 2026-08-30 ~15:30)

## The requirement (Bekky's words, Care-tab screenshot evidence)

> "For plants that were recently watered, it makes them leave the group. The care group needs
> to have a plan to fold this plant back into the group over time so that they eventually get
> back on the same cadence."

Evidence: Care tab, Side Garden, "Moderate drinkers (4 plants · In 3 days)" shows
**"Sweet Olive — skip this round — last watered recently"** — correct hold-out behavior
(already built, 2026-08-29), but **no plan for what happens to Sweet Olive afterward**.

## What exists today (code-verified)

- `buildSkippedMembers` (CarePlanScreen): member in cohort + no due task this round →
  stays in row, gets the skip note. Pure display-layer.
- Next round: the nudged plant's due = its own `lastDone + everyDays` (individual anchor).
  It **drifts independently** — there is NO mechanism that re-aligns it to the group.
- `recordCohortFeedback` / AI `refinedCohorts` pass adjust **cadence** (`cohortAdjustment`
  deltas) but never re-anchor timing, never consciously re-fold a diverged member.
- Net: the skipped member silently reappears "due" on a day the group isn't — a phantom
  split the UI papers over with 'skip this round' notes forever.

## The design: COOLDOWN + ABSORB (two mechanisms, both date arithmetic, zero extra AI)

### 1. Cooldown state (derived, not stored — the anchor IS the state)

A member in a cohort whose `lastDone[action]` is **fresher than the group anchor** is in
COOLDOWN for that action:

- `cooldownDays = daysCohortIsDue - daysMemberIsDue` (how far ahead of the group they are)
- While cooldown > 0: member keeps the skip note — upgraded to say the plan:
  **"skip this round — watered Jul 28 · rejoins the group Aug 9"**
- The rejoin date is computable TODAY from existing inputs: the next group watering date
  (group anchor + group cadence) vs member's own next due.

### 2. Fold-back at the moment of divergence (the "plan")

UPDATE — BEKKY RULING 2026-08-30 ~16:00 (supersedes the silent-absorb-only stance):
the fold-back for stragglers (members BEHIND the group) is not just "water individually
and try again" — **the AI must account for stragglers and produce a customized care plan
that reunites their cadence with the group.** Bekky: "it should be very possible."

- **If the member has been watered MORE recently (ahead of group):** fold back silently —
  group date is LATER than their last water; waiting a few extra days never hurt a
  recently-watered plant. (Sweet Olive joins Aug 9 watering; skip note explains.)
- **If the member is BEHIND the group (dry-straggler):** health priority holds — they get
  their needed water on their own day, AND the AI writes a **reunification plan**:
  bridge waterings that walk the plant onto the group's anchor (e.g. "half drink Aug 4,
  full group watering Aug 9 — back on the group's rhythm"). Code computes the candidate
  bridge dates (date arithmetic); AI validates harm + writes the one-line plan
  (hybrid lean, cost doctrine: stragglers are RARE, so calls are rare + batchable into
  the existing fetchCohortCare refine pass).
- Fold-back for ahead-members stays **automatic at each group event** — no AI call.
- The design goal Bekky set: **reunion must be very possible** — drift is a detour, not an exit.

### 2b. BEKKY RULING — phase misalignment is NOT a refusal reason (2026-08-30)

> "...it should also help with creating groups even when their cadence was previously
> misaligned but otherwise would be a perfect cohort."

- The merge test stays **rhythm compatibility** (days-between-waterings ranges overlap)
  + moisture-regime safety — NEVER current phase alignment.
- Two plants both on ~every-5-day rhythms, one watered 3 days ago and one 6 days ago,
  are a PERFECT cohort: group them, and the first joint watering defines the shared
  anchor (members watered more recently skip it via cooldown; stragglers get the §2
  AI reunification plan). Misalignment is healed by the machinery, not refused.
- The merge engine's group-CREATION proposals follow the same rule.

### 2c. BEKKY RULING — post-merge naming (2026-08-30 ~16:20, settles consult open item)

> "Maybe the name should update to remind the user to take a look and not go on
> autopilot." — Bekky, reasoning that a changed membership already demands a fresh look.

- **The AI decides whether a merged/changed group needs a new name**; default = RENAME
  when the membership actually changed (merge, split, straggler fold-back that alters the
  member set). Rationale: the name is the Care tab's row identity — users read it every
  visit, so a rename is a built-in autopilot-breaker that says "something happened here."
- **Cadence-only updates never rename** (refined sharedCadence, new note, member deltas):
  stability where nothing happened — the name only signals MEMBERSHIP change.
- Name style stays plain-language descriptive (house rule: "simple labels are FINE —
  the intelligence is in choosing the cohorts"); never generic ("Group 2").
- Closes the consult-findings open item "post-merge group naming — fresh AI label vs
  one old name surviving": answer = AI's call, rename-on-membership-change default.

### 3. UX copy (Care tab)

- Cooldown note upgraded: "skip this round — last watered Jul 28 · rejoins group Aug 9"
- After a fold-back event, nothing special shown (the plant just reads as group member
  again next round) — matches "simple labels are FINE; intelligence is in the CHOOSING."

## Fit in the roadmap

- **Build slot: Chunk B core** — this IS Chunk B logic (the merge engine needs exactly
  this: group-anchor as first-class fact + absorb rules when anchors diverge).
- NOT a quick pass: touches the anchor writer + task builder + row building together.

## Open items for Bekky (none blocking design)

1. Copytone of the rejoin note: "rejoins the group Aug 9" vs "back together Aug 9" — settle in build.
2. Cooldown cap: if a member is nudged repeatedly (3+ group events alone), suggest
   ungrouping (stays solo, AI re-evaluates at next confirmed watering) — Chunk B behavior.