Context
Manual testing (2026-03-31) found that captures with natural-language text and dash-separated items immediately fail triage. Analysis: docs/analysis/2026-03-31_manual_testing_ux_feedback.md §4-5.
Problem
CaptureTriageService.cs uses regex-only extraction (checklist, numbered, bullet patterns). Falls back to entire text as one task. Failures:
- "I need to move all the cards..." — natural language sentence, not a task list → fallback hits validation limits
- "ACME Ltd - item1 - item2 - item3" — space-dash-space separators don't match
^\s*[-*] regex → treated as one task
Core issue: triage is purely mechanical regex, not semantic. Can't handle free-form text that most users will naturally write.
Solution (Phased)
Phase 1 — Regex improvements (low effort)
- Add
- (space-dash-space) as a delimiter pattern
- Add
; as a delimiter
- First segment becomes context/title hint, rest become individual tasks
- Single-sentence fallback: create one card with text as description (don't fail)
Phase 2 — LLM-assisted triage (moderate effort)
When live providers are enabled, send raw text to LLM with triage prompt:
Extract actionable tasks. For each: title (max 180 chars), evidence (max 280 chars), suggested column.
Fall back to regex when LLM unavailable (mock provider).
Phase 3 — Semantic capture pipeline (strategic)
Classify input type (command, task list, note, question) and route to appropriate handler.
Acceptance Criteria
Context
Manual testing (2026-03-31) found that captures with natural-language text and dash-separated items immediately fail triage. Analysis:
docs/analysis/2026-03-31_manual_testing_ux_feedback.md§4-5.Problem
CaptureTriageService.csuses regex-only extraction (checklist, numbered, bullet patterns). Falls back to entire text as one task. Failures:^\s*[-*]regex → treated as one taskCore issue: triage is purely mechanical regex, not semantic. Can't handle free-form text that most users will naturally write.
Solution (Phased)
Phase 1 — Regex improvements (low effort)
-(space-dash-space) as a delimiter pattern;as a delimiterPhase 2 — LLM-assisted triage (moderate effort)
When live providers are enabled, send raw text to LLM with triage prompt:
Fall back to regex when LLM unavailable (mock provider).
Phase 3 — Semantic capture pipeline (strategic)
Classify input type (command, task list, note, question) and route to appropriate handler.
Acceptance Criteria