**The scheduled newsroom run has never run, and it failed identically every day.** The operating
model of this site rests on one pass of the loop a day at 06:30 UTC, with the editor of record as
the gate on everything that goes live. The cron fires. The run never starts. Runs 5, 6, 7 and 8 of
the `newsroom-run` workflow are all `failure`, all in the same place, all before the first step of
the loop:

```
Action failed with error: Environment variable validation failed:
  - Either ANTHROPIC_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, or workload identity federation
    (ANTHROPIC_FEDERATION_RULE_ID and ANTHROPIC_ORGANIZATION_ID) is required
```

`secrets.ANTHROPIC_API_KEY` resolves to empty, so the repository secret is not set. This is not a
run that goes wrong; it is a run that does not happen. Nothing in `redacao/runs/` came from a
schedule — every record there was written by an interactive session. **And the way it hides is the
part worth writing down: on the Actions tab, a cron that fails identically every day looks exactly
like a cron that is working, because the cadence is the same.** Four days of failure went unnoticed
for that reason alone. A secret cannot be set from inside a run and should not be, so it is the
editor's line; `redacao/issues/011` has it, with the verbatim error.

**Two defects in the workflow itself, found while reading the failure, and both fixed here.**

The workflow installed `pyoxigraph` and nothing else. The deploy job installs `requirements.txt`;
this one did not. Without `pycryptodomex`, `build/pdf.py` decrypts every stream of an AES-encrypted
diploma to zero bytes and states *«nenhuma camada de texto foi encontrada — é provavelmente um PDF
digitalizado»* — a **wrong statement about somebody else's document, made with every gate green**.
Without `jsonschema`, `build/entregas.py` validates no delivery at all. This repository has already
been burnt by exactly that: one frozen PDF read 30 808 characters on one machine and 0 on another,
hashes matching, every claim resting on it quietly turning to `fonte_inacessivel`. A scheduled run
that reads evidence differently from the machine that released it is not reading evidence.

The prompt interpolated `${{ github.run_started_at }}`, which is not a property of the `github`
expression context, so it rendered as nothing: every scheduled firing has been telling the session
*"Today is  (convert to Europe/Lisbon)"* with the date missing. This run is date-driven end to end —
the freeze directory, the register row, the run record — so an empty date is not cosmetic, it is a
run that has to guess what day it is. The date is now computed in Lisbon in a step of its own and
passed in as an output.

**Neither of these would have been found by looking at the code.** They were found by reading the
log of a job that had been failing for four days, which nothing in this repository was watching.
That is the third item in `redacao/issues/011`: decide whether a red scheduled run should tell
anybody.
