## Before
日报任务说明写着从 `.claude/skills/config.json` 读取 `skills.twitter-fetcher.users`,但实际 config 缺字段。脚本能靠 `tmp/twitter_raw` 历史产物继续跑,最终只看到 `17` 个账号、`165` 条推文,除非人工追日志,否则很难知道名单不是来自 config。
## After
运行入口先输出 roster preflight:
```json
{
"status": "fallback_ok",
"config_has_roster": false,
"roster_source": "tmp/twitter_raw/twitter_fetcher_2026-05-22.json",
"reason": "fallback because config lacks skills.twitter-fetcher.users",
"roster_count": 17,
"stale_days": 1
}
```
日报继续生成,但最终回执和 markdown 都带 `roster_source`。如果没有 config 且找不到可用成功 artifact,preflight 返回 `missing_config_no_fallback`,任务提前失败并提示补回 `skills.twitter-fetcher.users` 或指定 fallback 文件。