# TLDR zero-input false PASS — MC #900160

# TLDR zero-input false PASS — MC #900160

<!-- ALAI-MC:900160:BEFORE -->

## Incident

On 2026-08-23 the TLDR briefing/actionizer chain produced no actionable output. The absence of input is the incident signal; it must not be reported as a healthy run.

## Verified current behavior

1. `com.john.tldr-briefing` finds zero eligible emails, writes a JSON sentinel with `reason: no_unbriefed_emails`, and exits 0.
2. `com.john.tldr-actionizer` reads zero insights, emits no result/task, and exits 0.
3. `com.john.tldr-watch` maps the zero-input sentinel to `VERDICT=PASS`.

This is fail-open observability: missing input is converted into green health and the operator receives no useful run result.

## Required outcome

- Explicitly distinguish a day when no TLDR run is expected from a scheduled run that expected input.
- Any unexplained zero-input scheduled run returns actionable `UNKNOWN` or `FAIL`, never `PASS`.
- The run output names the missing stage/source and preserves evidence.
- Positive no-content policy, if retained for weekends/holidays, must be explicit and tested rather than inferred from a sentinel.

## Implemented result

<!-- ALAI-MC:900160:AFTER -->

Live commits: `854aa1a5f` (fail-closed zero input) and `a853184cc` (publication-day schedule).

The three stages now fail closed on zero input:

- briefing writes `error: true`, `reason: zero_input_error`, emits `ZERO_INPUT_ERROR`, exit 2;
- actionizer emits the source reason and exits 2 without fabricating a successful run;
- watcher reports `Verdict=FAIL`, sends the actionable alert, and exits 2.

Positive control with five insights still completes with exit 0. Independent Gemini review returned PASS with zero unresolved P0/P1 findings.

## Debugged source and schedule root cause

The mail database and direct IMAP search agree: no TLDR message exists after Friday 2026-08-21. Historical delivery data over 120 days contains messages only Monday-Friday, normally arriving after the old 09:00 briefing slot. The jobs nevertheless ran every day, so Sunday and Monday were guaranteed zero-input runs.

The active schedule is now explicit:

- briefing: Tuesday-Saturday 09:00;
- actionizer: Tuesday-Saturday 09:30;
- watcher: Tuesday-Saturday 09:40.

This processes the prior Monday-Friday publication day. `RunAtLoad` was removed from briefing. On a scheduled Tuesday-Saturday run, missing input remains `ZERO_INPUT_ERROR`/FAIL; on Sunday/Monday no run is scheduled. Active plists were reloaded and launchd shows weekdays 2-6 with zero immediate Sunday runs.

## Evidence

- `/Users/makinja/system/evidence/tldr-incident-2026-08-23/status.md`
- `/Users/makinja/system/logs/tldr-briefing.log`
- `/Users/makinja/system/logs/tldr-actionizer.log`
- `/Users/makinja/system/logs/tldr-watch.log`
- `/Users/makinja/system/logs/tldr-insights/2026-08-23.json`
- `/Users/makinja/system/evidence/900160/runtime-controls.json`
- `/Users/makinja/system/evidence/900160/live-chain-verification.txt`
- `/Users/makinja/system/evidence/900160/gemini-review-clarification.json`
- `/Users/makinja/system/evidence/900160/gemini-schedule-review.json`
- `/Users/makinja/system/evidence/900160/pre-schedule-plists/`