Integrate what-happened current-events scout into daily radio curation
Build the production integration for the new `what-happened` recency/current-events scout so the daily radio show can use it deterministically, not just as an interactive Hermes...
StateDoneNext ActionClosedOwnerLuciRuntimeClosedAge10d ago
Ticket is done; runtime is closed.·cwd /home/lucienne/workspace/state/control-room-worktrees/mc-4636-integrate-what-happened-current-events-s-250f69 · uptime 8d 22h · last activity 8d 22h ago
Description
MC-4636
Build the production integration for the new `what-happened` recency/current-events scout so the daily radio show can use it deterministically, not just as an interactive Hermes skill.
Context:
- Upstream `last30days` skill is installed at `~/.claude/skills/last30days` and has a silent weekly updater cron.
- Hermes adapter skill `what-happened` exists under `~/.hermes/skills/research/what-happened`.
- The goal is to use the same behavior for scheduled daily radio/current-events discovery, especially prompts like: `what happened last 1 day on Iran war`.
Requirements:
1. Inspect the existing daily radio / briefing curation pipeline and identify the deterministic script/task entrypoint that selects stories before audio generation.
2. Add a `what-happened`/current-events scout step suitable for scheduled runs. Do not rely on the scheduler merely loading a skill; encode the pipeline in script/module logic.
3. Support time windows at minimum: 6h, 24h, 3d, 7d, 30d. Default breaking-news/current-events window should be 24h.
4. Output candidate records with: topic, window, title, why_now, confirmed_new_info, source_quality, source_urls, risk flags, audio_angle, material_update, and suppression_reason where relevant.
5. Enforce radio hygiene from `personalized-audio-briefings`: story ledger dedupe, cooldowns, material-update gate, stale-source labeling, and selected/suppressed rationale.
6. For war/geopolitics/current-events topics, separate confirmed / reported / claimed / social chatter. Viral social claims must not be presented as facts.
7. Add a dry-run mode that prints or saves selected candidates, suppressed repeats, stale/background sources, and rationale without creating audio or posting.
8. Add/update tests or a deterministic fixture for at least one scenario: `last 1 day on Iran war` or equivalent sensitive breaking-news topic.
9. Update docs/runbook/manifest if the production task, script, or scheduled workflow changes.
Acceptance criteria:
- Dry-run demonstrates a candidate slate and suppression rationale without generating audio.
- Existing radio show still runs in preview/dry-run mode.
- No production audio/posting side effects during tests unless explicitly enabled.
- Implementation is committed/pushed through the mandatory dev-loop.
Expected check-in: within 2 hours with either a working dry-run artifact or a concrete blocker.
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· High
· Luci
▼
SState
Done
Closed
PPeople
TTiming / Details▼
telegram (human)
Mission Control
10d ago
9d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.direct_worker_done_recoveredcwd /home/lucienne/workspace/state/control-room-worktrees/mc-4636-integrate-what-happened-current-events-s-250f69 · uptime 8d 22h · last activity 8d 22h agoMC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.Raw console: luci-controller · claude-code
WWorkflow
Start Dev Review + QA ▾
Select phases to include:
Agents
Review Gates
Decision
WAT routing: choose an agent, review gate, or decision. Buttons use the live runtime when one is attached.
Controller gate (ground-truth): INCOMPLETE — returning to todo. The worker claimed a deterministic scripts/what_happened.py scout (windows 6h/24h/3d/7d/30d, 27-check self-test, radio-curation integration). Reality: only commit 5f809346 landed, which just PARKS a dry-run task stub (tasks/what-happened-scout.md + task-inventory.md). scripts/what_happened.py DOES NOT EXIST in either repo; no 27-check self-test to run. Core deliverable absent. Re-do: actually build what_happened.py + its self-test + wire into daily radio curation per the ticket. (The false reviewer verdict here cited the MC-4604 CSS diff — ignore it; this send-back is on real ground truth: the file is missing.)
Controller decision
luci9d ago
Luci picking up this ticket (background worker).
luci9d ago
[failed_to_inject] send_failed: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control
Ticket moved to Todo: Integrate what-happened current-events scout into daily radio curation
luci9d ago
[failed_to_inject] send_failed: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control
Ticket moved to Todo: Integrate what-happened current-events scout into daily radio curation
luci9d ago
[failed_to_inject] send_failed: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control
Ticket moved to Todo: Integrate what-happened current-events scout into daily radio curation
luci9d ago
[failed_to_inject] send_failed: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control
Ticket moved to Todo: Integrate what-happened current-events scout into daily radio curation
luci9d ago
[failed_to_inject] send_failed: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control
Ticket moved to Todo: Integrate what-happened current-events scout into daily radio curation
luci9d ago
Ticket runtime send failed while dispatching.
root_cause: timed out
safe_retry: returned to `todo` for a fresh runtime retry.
human_input_required: no
luci-controller9d ago
[MC-4709 recover-merge sweep] LANDED. cr/mc-4636-integrate-what-happened-current-events-s-250f69 (ec34112d) merged to origin/master via merge commit c7d02a28 (00a87d79..c7d02a28). Scout code da457de already on ~/.claude master. Radio tests green: test_scout_integration.py (scout-OFF-unchanged proven), test_what_happened.py, test_novelty.py (12). Clean merge (merge-tree exit 0). ec34112d now ancestor of origin/master → done-gate passes. No service restart needed: scheduler reads tasks/radio-daily-brief.md fresh each tick; git-sync propagates master to live ~/workspace within 15 min before next 07:00 SAST run. Closing.
luci-controller9d ago
[control-room-recover] MC-4636: cleared false manual_safe_dispatch_required blocker caused by controller pool-claim / unsafe-main-checkout failure (reason: 'unsafe_main_checkout_runtime: pool claim timeout for MC-4636; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control'). Requeued to todo; Control Room pickup now owns retry/dispatch. No human reply was pending.
luci-controller9d ago
[control-room-dispatch] Control Room dispatched MC-4636 to a Claude Code worker.
Worktree: /home/lucienne/workspace/state/control-room-worktrees/mc-4636-integrate-what-happened-current-events-s-250f69
Branch: cr/mc-4636-integrate-what-happened-current-events-s-250f69
tmux: cr-MC-4636
Expected check-in: 2026-06-04T08:27:14.865729+00:00
luci-controller9d ago
[control-room-recover] MC-4636: recovered DONE from a finished direct worker whose tmux was gone. Ticket → in_review. Summary: MC-4636 integrated what-happened scout into daily radio curation — ~/.claude master da457de (run_scout + build_episode scout step + new test + docs) and worktree cr/mc-4636 ec34112d (radio-daily-brief RADIO_SCOUT=1 + manifest); dry-run artifact + scout-OFF-unchanged proven, all 4 radio test suites green, council Major fixed, both branches pushed.
[control-room-merge-required] ⚠️ NOT SHIPPED: the work is committed on `cr/mc-4636-integrate-what-happened-current-events-s-250f69` but is NOT on master. This ticket is review/merge-ready, not done. Land it safely with:
python3 mission-control/scripts/control_room_pickup.py --merge-recovered
(or `git -C /home/lucienne/workspace fetch && git -C /home/lucienne/workspace merge --ff-only cr/mc-4636-integrate-what-happened-current-events-s-250f69` from a master worktree, then push). `done` is blocked until the branch is an ancestor of origin/master.