TLDR Loop — Insight to Implementation Pipeline
TLDR Loop — Insight to Implementation Pipeline
Overview
The TLDR actionizer daemon closes the learning loop between daily TLDR email insights and ALAI's Mission Control task system. Instead of manually triaging insights or dumping them into an ever-growing backlog, the daemon automatically classifies, gates by relevance, routes to specialist owners, and creates tracked tasks — all without human intervention.
CEO Directive (2026-05-08): "Želim da ne sjedi u backlog i da se to krene u implementaciju" — No more backlog dumps. Every insight gets actionable routing or explicit discard.
Problem Solved
- Before: TLDR insights manually reviewed → backlog queue → forgotten
- After: Automated classification → relevance gating → specialist routing → tracked M/L tasks
- Result: Zero backlog accumulation, specialist-aligned ownership, priority-based scheduling
Daemon Flow Diagram
flowchart LR
A[TLDR Email
09:00 daily] --> B[tldr-briefing.js
Extracts insights]
B --> C[insights JSON log
~/system/logs/tldr-insights/YYYY-MM-DD.json]
C --> D[tldr-actionizer.js
09:30 daily]
D --> E{Ollama
TASK/SUGGEST/SKIP}
E -->|SKIP| F[Discard
No MC task]
E -->|TASK or SUGGEST| G{Ollama
HIGH/MED/LOW relevance}
G -->|LOW| F
G -->|HIGH or MED| H[OWNER_ROUTER
Keyword match]
H --> I[MC Task Created
Priority M/L]
I --> J[Slack #exec
Summary]
OWNER_ROUTER Table
The daemon routes insights to specialist company owners based on keyword pattern matching. First match wins (order matters).
| Pattern (regex, case-insensitive) | Owner | Example Keywords |
|---|---|---|
security|breach|cve|vulnerab|ddos|exploit|malware|ransom|cyber |
securion | CVE-2024-1234, DDoS attack, ransomware |
llm|gpt|claude|llama|model|rag|agent|fine-tun|embed|inference|ollama |
agentforge | GPT-5.5, RAG pipeline, Ollama fleet |
payment|stripe|psd2|fintech|invoice|billing|bank|finance |
finverge | Stripe API, PSD2 compliance, invoicing |
docker|kubernetes|k8s|deploy|ci/cd|terraform|cloud run|aws|azure|gcp|nginx |
flowforge | Cloud Run, Kubernetes, CI/CD pipelines |
ios|android|mobile|swift|flutter|react native |
skybound | Flutter 3.22, iOS performance, React Native |
| (No match) | codecraft (default) | Generic SaaS, backend, frontend |
Safety Invariant: owner='backlog' is forbidden. The daemon will throw an error if any route resolves to 'backlog'. All tasks must go to a specialist owner or the default (codecraft).
Owner Assignment Rules
The daemon uses a two-stage Ollama LLM gate to determine owner and priority:
- Classification Gate (TASK / SUGGEST / SKIP)
- SKIP: Generic advice not specific to ALAI's stack/products/market → Discard, no MC task
- SUGGEST: Potentially valuable but needs CEO review before implementing
- TASK: Concrete, actionable, implementable within 1 week, clearly fits roadmap
- Relevance Gate (HIGH / MED / LOW)
- HIGH: Directly actionable for ALAI products, stack, or market focus (e.g., specific Ollama optimization, security patch for Node.js/Kotlin, feature for Bilko/Drop/Tok/Lobby)
- MED: Broadly relevant to ALAI's industry or tech direction, warrants CEO awareness
- LOW: Generic industry news with no clear ALAI connection → Discard, no MC task
Owner & Priority Decision Matrix
| Relevance | Classification | Owner | Priority |
|---|---|---|---|
| HIGH | TASK or SUGGEST | OWNER_ROUTER result | M |
| MED | TASK | OWNER_ROUTER result | L |
| MED | SUGGEST | alem (CEO triage bucket) | L |
| LOW | Any | (Discarded) | (No task) |
Key Rule: NEVER assign owner='backlog'. All tasks route to a specialist or CEO triage bucket.
Decay (2026-06-04)
MC #102890 | Problem: The daemon created an MC task for BOTH classification classes — TASK→"[TLDR] Implement" and SUGGEST→"[TLDR] Review". The SUGGEST/Review tasks accumulated unbounded. 63 noise tasks spanning 2026-04-23 through 2026-06-03 were triage-closed on 2026-06-03/04.
The 3-Part Decay Fix
- SUGGEST class no longer creates MC tasks
SUGGESTinsights now appear only in the Slack summary as "Suggestions (FYI, no MC task)". OnlyTASKclass creates an MC task. - Startup decay step
Before creating new tasks, the daemon auto-closes anyOPENtask whose title starts with"[TLDR]"andcreated_at > 14 days agoviamc.js bulk-close, reason:"tldr-actionizer auto-decay >14d". - 30-day TTL backstop
AllTASK-class tasks created with--ttl-minutes 43200(30 days).
The Casing Bug + Fix
Bug: The decay query used status='OPEN' (uppercase) but mission-control.db stores status lowercase ('open'). SQLite is case-sensitive for string comparisons, so the query matched 0 rows (silent no-op).
Fix: Normalized to status='open' (lowercase) and created_at threshold to 'YYYY-MM-DD HH:MM:SS' space-format.
Live Validation Evidence
2026-06-04 live run:
- Seeded a
[TLDR]task backdated 20 days (#102893) - Live daemon run closed it (
status=done, reason: auto-decay >14d) - 4
SUGGESTinsights skipped (0 tasks created) - 1
TASKinsight created with 30-day TTL - Daemon exit 0, Slack summary sent to
#exec
Operational Notes
- Schedule: Runs daily at 09:30 Oslo time via
com.john.tldr-actionizerLaunchAgent - Decay threshold: 14 days (configurable in daemon source)
- TTL backstop: 30 days (43,200 minutes)
- Logs:
~/system/logs/tldr-actionizer.log
Known Follow-Up
The tasks table has no ttl_minutes column. Verify that mc.js --ttl-minutes actually persists (14-day decay is the primary mechanism and works regardless).
Operator Runbook
How to Add New Domain Pattern
- Edit
~/system/daemons/tldr-actionizer.jsand update theOWNER_ROUTERconstant (lines 66-87). - Add corresponding unit test in
~/system/daemons/tests/tldr-actionizer-router.test.js(mirror the pattern + test case). - Run test:
node ~/system/daemons/tests/tldr-actionizer-router.test.js— verify all tests pass. - Restart daemon:
launchctl stop com.john.tldr-actionizer && launchctl start com.john.tldr-actionizer
Example: To route design insights to vizu:
{
pattern: /figma|sketch|design system|ui|ux|prototyp|wireframe/i,
owner: 'vizu'
}
How to Override Routing for Specific Insight
If the daemon incorrectly routes an insight, manually reassign the MC task:
node ~/system/tools/mc.js assign <task_id> <new_owner>
How to Inspect Dry-Run Output
Test routing logic without creating real MC tasks:
node ~/system/daemons/tldr-actionizer.js --dry-run --date 2026-05-07
Output written to /tmp/tldr-router-dryrun-99824.json with classification, relevance, and assigned owner for each insight.
How to Verify Daemon Health
tail -50 ~/system/logs/tldr-actionizer.log | jq
Check for:
"level": "info"— normal operation"level": "warn"— classification unclear or Ollama timeout (daemon defaults to safe fallback)"level": "error"— MC task creation failed
LaunchAgent: com.john.tldr-actionizer (runs daily at 09:30 Oslo time)
launchctl list | grep tldr-actionizer # Check status
launchctl stop com.john.tldr-actionizer # Manual stop
launchctl start com.john.tldr-actionizer # Manual start
Backlog Sweep History
On 2026-05-08, MC #99823 performed a one-time sweep of existing backlog tasks to re-route or close them per the new routing rules. Results:
| MC ID | Priority | Old Owner | New Owner/Status | Relevance | Reasoning |
|---|---|---|---|---|---|
| 9475 | M | backlog | agentforge | HIGH | PII redaction → Bilko/Drop/Lobby data pipelines |
| 10081 | L | backlog | closed | LOW | HAL breach is news-only, no ALAI tie |
| 99371 | L | backlog | closed | LOW | Video gen — ALAI doesn't do video |
| 99372 | L | backlog | closed | LOW | Codex cosmetic update — no action |
| 99373 | L | backlog | closed | LOW | UK challenger bank — wrong market (we're Nordic/Balkan) |
| 99374 | M | backlog | securion | MED | DDoS hardening — Securion service-line |
| 99375 | M | backlog | securion | MED | Trellix breach awareness — Securion supply-chain |
| 99565 | M | backlog | agentforge | HIGH | GPT-5.5 token cost — directly relevant to Pillar #9 cost ceiling |
| 99566 | L | backlog | closed | LOW | Voice infra — ALAI doesn't do voice |
| 99567 | M | backlog | securion | HIGH | Deepsec — ALAI Sec service-line aligned (memo 2026-05-01) |
| 99568 | L | backlog | closed | LOW | Meta-AI-research news — no concrete action |
Summary: 11 tasks processed, 5 re-routed to specialist owners (agentforge, securion), 6 closed as low-relevance.
Known Gaps
1. ANVIL Ollama No Models Loaded
Impact: Daemon currently safe-fails ALL insights to alem/MED+SUGGEST because ANVIL Ollama (localhost:11434) has 0 models loaded. Classification and relevance gates return unclear responses, triggering default fallback.
Fix Options:
- Option A: Load
llama3.1:8bmodel on ANVIL Ollama:ollama pull llama3.1:8b - Option B: Repoint daemon to FORGE Ollama (10.0.0.2:11434) which already has
qwen3:8b-q8_0loaded:# Edit ~/system/daemons/tldr-actionizer.js line 48: const OLLAMA_URL = process.env.OLLAMA_HOST || 'http://10.0.0.2:11434';
Status: Open (no fix deployed yet). Daemon runs daily but all insights currently default to CEO triage bucket.
2. OWNER_ROUTER Constant Drift Risk
Issue: The OWNER_ROUTER constant is defined in both:
~/system/daemons/tldr-actionizer.js(lines 66-87)~/system/daemons/tests/tldr-actionizer-router.test.js(lines 20-42)
If the daemon constant is updated without syncing the test file, unit tests become stale and may pass incorrectly.
Recommendation: Extract OWNER_ROUTER into a shared module:
// ~/system/daemons/lib/owner-router.js
module.exports = [ /* patterns */ ];
// In both files:
const OWNER_ROUTER = require('./lib/owner-router');
Status: Open (technical debt, does not block current operation).
Genesis MC IDs
- Parent: MC #99822 (TLDR routing reform H-priority)
- Sweep: MC #99823 (backlog sweep, done)
- Patch: MC #99824 (CodeCraft OWNER_ROUTER implementation, done, commit
9acd41f10) - Validation: MC #99825 (Proveo 6/6 PASS, done)
- Documentation: MC #99826 (this page, Skillforge)
- Decay Fix: MC #102890 (3-part decay fix + casing bug, 2026-06-04, live validated)
Delivery Date: 2026-05-08 (initial), 2026-06-04 (decay fix)
CEO Directive: "Želim da ne sjedi u backlog i da se to krene u implementaciju" — Implemented same-day.