F1 practice updates: dedupe 30-minute Telegram pings by material content
The f1-practice-updates scheduler intentionally polls every 30 minutes on Fri/Sat race-weekend windows (*/30 8-23 * * 5,6) so it catches newly published practice data. However p...
StateDoneNext ActionClosedOwnerLuciRuntimeClosedAge21d ago
Ticket is done; runtime is closed.·profile codex · cwd /home/lucienne/workspace · uptime 20d 23h · last activity 17d 19h ago
Description
MC-4043
The f1-practice-updates scheduler intentionally polls every 30 minutes on Fri/Sat race-weekend windows (*/30 8-23 * * 5,6) so it catches newly published practice data. However practice_update.py duplicate suppression keys on summary.generated_at, which changes every refresh, so Elmar can receive a Telegram update every tick even when sessions/rankings have not materially changed. Fix dedupe to use material summary content/session availability (or notify only on newly available sessions/material ranking changes), preserve frequent polling, preserve read-only safety, and add regression tests.
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· Medium
· Luci
▼
SState
Done
Closed
PPeople
TTiming / Details▼
telegram (human)
F1 Predictor
21d ago
16d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.terminal_state_reapprofile codex · cwd /home/lucienne/workspace · uptime 20d 23h · last activity 17d 19h agoMC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.Raw console: luci · codex/openai/gpt-5.5
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.
Created from Elmar Telegram question: "Why do I get a F1 update every 30 minutes, is this expected behaviour". Evidence: task /home/lucienne/workspace/tasks/f1-practice-updates.md schedule is every 30 minutes; state key is race|sessions|generated_at; generated_at refreshes on every run.
luci21d ago
Luci picking up this ticket (background worker).
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Worker died unexpectedly.
**Worker PID:** unknown
**OOM kill:** unknown
**Exit signal / dmesg:** unknown
**Last tool_use:** none
**tmux target:** none recorded
**Last pane output:**
```
[no pane output captured]
```
Reset to Todo to retry, or provide additional context.
luci21d ago
Luci picking up this ticket (background worker).
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci21d ago
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
Luci21d ago
QUESTION: as plain text, used only if the mc-coord srver s
unavailable.
Ticket: F1 practice updaes: dedupe 30-minute Telegram pings by material content
Priority: medium
Descripion:The f1-practic-upates scheduler intentionally polls evy 30 minutes on Fri/Sat race-weekend windows (*/30 8-23 * * 5,6) so it catches newly published practice data. However practice_update.py duplicate suppression keys on summary.generated_at, which changes every refresh, so Elmar can receive a
Telegram update every tick even when sessions/rankings have not materially changed. Fix dedupe to use material summary content/session availability (or notify only on newly available sessions/material ranking changes), preserve frequent polling, preserve read-only safety, and add regression tests.
Recnt conversation:
- luci: Worker died unexpetedly.
**WorkerPID:** unknown
**OOM kll:** unknown
**Exit signal / dmesg:** unknown
**Last tool_use:* oe
**tmux target:* oe recorded
**Last pane output:*
```
[no pane output captured]
```
Resetto Todo to retry, or provide additional context.
- luci: Luci picking up this ticket (background worker).
Elmar says: Ticketpickedupby Lucivia MC dispatchr.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
[MC_TICKET_TURN:4043:1779528320112:62f87246 internal routing marker; do not mention this marker in your reply]
[Optional MC completion sentinel: as the vry last lineof your reply, on itsown line, youAY emit thisexact JSON to auto-advance the ticket: {"mc_signal":"DONE|REVIEW|QUESTION","ticket":"MC-4043","nonce":"MC_TICKET_TURN:4043:1779528320112:62f87246","payload":"<one-line summary>"} . Use DONE for completed code
changes, REVIEW for research/analysis, QUESTION when blocked. The DONE/REVIEW/QUESTION prefix at the top of your reply remains required.]
·Tomfoolering… (23s · ↑ 1.6k tokens)
✢
*
✶
✻
✽4
T
o
✻m
Tofo
✶mo
fl
*ooer
li
✢en
rg
·in…
g
…
✢5
*
✶
✻
✽
✻
✶T
o
*Tmf
oo6
✢mo
foo↓
· thinking more with high effort)
thinking more with high effort
✢
*
✶
✻thinking more with high effort
✽
thinking more with high effort
✻
thinking more with high effort
✶
…
*
✢g
nthinking more with high effort
✢
thinking more with high effort
*i…8
✶thinking more with high effort
rg
✻
Luci21d ago
Orchestrator triage update: parking F1 notification-dedupe ticket behind MC-4044 because dispatcher spawn is timing out. The F1 issue is annoying but non-critical; do not burn pickup cycles until MC dispatcher/worktree-pool hardening is fixed.
luci18d ago
Luci picking up this ticket (background worker).
luci18d ago
[failed_to_inject] runtime_busy: Ticket runtime is not ready for input (status=running). Wait for the current turn to finish, queue the message, or explicitly interrupt/restart the runtime before sending more terminal i
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci18d ago
[failed_to_inject] runtime_busy: Ticket runtime is not ready for input (status=running). Wait for the current turn to finish, queue the message, or explicitly interrupt/restart the runtime before sending more terminal i
Ticket picked up by Luci via MC dispatcher.
MC-4043: F1 practice updates: dedupe 30-minute Telegram pings by material content
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci18d ago
Ticket runtime send failed while dispatching.
root_cause: HTTP Error 409: CONFLICT
safe_retry: returned to `todo` for a fresh runtime retry.
human_input_required: no
Luci18d ago
MC-4043: analyzing current dedupe logic. `_state_key` includes `generated_at` which changes every refresh → duplicate suppression never fires on re-polls. Will replace with `_material_key` based on sessions + rankings + warnings, preserving read-only safety and adding regression tests.
Luci18d ago
DONE: MC-4043 is already implemented and on origin/master via commit 5161da1. It changes practice update dedupe to key on material summary content, sessions, rankings, gaps, and warnings while ignoring generated_at, and adds›Summarize recent commitsgpt-5.5 xhigh · ~/workspace
regression tests for unchanged generated_at refreshes plus session/ranking/gap changes.
Verified: pytest tests/test_practice_update.py -q passed, 15 tests. Also confirmed 5161da1 is an ancestor of origin/master. I left unrelated dirty F1 repo artifacts untouched.
luci18d ago
Workflow action `review_ready` applied. Work ready for review.
api18d ago
Closed (orchestrator). Verified F1 repo commit 5161da1 on master (ancestor). _state_key replaced with _material_key (hashes sessions+rankings+gaps+warnings, ignores generated_at). 15/15 tests pass in tests/test_practice_update.py. Future practice update Telegram pings dedup correctly across 30-min poll cadence.
UA sign-off (runbooks/ua-signoff-gate.md): n/a — backend scheduler logic, no user-facing surface. Verdict: PASS
luci-controller18d ago
[controller release · 2026-05-26T13:05:32+02:00] Stale dependency cleared: MC-4044 is done. Releasing this Luci-owned technical follow-up to todo; pickup will claim it when a worker slot is free.
luci-controller18d ago
[controller repair · 2026-05-26T13:07:21+02:00] Dispatcher reported HTTP 409 after starting the tmux runtime, leaving the ticket row in todo with failure_reason. Runtime ledger shows the prompt was injected and session is running; normalized ticket to in_progress. Expected check-in: 2026-05-26T13:52+02:00.