[ { "id": "memo-auto-title", "title": "Memo Auto-Title (<1s)", "tier": "ship-soon", "objective": "Generate specific memo titles that are useful in list view and search.", "inputExample": { "memoId": "memo_2026_04_03_0814", "capturedAt": "2026-04-03T08:14:22-04:00", "currentTitle": "New Memo", "transcript": "Need to rewrite the launch page hero. Put proof first, then product shot, then pricing line. Also ask Nina for two customer quotes by Tuesday." }, "prompt": { "task": "Create one concise and specific title for a fresh memo.", "system": "You write titles for Talkie voice memos.\nRules:\n- Return JSON only.\n- Title must be <= 48 characters.\n- Make it specific to the memo's core action.\n- Never output generic titles like \"Voice Memo\" or \"Thoughts\".", "user": "Memo ID: {{memoId}}\nCaptured at: {{capturedAt}}\nCurrent title: {{currentTitle}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "title": "Launch hero: proof first, quotes by Tuesday", "confidence": 0.92, "rationale": "Memo focuses on landing page reorder and quote deadline." } }, "testCase": { "name": "Avoid generic titles on clear action memo", "input": { "memoId": "memo_test_title_01", "capturedAt": "2026-04-04T10:05:00-04:00", "currentTitle": "Voice Memo", "transcript": "Book dentist for Friday and email insurance form before noon." }, "assertions": [ "title is not \"Voice Memo\"", "title length <= 48", "title contains either \"dentist\" or \"insurance\"" ] } }, { "id": "memo-type-detection", "title": "Memo Type Detection", "tier": "ship-soon", "objective": "Classify memo intent early so the right local workflow can run automatically.", "inputExample": { "memoId": "memo_2026_04_03_0918", "transcript": "Need to lock April hiring plan: two backend roles, one designer, no contractor spend until Q3.", "candidateTypes": [ "task", "journal", "meeting", "idea", "reference" ] }, "prompt": { "task": "Classify memo into one primary type and optional secondary type.", "system": "You are a routing classifier for Talkie.\nReturn JSON only.\nPick one primaryType from candidateTypes.\nIf confidence is below 0.65, set needsReview to true.", "user": "Memo ID: {{memoId}}\nCandidate types: {{candidateTypes}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "primaryType": "meeting", "secondaryType": "task", "confidence": 0.88, "suggestedWorkflow": "extract-action-items", "needsReview": false } }, "testCase": { "name": "Ambiguous personal reflection should not over-route", "input": { "memoId": "memo_test_type_01", "transcript": "Felt scattered today. Might restructure mornings and maybe skip Slack until 10.", "candidateTypes": [ "task", "journal", "meeting", "idea", "reference" ] }, "assertions": [ "primaryType is either \"journal\" or \"idea\"", "confidence < 0.8", "needsReview can be true when uncertainty is high" ] } }, { "id": "action-item-extraction", "title": "Action Item Extraction With Confidence", "tier": "ship-soon", "objective": "Extract trackable tasks from natural speech while preserving evidence spans.", "inputExample": { "memoId": "memo_2026_04_03_1042", "transcript": "By Monday, send revised onboarding doc to Priya. Also schedule 30 minutes with legal next week. I should probably clean up old Stripe test accounts too.", "ownerDefault": "Arach" }, "prompt": { "task": "Extract explicit and implied action items from memo transcript.", "system": "You extract tasks from speech.\nReturn JSON only.\nEach item needs: text, owner, dueDateISO (or null), confidence, evidence.\nDo not invent due dates if none are present.", "user": "Memo ID: {{memoId}}\nOwner default: {{ownerDefault}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "items": [ { "text": "Send revised onboarding doc to Priya", "owner": "Arach", "dueDateISO": "2026-04-06", "confidence": 0.95, "evidence": "By Monday, send revised onboarding doc to Priya." }, { "text": "Schedule 30 minute legal review", "owner": "Arach", "dueDateISO": null, "confidence": 0.82, "evidence": "schedule 30 minutes with legal next week" } ] } }, "testCase": { "name": "Low-confidence tasks remain extractable but marked", "input": { "memoId": "memo_test_tasks_01", "transcript": "Maybe clean up the old docs folder sometime.", "ownerDefault": "Arach" }, "assertions": [ "items length >= 1", "item confidence < 0.75 for vague tasks", "evidence field is always present" ] } }, { "id": "transcript-cleanup-presets", "title": "Transcript Cleanup Presets", "tier": "ship-soon", "objective": "Apply local rewrite modes without losing factual meaning from the source transcript.", "inputExample": { "memoId": "memo_2026_04_02_1831", "preset": "executive-summary", "transcript": "Um okay so the thing is we shipped the sync fix and uh support tickets dropped from nineteen to six, but we still have weird duplicate reminders for recurring tasks." }, "prompt": { "task": "Rewrite transcript according to preset while preserving concrete facts.", "system": "You rewrite transcripts using style presets.\nReturn JSON only.\nNever change numbers, names, or dates.\nIf preset is executive-summary, use short declarative sentences.", "user": "Preset: {{preset}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "cleanedText": "Shipped sync fix reduced support tickets from 19 to 6. Duplicate reminders still occur for recurring tasks.", "preservedFacts": [ "support tickets dropped from 19 to 6", "duplicate reminders remain" ], "removedFillers": [ "um", "uh", "okay" ] } }, "testCase": { "name": "Fact preservation under rewrite", "input": { "memoId": "memo_test_cleanup_01", "preset": "bullet-plan", "transcript": "We spent 4 hours on export bugs and fixed 3 of 5 issues." }, "assertions": [ "output contains number 4", "output contains phrase 3 of 5", "filler words are not introduced" ] } }, { "id": "what-matters-summary", "title": "Top-3 What Matters Summary", "tier": "ship-soon", "objective": "Compress long voice notes into the three highest-signal points.", "inputExample": { "memoId": "memo_2026_04_01_0720", "transcript": "Long ramble about launch prep, hiring plan, and a possible referral program. Final decisions: launch moved to May 10, defer referral until after analytics rewrite, and cut onboarding to three screens." }, "prompt": { "task": "Return exactly three highest-priority points from transcript.", "system": "You produce high-signal summaries.\nReturn JSON only.\nOutput exactly 3 points.\nEach point must include evidence quote and priority score 1-100.", "user": "Memo ID: {{memoId}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "topPoints": [ { "point": "Launch date moved to May 10.", "priority": 96, "evidence": "launch moved to May 10" }, { "point": "Referral program deferred until analytics rewrite is done.", "priority": 87, "evidence": "defer referral until after analytics rewrite" }, { "point": "Onboarding flow reduced to three screens.", "priority": 80, "evidence": "cut onboarding to three screens" } ] } }, "testCase": { "name": "Summary must stay at exactly three points", "input": { "memoId": "memo_test_summary_01", "transcript": "Decision one. Decision two. Decision three. Decision four." }, "assertions": [ "topPoints length equals 3", "priority values are numeric", "each point includes evidence" ] } }, { "id": "calendar-intent-detection", "title": "Calendar Intent Detection", "tier": "ship-soon", "objective": "Detect event-worthy language and produce structured event suggestions.", "inputExample": { "memoId": "memo_2026_04_03_1212", "capturedAt": "2026-04-03T12:12:10-04:00", "timezone": "America/Toronto", "transcript": "Lunch with Dana next Tuesday at 1 at Canary. Also review roadmap with ops Thursday 4:30 PM for 45 minutes." }, "prompt": { "task": "Extract potential calendar events from transcript.", "system": "You detect calendar intents.\nReturn JSON only.\nResolve relative dates using capturedAt and timezone.\nMark needsConfirmation true when date/time confidence is below 0.8.", "user": "Captured at: {{capturedAt}}\nTimezone: {{timezone}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "events": [ { "title": "Lunch with Dana", "startAtISO": "2026-04-07T13:00:00-04:00", "durationMinutes": 60, "location": "Canary", "confidence": 0.9, "needsConfirmation": false }, { "title": "Roadmap review with Ops", "startAtISO": "2026-04-09T16:30:00-04:00", "durationMinutes": 45, "location": null, "confidence": 0.86, "needsConfirmation": false } ] } }, "testCase": { "name": "Relative date resolution uses explicit timezone", "input": { "memoId": "memo_test_calendar_01", "capturedAt": "2026-04-04T09:00:00-04:00", "timezone": "America/Toronto", "transcript": "Call Sam tomorrow at 2 PM." }, "assertions": [ "startAtISO date is 2026-04-05", "timezone offset in startAtISO is -04:00", "event title mentions Sam" ] } }, { "id": "reminder-normalization", "title": "Reminder Phrasing Normalization", "tier": "ship-soon", "objective": "Turn vague spoken reminders into clear and actionable reminder objects.", "inputExample": { "memoId": "memo_2026_04_03_1722", "transcript": "Need to maybe ping Chris about the invoice thing before it gets weird.", "userLocale": "en-CA" }, "prompt": { "task": "Normalize vague reminder speech into specific reminder text and metadata.", "system": "You normalize reminders.\nReturn JSON only.\nReminder text should start with a strong verb.\nWhen due date is unclear, set dueDateISO to null and add followUpQuestion.", "user": "Locale: {{userLocale}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "reminderText": "Message Chris for invoice status update", "dueDateISO": null, "confidence": 0.78, "followUpQuestion": "When do you want this done?" } }, "testCase": { "name": "Reminder text should be imperative and concrete", "input": { "memoId": "memo_test_reminder_01", "transcript": "Maybe look into new card design at some point.", "userLocale": "en-CA" }, "assertions": [ "reminderText starts with a verb", "reminderText does not contain \"maybe\"", "followUpQuestion exists when due date is missing" ] } }, { "id": "private-redaction-pass", "title": "Private Redaction Pass", "tier": "ship-soon", "objective": "Redact sensitive data locally before sharing, syncing, or cloud routing.", "inputExample": { "memoId": "memo_2026_04_02_1114", "transcript": "Card ending 4821 failed again. Patient name is Mark Lavoie and policy number is HN-772-19.", "policies": [ "mask-health-data", "mask-financial-data" ] }, "prompt": { "task": "Detect and mask sensitive entities while preserving memo readability.", "system": "You redact sensitive entities.\nReturn JSON only.\nUse [REDACTED_TYPE] placeholders.\nInclude list of redacted entities with type and confidence.", "user": "Policies: {{policies}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "redactedTranscript": "Card ending [REDACTED_FINANCIAL] failed again. Patient name is [REDACTED_PERSON] and policy number is [REDACTED_HEALTH_ID].", "entities": [ { "value": "4821", "type": "financial", "confidence": 0.94 }, { "value": "Mark Lavoie", "type": "person", "confidence": 0.98 }, { "value": "HN-772-19", "type": "health-id", "confidence": 0.92 } ] } }, "testCase": { "name": "No raw sensitive tokens remain in output", "input": { "memoId": "memo_test_redact_01", "transcript": "SSN 555-44-9012 and account 00391299 should never leave device.", "policies": [ "mask-financial-data" ] }, "assertions": [ "redactedTranscript does not contain 555-44-9012", "redactedTranscript does not contain 00391299", "entities length >= 2" ] } }, { "id": "writing-style-memory", "title": "Per-User Writing Style Memory", "tier": "local-first", "objective": "Rewrite outputs in the user's preferred voice using local style profile memory.", "inputExample": { "memoId": "memo_2026_04_03_2010", "styleProfile": { "preferredTone": "direct", "sentenceLength": "short", "avoidWords": [ "leverage", "synergy" ], "likesBullets": true }, "transcript": "We need to change onboarding and probably reduce friction around account linking." }, "prompt": { "task": "Rewrite summary using stored user style profile.", "system": "You are a personal style adapter.\nReturn JSON only.\nMatch styleProfile preferences.\nDo not alter factual meaning.", "user": "Style profile:\n{{styleProfile}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "styledSummary": "Onboarding needs two changes:\n- Remove extra account-linking step\n- Reduce friction in first-run flow", "styleChecks": { "usedBullets": true, "avoidedWords": [ "leverage", "synergy" ] } } }, "testCase": { "name": "Avoid banned style words", "input": { "memoId": "memo_test_style_01", "styleProfile": { "preferredTone": "direct", "sentenceLength": "short", "avoidWords": [ "utilize" ], "likesBullets": false }, "transcript": "We should utilize a new onboarding flow." }, "assertions": [ "styledSummary does not contain \"utilize\"", "output preserves onboarding meaning" ] } }, { "id": "similar-memo-recall", "title": "Find Similar Memo (Semantic Recall)", "tier": "local-first", "objective": "Retrieve related historical memos to improve continuity in decision-making.", "inputExample": { "memoId": "memo_2026_04_04_0740", "queryTranscript": "Need to revisit referral program constraints before launch.", "candidateMemos": [ { "memoId": "memo_2026_03_21_0800", "summary": "Deferred referral system until analytics migration." }, { "memoId": "memo_2026_03_28_0930", "summary": "Updated website hero copy and social proof blocks." }, { "memoId": "memo_2026_04_01_1830", "summary": "Defined invite-only referral pilot for power users." } ] }, "prompt": { "task": "Rank the most semantically related memos for current transcript.", "system": "You are a memo recall ranker.\nReturn JSON only.\nSelect top 3 matches with relevance score and rationale.\nPrioritize decision continuity over keyword overlap.", "user": "Current transcript:\n{{queryTranscript}}\nCandidates:\n{{candidateMemos}}" }, "expectedOutput": { "format": "json", "example": { "matches": [ { "memoId": "memo_2026_03_21_0800", "relevance": 0.93, "rationale": "Same referral timing constraint." }, { "memoId": "memo_2026_04_01_1830", "relevance": 0.89, "rationale": "Directly discusses referral pilot scope." }, { "memoId": "memo_2026_03_28_0930", "relevance": 0.34, "rationale": "Marketing copy only; weak relation." } ] } }, "testCase": { "name": "Historical decision memo should rank above lexical overlap", "input": { "memoId": "memo_test_recall_01", "queryTranscript": "Need to revisit cancellation policy and trials.", "candidateMemos": [ { "memoId": "a", "summary": "Discussed trial cancellation policy and refund rules." }, { "memoId": "b", "summary": "Discussed policy page typography updates." } ] }, "assertions": [ "memoId \"a\" ranks first", "top match relevance > 0.8" ] } }, { "id": "project-clustering", "title": "Project Clustering From Voice History", "tier": "local-first", "objective": "Auto-group memos into evolving project threads without manual folders.", "inputExample": { "dateRange": "2026-03-20 to 2026-04-04", "memos": [ { "memoId": "m1", "summary": "Refactor sync retry logic and duplicate reminders." }, { "memoId": "m2", "summary": "Landing page social proof order and CTA copy." }, { "memoId": "m3", "summary": "Recurring reminder bug root cause in scheduler." }, { "memoId": "m4", "summary": "Launch announcement draft and waitlist email." } ] }, "prompt": { "task": "Cluster memo summaries into project-level threads.", "system": "You cluster memos into project threads.\nReturn JSON only.\nEach cluster must have: clusterId, title, memoIds, confidence.\nCreate \"misc\" only when confidence is below 0.6.", "user": "Date range: {{dateRange}}\nMemos:\n{{memos}}" }, "expectedOutput": { "format": "json", "example": { "clusters": [ { "clusterId": "scheduler-reliability", "title": "Scheduler reliability fixes", "memoIds": [ "m1", "m3" ], "confidence": 0.9 }, { "clusterId": "launch-site-and-comms", "title": "Launch site and communications", "memoIds": [ "m2", "m4" ], "confidence": 0.86 } ] } }, "testCase": { "name": "Related bug memos should cluster together", "input": { "dateRange": "2026-04-01 to 2026-04-03", "memos": [ { "memoId": "a1", "summary": "Crash in sync queue on reconnect." }, { "memoId": "a2", "summary": "Retry strategy for sync queue and reconnect handling." }, { "memoId": "b1", "summary": "Podcast notes and reading list." } ] }, "assertions": [ "a1 and a2 share a clusterId", "b1 may be separate or misc" ] } }, { "id": "next-step-suggestion-engine", "title": "Next-Step Suggestion Engine", "tier": "local-first", "objective": "Recommend the best immediate action after transcription to reduce decision fatigue.", "inputExample": { "memoId": "memo_2026_04_04_0902", "transcript": "I have three product ideas but no clear winner. Need a quick way to score them this week.", "availableActions": [ "summarize", "extract-tasks", "schedule", "draft-note", "ask-clarifying-question" ] }, "prompt": { "task": "Choose one best next action for the user right now.", "system": "You are a next-step recommender.\nReturn JSON only.\nPick exactly one action from availableActions.\nPrefer actions that unblock momentum within 5 minutes.", "user": "Available actions: {{availableActions}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "action": "ask-clarifying-question", "reason": "User has options but no decision criteria; one clarifying question unlocks scoring.", "confidence": 0.84 } }, "testCase": { "name": "Action choice reflects transcript uncertainty", "input": { "memoId": "memo_test_next_01", "transcript": "Tomorrow 9 AM send invoice to Alex and set follow-up reminder for Friday.", "availableActions": [ "summarize", "extract-tasks", "schedule", "draft-note", "ask-clarifying-question" ] }, "assertions": [ "action is either \"extract-tasks\" or \"schedule\"", "reason references explicit deadline" ] } }, { "id": "follow-up-question-generator", "title": "Follow-Up Question Generator", "tier": "local-first", "objective": "Ask minimal clarifying questions when memo intent is ambiguous.", "inputExample": { "memoId": "memo_2026_04_04_1011", "transcript": "Need to get the partner thing moving again soon.", "maxQuestions": 2 }, "prompt": { "task": "Generate up to two high-value clarifying questions.", "system": "You generate clarifying questions.\nReturn JSON only.\nAt most maxQuestions questions.\nQuestions must be answerable in one sentence.", "user": "Max questions: {{maxQuestions}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "questions": [ "Which partner are you referring to?", "What is the first concrete step you want to take this week?" ], "confidence": 0.79 } }, "testCase": { "name": "Do not exceed requested question count", "input": { "memoId": "memo_test_questions_01", "transcript": "Should improve onboarding maybe.", "maxQuestions": 1 }, "assertions": [ "questions length equals 1", "question ends with ?" ] } }, { "id": "hybrid-model-router", "title": "Hybrid Local/Cloud Router", "tier": "local-first", "objective": "Route requests to local first, escalating only when complexity requires cloud.", "inputExample": { "requestId": "req_2026_04_04_1115", "taskType": "summary", "transcriptLengthTokens": 420, "requiresLongContext": false, "privacyLevel": "high", "localAvailability": true }, "prompt": { "task": "Decide whether to run local or cloud for this request.", "system": "You are a model router.\nReturn JSON only.\nPrefer local when quality risk is acceptable.\nIf privacyLevel is high, local wins unless impossible.", "user": "Request metadata:\n{{requestMetadata}}" }, "expectedOutput": { "format": "json", "example": { "route": "local", "provider": "apple-foundation-model", "reason": "Short summary task with high privacy requirement.", "expectedLatencyMs": 700 } }, "testCase": { "name": "Long-context tasks escalate to cloud", "input": { "requestId": "req_test_router_01", "taskType": "complex-reasoning", "transcriptLengthTokens": 6400, "requiresLongContext": true, "privacyLevel": "medium", "localAvailability": true }, "assertions": [ "route equals \"cloud\"", "reason mentions long context" ] } }, { "id": "context-packet-builder", "title": "Context Packet Builder", "tier": "local-first", "objective": "Package just enough memory context for downstream steps without token bloat.", "inputExample": { "memoId": "memo_2026_04_04_1210", "transcript": "Need to finalize waitlist flow and launch email sequence this week.", "relatedMemos": [ { "memoId": "m_prev_1", "summary": "Chose ConvertKit for launch sequence." }, { "memoId": "m_prev_2", "summary": "Waitlist conversion dropped after form change." } ], "openTasks": [ { "id": "t1", "text": "Fix waitlist form validation", "status": "in-progress" }, { "id": "t2", "text": "Draft launch email 2", "status": "todo" } ], "tokenBudget": 800 }, "prompt": { "task": "Build compact context packet for next LLM call.", "system": "You build context packets.\nReturn JSON only.\nHonor tokenBudget.\nPrioritize decisions, active tasks, and unresolved questions.", "user": "Token budget: {{tokenBudget}}\nCurrent transcript:\n{{transcript}}\nRelated memos:\n{{relatedMemos}}\nOpen tasks:\n{{openTasks}}" }, "expectedOutput": { "format": "json", "example": { "packet": { "decisions": [ "ConvertKit selected for launch sequence." ], "activeTasks": [ "Fix waitlist form validation", "Draft launch email 2" ], "openQuestions": [ "Did form change cause drop in conversion?" ], "relevantMemoIds": [ "m_prev_1", "m_prev_2" ] }, "tokenEstimate": 96 } }, "testCase": { "name": "Context packet must stay under budget", "input": { "memoId": "memo_test_packet_01", "transcript": "Need to plan hiring and launch and docs and support and pricing and analytics.", "relatedMemos": [], "openTasks": [], "tokenBudget": 120 }, "assertions": [ "tokenEstimate <= 120", "packet has at least one decision or openQuestion field" ] } }, { "id": "conversation-to-checklist", "title": "Conversation To Checklist Transformer", "tier": "local-first", "objective": "Convert stream-of-consciousness transcripts into ordered execution checklists.", "inputExample": { "memoId": "memo_2026_04_04_1305", "transcript": "For launch day: first QA the checkout flow, then schedule tweets, then send to press list after site is live.", "ownerDefault": "Arach" }, "prompt": { "task": "Transform transcript into ordered checklist with dependencies.", "system": "You convert speech to checklist.\nReturn JSON only.\nEach item needs: id, text, order, dependsOn, owner.\nPreserve execution order from transcript when explicit.", "user": "Owner default: {{ownerDefault}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "checklist": [ { "id": "c1", "text": "QA checkout flow", "order": 1, "dependsOn": [], "owner": "Arach" }, { "id": "c2", "text": "Schedule launch tweets", "order": 2, "dependsOn": [ "c1" ], "owner": "Arach" }, { "id": "c3", "text": "Send press list announcement", "order": 3, "dependsOn": [ "c1" ], "owner": "Arach" } ] } }, "testCase": { "name": "Dependency order matches explicit sequencing words", "input": { "memoId": "memo_test_checklist_01", "transcript": "First export data. Then verify CSV. Finally email finance.", "ownerDefault": "Arach" }, "assertions": [ "order values are 1,2,3", "item 2 depends on item 1", "item 3 depends on item 2 or item 1" ] } }, { "id": "personal-knowledge-graph", "title": "Personal Knowledge Graph From Voice", "tier": "big-swings", "objective": "Build a local graph of people, projects, decisions, and open questions over time.", "inputExample": { "memos": [ { "memoId": "mkg1", "transcript": "Dana owns launch email copy. We decided to postpone referral pilot to May." }, { "memoId": "mkg2", "transcript": "Question still open: should we gate referral by invite code?" } ] }, "prompt": { "task": "Extract graph nodes and edges from memo batch.", "system": "You construct a personal knowledge graph.\nReturn JSON only.\nNodes can be person, project, decision, question, artifact.\nEdges need type, sourceNodeId, targetNodeId, evidenceMemoId.", "user": "Memos:\n{{memos}}" }, "expectedOutput": { "format": "json", "example": { "nodes": [ { "id": "person_dana", "type": "person", "label": "Dana" }, { "id": "project_launch_email", "type": "project", "label": "Launch email copy" }, { "id": "decision_referral_may", "type": "decision", "label": "Postpone referral pilot to May" }, { "id": "question_referral_gate", "type": "question", "label": "Gate referral by invite code?" } ], "edges": [ { "type": "owns", "sourceNodeId": "person_dana", "targetNodeId": "project_launch_email", "evidenceMemoId": "mkg1" }, { "type": "decides", "sourceNodeId": "project_launch_email", "targetNodeId": "decision_referral_may", "evidenceMemoId": "mkg1" }, { "type": "raises", "sourceNodeId": "project_launch_email", "targetNodeId": "question_referral_gate", "evidenceMemoId": "mkg2" } ] } }, "testCase": { "name": "Duplicate entity names should be merged", "input": { "memos": [ { "memoId": "a", "transcript": "Talk to Chris about pricing." }, { "memoId": "b", "transcript": "Chris confirmed pricing test." } ] }, "assertions": [ "only one node labeled Chris", "edges reference merged Chris node id" ] } }, { "id": "catch-me-up-daily-brief", "title": "Catch Me Up Daily Brief", "tier": "big-swings", "objective": "Produce a private daily narrative from memos, tasks, and decisions.", "inputExample": { "date": "2026-04-04", "memos": [ { "memoId": "d1", "summary": "Launch date locked for May 10." }, { "memoId": "d2", "summary": "Need legal review on revised terms." } ], "completedTasks": [ "Draft launch email 1", "Fix duplicate reminders bug" ], "openTasks": [ "Schedule legal review" ] }, "prompt": { "task": "Generate concise daily brief with wins, risks, and next actions.", "system": "You write daily briefs.\nReturn JSON only.\nSections required: wins, risks, nextActions.\nKeep each section under 3 bullets.", "user": "Date: {{date}}\nMemos: {{memos}}\nCompleted tasks: {{completedTasks}}\nOpen tasks: {{openTasks}}" }, "expectedOutput": { "format": "json", "example": { "wins": [ "Launch date finalized for May 10.", "Duplicate reminders bug fixed." ], "risks": [ "Legal review still pending for terms update." ], "nextActions": [ "Book legal review slot by Monday." ] } }, "testCase": { "name": "Daily brief includes all required sections", "input": { "date": "2026-04-04", "memos": [ { "memoId": "x", "summary": "Mostly planning chatter." } ], "completedTasks": [], "openTasks": [ "Finalize budget" ] }, "assertions": [ "wins section exists", "risks section exists", "nextActions section exists" ] } }, { "id": "contradiction-drift-detection", "title": "Contradiction And Drift Detection", "tier": "big-swings", "objective": "Detect conflicts between new memos and prior decisions.", "inputExample": { "newMemo": { "memoId": "new1", "transcript": "Let us launch on April 28 instead of May 10." }, "priorDecisions": [ { "decisionId": "dec_12", "text": "Launch date is May 10, approved in planning meeting.", "date": "2026-04-01" } ] }, "prompt": { "task": "Flag contradictions or strategic drift against known decisions.", "system": "You detect contradictions.\nReturn JSON only.\nFor each conflict include severity, conflictingDecisionId, and explanation.\nNo conflict should be returned as empty array.", "user": "New memo:\n{{newMemo}}\nPrior decisions:\n{{priorDecisions}}" }, "expectedOutput": { "format": "json", "example": { "conflicts": [ { "conflictingDecisionId": "dec_12", "severity": "high", "explanation": "New memo proposes April 28 while approved date is May 10.", "recommendation": "Request explicit decision override before updating timeline." } ] } }, "testCase": { "name": "Date conflict should be high severity", "input": { "newMemo": { "memoId": "new_test_01", "transcript": "Move quarterly review from June 20 to June 2." }, "priorDecisions": [ { "decisionId": "d9", "text": "Quarterly review date fixed to June 20.", "date": "2026-03-30" } ] }, "assertions": [ "conflicts length >= 1", "first conflict severity equals high" ] } }, { "id": "momentum-scoring", "title": "Momentum Scoring", "tier": "big-swings", "objective": "Quantify execution momentum from spoken intents versus completed outcomes.", "inputExample": { "periodDays": 14, "intents": [ { "text": "Ship waitlist flow", "firstSeen": "2026-03-24", "repeats": 4 }, { "text": "Book legal review", "firstSeen": "2026-03-29", "repeats": 3 } ], "completions": [ { "text": "Ship waitlist flow", "completedAt": "2026-04-02" } ] }, "prompt": { "task": "Compute momentum score and explain key drivers.", "system": "You score execution momentum.\nReturn JSON only.\nScore is 0-100.\nPenalize repeated unresolved intents.\nReward completed intents within period.", "user": "Period days: {{periodDays}}\nIntents:\n{{intents}}\nCompletions:\n{{completions}}" }, "expectedOutput": { "format": "json", "example": { "momentumScore": 62, "trend": "flat", "drivers": [ "One high-repeat intent completed (waitlist flow).", "Legal review intent remains unresolved with 3 repeats." ], "unresolvedHotspots": [ "Book legal review" ] } }, "testCase": { "name": "Score drops when repeats rise without completion", "input": { "periodDays": 14, "intents": [ { "text": "Fix onboarding bug", "firstSeen": "2026-03-20", "repeats": 6 } ], "completions": [] }, "assertions": [ "momentumScore < 50", "unresolvedHotspots includes \"Fix onboarding bug\"" ] } }, { "id": "local-agent-loop", "title": "Local Agent Loop For Memo Processing", "tier": "big-swings", "objective": "Run a deterministic local chain: classify, extract, summarize, route, verify.", "inputExample": { "memoId": "memo_2026_04_04_1430", "transcript": "Need to reschedule partner demo to Wednesday and send revised deck tonight.", "enabledSteps": [ "classify", "extract", "summarize", "route", "verify" ] }, "prompt": { "task": "Produce outputs for each pipeline step and final state.", "system": "You orchestrate a local memo pipeline.\nReturn JSON only.\nEmit per-step outputs and final status.\nIf verify fails, finalStatus must be \"needs-review\".", "user": "Memo ID: {{memoId}}\nEnabled steps: {{enabledSteps}}\nTranscript:\n{{transcript}}" }, "expectedOutput": { "format": "json", "example": { "steps": { "classify": { "primaryType": "task", "confidence": 0.9 }, "extract": { "items": [ "Reschedule partner demo to Wednesday", "Send revised deck tonight" ] }, "summarize": { "text": "Two immediate partner follow-ups identified." }, "route": { "workflow": "task-and-calendar" }, "verify": { "passed": true, "issues": [] } }, "finalStatus": "ready" } }, "testCase": { "name": "Failed verify step blocks auto-execution", "input": { "memoId": "memo_test_loop_01", "transcript": "Maybe move something around at some point.", "enabledSteps": [ "classify", "extract", "summarize", "route", "verify" ] }, "assertions": [ "verify.passed can be false for vague memo", "finalStatus equals \"needs-review\" when verify fails" ] } }, { "id": "meeting-live-structure", "title": "Meeting Mode Live Rolling Structure", "tier": "big-swings", "objective": "Maintain a live structured view of agenda, decisions, questions, and actions while speaking.", "inputExample": { "meetingId": "meeting_2026_04_04_prod", "chunkIndex": 5, "chunkText": "Decision: cut scope to onboarding and billing. Open question: who owns docs migration?", "currentState": { "agenda": [ "Release planning" ], "decisions": [], "openQuestions": [], "actionItems": [] } }, "prompt": { "task": "Update meeting state from new transcript chunk.", "system": "You maintain rolling meeting structure.\nReturn JSON only.\nUpdate state incrementally.\nDo not duplicate existing items.\nTag new items with chunkIndex.", "user": "Meeting ID: {{meetingId}}\nChunk index: {{chunkIndex}}\nChunk text:\n{{chunkText}}\nCurrent state:\n{{currentState}}" }, "expectedOutput": { "format": "json", "example": { "updatedState": { "agenda": [ "Release planning" ], "decisions": [ { "text": "Cut scope to onboarding and billing", "chunkIndex": 5 } ], "openQuestions": [ { "text": "Who owns docs migration?", "chunkIndex": 5 } ], "actionItems": [] } } }, "testCase": { "name": "Repeated decision text should not duplicate", "input": { "meetingId": "meeting_test_live_01", "chunkIndex": 8, "chunkText": "Decision: keep beta closed for now.", "currentState": { "agenda": [], "decisions": [ { "text": "Keep beta closed for now.", "chunkIndex": 2 } ], "openQuestions": [], "actionItems": [] } }, "assertions": [ "updatedState.decisions length stays 1", "existing decision remains unchanged" ] } }, { "id": "intent-trend-alerts", "title": "Intent Trend Alerts", "tier": "big-swings", "objective": "Detect recurring spoken intents that are not converting into completed work.", "inputExample": { "lookbackDays": 30, "intentSeries": [ { "intent": "Fix onboarding analytics", "mentionCount": 7, "completionCount": 0 }, { "intent": "Ship billing retry update", "mentionCount": 3, "completionCount": 2 } ], "alertThreshold": { "minMentions": 4, "maxCompletions": 0 } }, "prompt": { "task": "Generate alerts for unresolved repeated intents.", "system": "You detect intent trends.\nReturn JSON only.\nAlert when mentionCount meets threshold and completionCount is low.\nInclude one suggested intervention per alert.", "user": "Lookback: {{lookbackDays}} days\nIntent series:\n{{intentSeries}}\nThreshold:\n{{alertThreshold}}" }, "expectedOutput": { "format": "json", "example": { "alerts": [ { "intent": "Fix onboarding analytics", "severity": "medium", "reason": "Mentioned 7 times with 0 completions in 30 days.", "suggestedIntervention": "Schedule 45-minute focused block and define done criteria." } ] } }, "testCase": { "name": "Threshold logic gates alert emission", "input": { "lookbackDays": 30, "intentSeries": [ { "intent": "Refactor UI", "mentionCount": 2, "completionCount": 0 } ], "alertThreshold": { "minMentions": 4, "maxCompletions": 0 } }, "assertions": [ "alerts length equals 0" ] } }, { "id": "voice-os-command-layer", "title": "Voice-Based Operating Layer", "tier": "big-swings", "objective": "Translate natural speech into structured executable commands with safety gates.", "inputExample": { "utterance": "Open the latest launch notes, append today's blockers, and share with Dana in Slack.", "environment": { "apps": [ "notes", "slack", "finder" ], "safetyMode": "confirm-destructive" } }, "prompt": { "task": "Convert spoken instruction into structured command plan.", "system": "You convert voice commands to structured actions.\nReturn JSON only.\nUse steps with app, action, args.\nMark requiresConfirmation true for risky operations.", "user": "Utterance:\n{{utterance}}\nEnvironment:\n{{environment}}" }, "expectedOutput": { "format": "json", "example": { "intent": "multi-step-automation", "steps": [ { "app": "notes", "action": "open_latest", "args": { "notebook": "launch-notes" } }, { "app": "notes", "action": "append_text", "args": { "section": "blockers", "source": "today_summary" } }, { "app": "slack", "action": "share_note", "args": { "recipient": "Dana" } } ], "requiresConfirmation": false } }, "testCase": { "name": "Dangerous file actions require explicit confirmation", "input": { "utterance": "Delete the old exports folder and empty trash.", "environment": { "apps": [ "finder" ], "safetyMode": "confirm-destructive" } }, "assertions": [ "requiresConfirmation equals true", "at least one step action is marked destructive" ] } } ]