diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f2eab8..51c76e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ this project adheres to [Semantic Versioning](https://semver.org/). - **Email inbound-scan hardening** (`phases/connectors/email.md`) — three rules upstreamed from accumulated instance experience: **Automated-Alert Triage** (credential/token-expiry, quota/spend-threshold, usage, billing, and maintenance alerts are 🟢 Watching by default — promoted only on imminent functional impact, never on alarm-word tone); and **Drill Active Threads — Don't Trust the Snippet** (a search snippet previews one message, often not the latest — fetch the full thread before asserting "no reply"/"awaiting X"/"unanswered"; threads tied to an open item are mandatory drills). - **Action-items prioritization + task-query hardening** (`phases/core/action-items.md`) — two rules upstreamed from accumulated instance experience: a **Deadline-Distance Ceiling** (urgency is *capped* by deadline distance — 30+ days → 🟢 max, 7–30 → 🟡 max, <7 → eligible for 🔴, <3 → 🔴 when the next action is the user's; evaluate the real deadline, never the source's alarm-word tone; deprecation notices stay 🟢 until ~2–3 weeks out), and a **terminal-status filter on the ontology task query** (`query --type task --exclude-status "completed,cancelled"` instead of a bare query, so completed/cancelled task entities stop resurfacing as open work; documents the supported `--domain` / `--status` / `--deadline-before` filters). - **KB-management hardening** (`phases/core/kb-management.md`) — three rules upstreamed from accumulated instance experience: **Never Guess a Name or Acronym Expansion** (cite the full form from a primary source or leave it abbreviated `[unverified]` — never invent a plausible expansion, which reads as fact and propagates); an **entity-creation trigger** (mint a new entity file when a person/org/technology recurs across 3+ independent sources — enriching existing files is not a substitute for creating missing ones); and **staleness-observability + search-depth** freshness rules (every file carries a machine-readable `last_updated:` so a scan can rank and a driver can queue stale files — opportunistic-only refresh lets the long tail rot; and don't scope completeness searches to a fixed channel set / `from:me` filters — a known-to-exist fact your scan missed is a search-depth miss, not an absence). +- **Granola deliverable-invention gate** (`phases/connectors/granola.md`) — a rule upstreamed from accumulated instance experience: a dated commitment or deliverable extracted from a transcript needs a **verbatim source quote** or it's dropped — never attach an urgency marker ("due Friday", "committed to X") the transcript doesn't literally contain; ship without the marker or route to the review queue. Guards two invention traps: topic conflation (don't fuse two adjacent meeting topics into one dated item) and one-off-as-standing (a single mention is not a recurring cadence). ## [0.7.2] - 2026-06-22 diff --git a/phases/connectors/granola.md b/phases/connectors/granola.md index e3d3de2..9bf2971 100644 --- a/phases/connectors/granola.md +++ b/phases/connectors/granola.md @@ -34,6 +34,14 @@ Every action item extracted from a transcript is a **candidate** that must be ve **Never write a transcript-sourced action item directly to the action items file without cross-checking it first.** +### Deliverable-Invention Gate + +A dated commitment or deliverable pulled from a transcript needs a **verbatim source quote**, or it doesn't get written. Before attaching any urgency marker — "must be done by X", "before Y", "committed to Z", "due Friday" — to an extracted item, confirm the transcript (or a post-meeting message) contains the exact sentence stating that commitment. If the quote doesn't exist verbatim, ship the item **without** the urgency marker, or route it to `review-queue.md` for {{USER_NAME}} to confirm — never synthesize the deadline. + +Two traps that produce invented deliverables: +- **Topic conflation.** When two adjacent topics surface in the same meeting (e.g. a documentation deliverable and an unrelated upcoming trip), do not fuse them into one dated item. Write them separately and let {{USER_NAME}} cull. +- **One-off ≠ standing.** A single mention is not a recurring cadence. "Every Friday" / "every Monday" commitments must come from the speaker's own words, not be inferred from one occurrence. + ### Extraction Gate — Content, Not Breadcrumbs A "✅ transcript captured" / "notes available for [meeting]" line is **not** extraction — it is a breadcrumb that silently drops the meeting's substance. For every meeting {{USER_NAME}} attended where a transcript exists, you MUST produce the substantive extraction above (action items, decisions, commitments-by-others, deadlines, open questions) or an explicit "reviewed — no actionable content (reason)" note. A bare capture/availability breadcrumb is forbidden as the only output for an attended meeting.