CedarCopilot wants to merge 2 commits into staging from feat/jev-calendar-task-obsolescence-gate
Live on prod, 0 of 1 surfaces working, 1 day left
Libra found 1 production surface on prod but could not judge any of them yet. 1 surface had no requests at all. Libra checks hourly for 3 days after each deploy.
evaluateAndCancelObsoleteTasks (apps/server/src/services/user-tasks/jev-calendar-task-gate.ts), a Jev-based gate that batches a conversation's open calendar/pre-meeting/post-meeting tasks against a just-synced calendar event (one Noul question per task, shared event state) and marks any confidently-obsolete ones agent_deleted. Same fail-open contract as the existing services/playbook/jev-action-gate.ts.calendar-events.ts: event cancelled, event rescheduled (start time changed), and a new event matched onto an existing conversation (skipped for brand-new conversations, which have no pre-existing tasks to check).task_type IN ('calendar','pre-meeting','post-meeting') or task_output.kind = 'calendar', reusing the existing isOutputKind helper) , not free-text matching, which was evaluated and rejected (see design doc for why).docs/design/jev-calendar-task-obsolescence-gate.md , current state, proposed changes, critical files, phased plan, verification steps.
jev-calendar-task-gate.test.ts (10 tests): eligibility short-circuit (zero fetch calls when no eligible tasks), batch question shape, threshold boundary, fail-open on network error/timeout/non-200/malformed response, JEV_API_KEY unset.calendar-events-sync.test.ts (+5 new tests, 29 total): gate fires on cancel/reschedule with correct args, does not fire without a linked conversation or without env, does not fire on a same-time update; existing "successful enrichment" test asserts the gate does not fire when matched onto a brand-new conversation.pnpm --filter @zero/server run types , clean, zero errors.eslint on all changed files , clean.would_cancel, skip the write) for 1-2 weeks before trusting live writes at scale , see design doc phase 4. Not implemented in this PR; flagging as the natural next step before this reaches production traffic broadly.š¤ Generated with Claude Code
This PR is not safe to merge until the live deletion path protects user-authored tasks and can distinguish the relevant attendee and meeting occurrence; the threshold boundary and explicit repository rule violation also require correction.
| Surface | Requests | Errors | p95 | Users | Verdict |
|---|---|---|---|---|---|
| execute_tool list-calendar-events | 0 ā 0 | 0 ā 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |