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 → forgottenAfter:Automated classification → relevance gating → specialist routing → tracked M/L tasksResult:Zero backlog accumulation, specialist-aligned ownership, priority-based scheduling
Daemon Flow Diagram
flowchart LR A[TLDR Email09:00 daily] --> B[tldr-briefing.jsExtracts insights] B --> C[insights JSON log~/system/logs/tldr-insights/YYYY-MM-DD.json] C --> D[tldr-actionizer.js09:30 daily] D --> E{OllamaTASK/SUGGEST/SKIP} E -->|SKIP| F[DiscardNo MC task] E -->|TASK or SUGGEST| G{OllamaHIGH/MED/LOW relevance} G -->|LOW| F G -->|HIGH or MED| H[OWNER_ROUTERKeyword match] H --> I[MC Task CreatedPriority M/L] I --> J[Slack #execSummary]
OWNER_ROUTER Table
The daemon routes insights to specialist company owners based on keyword pattern matching. First match wins (order matters).
| ||
| ||
| ||
| ||
| ||
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 (TASKcat /SUGGEST / SKIP)SKIP:Generic advice not specific to ALAI's stack/products/market → Discard, no MC taskSUGGEST:Potentially valuable but needs CEO review before implementingTASK: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 awarenessLOW:Generic industry news with no clear ALAI connection → Discard, no MC task
Owner & Priority Decision Matrix
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 tasksSUGGESTinsights now appear only in the Slack summary as "Suggestions (FYI, no MC task)". OnlyTASKclass creates an MC task.Startup decay stepBefore 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 backstopAllTASK-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)4SUGGESTinsights skipped (0 tasks created)1TASKinsight created with 30-day TTLDaemon exit 0, Slack summary sent to#exec
Operational Notes
Schedule:Runs daily at 09:30 Oslo time viacom.john.tldr-actionizerLaunchAgentDecay 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-07Output 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.logbookstack-2857-updated.html | jq Check-Rs 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 startBacklog 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:
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:Loadllama3.1:8bmodel on ANVIL Ollama:ollama pull llama3.1:8bOption B:Repoint daemon to FORGE Ollama (10.0.0.2:11434) which already hasqwen3: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, commit9acd41f10)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.