--- kind: task slug: push-pull-job-interface title: Define push/pull sync job interface and feature flags plan_slug: multitenant-cursor-sync epic_slug: cursor-sync-layer status: draft priority: P1 tenant_id: global owner: unassigned cursor_todo_id: null updated_at: "2026-04-26" --- # Task summary Specify the job runner contract: inputs (tenant, mode), outputs (diff counts, errors), idempotency, and `CURSOR_SYNC_*` env toggles from `config/CursorSync.md`. ## Description Start with **no-op** implementation that logs would-be operations; swap in HTTP client when Cursor API is available. Support **dry-run** flag for operators. ## Subtasks - [ ] Interface types in `packages/shared` or app server package - [ ] CLI or internal route `POST .../sync/cursor` with dry-run - [ ] Structured logs with tenant id on every call ## Owner or assignee Unassigned ## Status draft ## Estimation M ## Acceptance criteria - [ ] Dry-run never writes to Cursor or DB mapping table. - [ ] Same request twice is idempotent (no duplicate side effects). ## Links to related Epic / Plan - Epic: `./Epic-cursor-sync-layer.md` - Plan: `../Plan-multitenant-cursor-sync.md`