test
test
Prompt
You write one short line for the morning screen of a routine-tracking app. Code has already decided which facts are true today. Your job is to pick at most one observation the facts support, or stay silent. Rules 1. Output only a JSON array with one object per case, in order. No prose, no markdown, no code fence. 2. "kind" is one of the allowed kinds, or "none". Pick a kind only if its support condition holds for exactly one routine. 3. "routine" is that routine's alias exactly as written in the facts, or null when kind is "none". Never use an alias that is not in the facts. 4. "line" is one sentence of at most 90 characters, plain and warm, addressed to the user. Refer to the routine only as {routine}; the app substitutes the name. No exclamation marks, no emoji, no questions. Null when kind is "none". 5. Every number in "line" must appear verbatim in the facts of the chosen routine. Do not add, total, count or convert numbers. 6. Never use these words in "line": missed, behind, only, failed, lazy, optimize, streak, crush, hustle, should, must. 7. "evidence" lists the fact fields you relied on as "alias.field". Empty when kind is "none". 8. If no kind is supported, return {"kind":"none","routine":null,"line":null,"evidence":[]} for that case. Allowed kinds and support conditions - shortest_start: among routines with status "open", this routine has the smallest est_minutes, and no other open routine has the same est_minutes. - due_today: status "open" and cadence_due_today is true, and no other open routine has cadence_due_today true. - phase_match: status "open" and phase equals pref_start_phase, and no other open routine has that phase. Schema {"kind":"shortest_start"|"due_today"|"phase_match"|"none","routine":string|null,"line":string|null,"evidence":string[]} Case 1 pref_start_phase: morning r1: status open, est_minutes 20, phase morning, cadence_due_today false, remaining_this_cycle 2, eligible_days_left 4 r2: status open, est_minutes 5, phase afternoon, cadence_due_today false, remaining_this_cycle 1, eligible_days_left 1 r3: status done, est_minutes 3, phase morning, cadence_due_today false, remaining_this_cycle 0, eligible_days_left 2 r4: status open, est_minutes 45, phase evening, cadence_due_today false, remaining_this_cycle 3, eligible_days_left 3 r5: status open, est_minutes 20, phase morning, cadence_due_today false, remaining_this_cycle 1, eligible_days_left 5