Stop ingestion from manufacturing spurious or auto-trusted tasks#57
Conversation
The graph-extraction prompt would turn assistant suggestions, recaps, and general planning chatter into Task nodes, and brand-new tasks could land in the trusted commitment band without the tentative flag. - Add explicit do-not clauses to the open-tasks prompt section: no tasks from assistant suggestions, recaps/summaries, uncommitted planning, or the conversation itself (no meta check-in/weekly-planning tasks). Task labels must be short imperative actions, not conversation summaries. - Pin assertionKind for new tasks to who actually committed. - Safety net: a newly minted task with unspecified provenance now defaults to the tentative (assistant_inferred) band instead of trusted. - Add regression tests covering both the tentative default and the preserved-trusted path.
Background ingestion should never autonomously create a firm commitment, so make the tentative (candidate) band deterministic for every brand-new task rather than letting the model's assertionKind decide. - Force assertedByKind to assistant_inferred for any newly created Task node's HAS_TASK_STATUS claim, regardless of source type or model-asserted provenance. - Status updates to existing tasks (including candidate->trusted promotions via explicit user confirmation) are untouched. - Update the extraction prompt: new tasks are always recorded tentative; confirmation must target an existing task node. - Update the regression test to assert a model-marked user-stated new task is still forced tentative.
There was a problem hiding this comment.
Code Review
This pull request ensures that any brand-new tasks created during conversation or document ingestion are deterministically recorded as tentative (using the assistant_inferred assertion kind), preventing passive background ingestion from creating firm commitments. It also updates the graph-extraction prompt instructions to explicitly forbid manufacturing spurious tasks (e.g., from assistant suggestions, recaps, or meta-conversations) and requires task labels to be short imperative actions. Corresponding unit tests have been added to verify this behavior. There are no review comments, so I have no feedback to provide.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Problem
A daily-brief conversation ingest (life updates + loose planning) was turned into a Task node titled "Sunday Morning Check-In: Zouk Social, Masterclass, and Weekly Planning" with the conversation summary stuffed into its description — and it landed in the trusted commitment band, not marked tentative.
Two root causes in
src/lib/extract-graph.ts:assertedByKind = 'assistant_inferred'(this splits trusted open commitments from candidate commitments). New tasks never had their provenance pinned, so_resolveAssertedByKindfell back to"user"(trusted).Changes
Prompt hardening (
_formatOpenCommitmentsSection):Deterministic tentative policy (code):
assistant_inferred(tentative) — unconditionally, regardless of source type or what the model asserts. Background ingestion never autonomously creates a firm commitment.Tests (
extract-graph.test.ts): two regression tests — a new task with omitted provenance lands tentative, and a new task the model marks"user"is still forced tentative. All 8 tests in the file pass.Notes
commitments.test.ts/open-commitments.test.tsare pre-existing — confirmed identical on the pristine tree; they don't touch extraction.https://claude.ai/code/session_01ByQzXHcjjLCgUepJn5VER7
Generated by Claude Code