--- title: Daily Digests & Triage url: https://blog.guigpap.com/en/workflows/monitoring-digests/ url_md: https://blog.guigpap.com/en/workflows/monitoring-digests.md category: automation date: '2026-03-28' maturite: production techno: - n8n - odoo - github - telegram - claude application: - monitoring - operations --- # Daily Digests & Triage > Automated GitHub triage, Odoo digests and AI-driven progress reports ## 1. What? — Definition and context Running a solo project with dozens of GitHub issues and as many Odoo tasks feels like permanent juggling: which issue is urgent? Which project is moving? How many hours this week? Rather than burning 20 minutes every morning sorting things by hand, five workflows take care of it in cascade. > **Note - Triage** > > **Triage** comes from emergency medicine: quickly grade each case so that the most urgent ones come first. Here, the AI sorts GitHub issues into "Today", "This week", or "Later". ### The 5 workflows | Workflow | Trigger | Role | |----------|---------|------| | **Daily GitHub Triage** (25n) | 07:30 + `/triage` | Sync issues, deadline-based promotion, AI triage | | **Daily Todo Digest** (24n) | 08:00 + `/todo` | Paginated summary of tasks per horizon | | **Project Progress Reporter** (8n) | Sunday 10:00 | Weekly per-project review | | **Estimation Coverage Weekly** (9n) | Monday 09:00 | Estimation quality tracking | | **Triage Interactive API** (13n) | Session-start hook | Interactive triage from inside Claude Code | The morning sequence is orchestrated: triage at 07:30 (classifies issues), digest at 08:00 (renders the result). The digest builds on what the triage already sorted. ### Big picture ```mermaid flowchart TD T0730["07:30 · Daily GitHub Triage"] T0800["08:00 · Daily Todo Digest"] TSun["Sunday 10:00 · Project Progress Reporter"] TMon["Monday 09:00 · Estimation Coverage Weekly"] Sync["Sync missing GitHub issues → Odoo"] Promote["Promote stages by deadline"] AITriage["AI Issue Triage · codex-yolo"] TodoBucket["Bucketing by horizon · stages 07:30"] Project["Weekly per-project review"] Estim["Estimation quality tracking"] T0730 --> Sync T0730 --> Promote T0730 --> AITriage T0800 --> TodoBucket TSun --> Project TMon --> Estim ``` --- ## 2. Why? — Stakes and motivations ### Problems solved | Problem | Without digests | With digests | |---------|-----------------|--------------| | **Forgotten issues** | GitHub issue created, never triaged | Auto sync + AI triage | | **No priority** | Everything is "to do" with no horizon | Bucketing by urgency | | **Project visibility** | Open Odoo for every project | Pushed weekly summary | | **Tedious triage** | 20 min every morning in the UI | Automatic, AI + deadline | ### Why two-level triage? Triage operates on two independent dimensions: | Dimension | Question | Values | |-----------|----------|--------| | **Project stage** | Where is this task? | Backlog, To Do, In Progress, In Review, Blocked | | **Personal horizon** | When should I work on it? | Today, Tomorrow, This week, This month, Later | The AI suggests both. Deadlines can promote the horizon automatically (a task at D-2 jumps to "Today"), but never demote it. > **Tip - AI cache** > > The AI triage is cached for 7 days per task. It is only recomputed if a GitHub event (reopen, label, milestone) invalidates the cache. That avoids re-asking Claude about tasks that have not changed. --- ## 3. How? — Technical implementation ### Daily GitHub Triage The workflow runs in three phases: **Phase 1 — Sync**: pulls open issues from the GitHub API and creates the missing Odoo tasks (project, labels, milestone, HTML description). **Phase 2 — Promotion**: walks existing tasks and tunes the personal horizon based on deadlines: | Deadline | Promote to | |----------|------------| | Past due | Today | | Within 7 days | This week | | Within 30 days | This month | | Further out | No change | **Phase 3 — AI triage**: untriaged tasks are sent in batches of 10 to Claude (codex-yolo model) which suggests a project stage and a personal horizon for each. Results are written back to Odoo and cached. The output digest summarises the actions: "3 issues created, 5 promoted, 8 AI-triaged". ### Daily Todo Digest Arriving at 08:00 (or via `/todo` in Telegram), this digest displays tasks by urgency. Each task earns a composite score: | Signal | Points | |--------|--------| | High priority | +20 | | Days overdue | x3 (cap 30) | | Deadline within 3 days | +15 | | Stale (14+ days no activity) | +10 | | Recent Claude session (less than 3 days) | +5 | | Age (1 point/day, cap 15) | +1 to +15 | Tasks are then split into pages: - **Page 0**: urgent summary (blocked, overdue, today) - **Page 1**: breakdown by horizon (Today, Tomorrow, This week, This month) - **Pages 2+**: untriaged tasks In Telegram mode, pagination is handled by inline buttons. Each click re-queries Odoo (no cache) for fresh data. ### Project Progress Reporter Every Sunday at 10 AM, a per-project review is generated: - Number of tasks per stage (In Progress, Done) - Timesheet hours for the week - Claude Code metrics (sessions, cost, lines changed) - Inactive projects are excluded ### Estimation Coverage Weekly This workflow watches a precise goal: hit 30 "matched samples" (tasks with both a manual estimate AND real timesheets) to unlock Phase 2 of the Effort Estimator. Every Monday it shows the progress and the delta versus the previous week. ### Interactive triage When a Claude Code session starts, a hook checks whether there are untriaged tasks. If so, it offers an interactive triage through `AskUserQuestion` — straight in the terminal, without leaving Claude Code. The choices are pushed to N8N which updates Odoo. --- ## 4. What if? — Outlook and limits ### Current limits | Limit | Impact | Mitigation | |-------|--------|------------| | **AI cache fixed at 7 days** | No invalidation if the Odoo deadline changes | Invalidation on GitHub events only | | **Single user** | No triage delegation | Sufficient for solo use | | **Pagination zero-state** | Re-query Odoo on every page | Fresh data but slower | ### Evolution scenarios **If a team is involved**: - Round-robin triage with assignment - Per-role digest (dev, PM, ops) - Targeted notification of blocked tasks **If task volume explodes**: - Group by project in the digest - Filter by tag or milestone - Add a "focus" mode that shows only the day --- ## Related pages ### Infrastructure - [Odoo 18 on Docker](/en/infrastructure/odoo-18-setup/) — Tasks backend - [Monitoring Stack](/en/infrastructure/monitoring-stack/) — Prometheus for metrics ### Workflows - [Notification Hub](/en/workflows/notification-hub/) — Digest routing - [GitHub-Odoo Sync](/en/workflows/github-odoo-sync/) — Initial synchronisation - [Claude Code Telemetry](/en/workflows/claude-code-telemetry/) — Claude metrics on tasks ### Reference - [Glossary](/en/reference/glossary/) — Triage, personal horizon ## Metadonnees agent - Cet article est issu du blog GuiGPaP Lab. - Contexte global du blog: https://blog.guigpap.com/llms.txt - Contact auteur: https://odoo.guigpap.com/mon-cv - Licence: CC-BY-SA 4.0