# What does google_calendar.event.rescheduled prove?

> Prove that the event now starts and ends at the requested instants. Version 1.0.0, certification Provisional.

Canonical: https://provely.sh/verify/google_calendar/google_calendar.event.rescheduled  
Last reviewed: 2026-09-05  
Skill version: 0.1.0  
Certification: provisional  

**Prove that the event now starts and ends at the requested instants. The provider changed the event inside this operation, and the stored start and end name the new instants. It does not prove that a guest was told.**

*Contract identity.*

| Fact | Value |
| --- | --- |
| Contract id | `google_calendar.event.rescheduled` |
| Version | `1.0.0` |
| Hash | `a9eb7474a30680a4` |
| Completion level | `rescheduled` |
| Publisher | Built and signed by Provely. |
| Certification | Provisional |
| Skill | [Google Calendar API 0.1.0](/verify/google_calendar) |
| Valid for provider API versions | `v3.20260826` |

## What is the intent?

Move the meeting to the stated new time.

## What is the subject and the action?

| Member | Value |
| --- | --- |
| Subject type | `google_calendar.event` |
| Subject identity | event_id = `$input.event_id` |
| Canonical effect | `calendar.event_update` |
| Provider operation | `PATCH /calendar/v3/calendars/{calendarId}/events/{eventId}` |
| Idempotency | none, retry is not safe |

## How does the evidence correlate with this operation?

| Strategy | Assurance | Keys | Required |
| --- | --- | --- | --- |
| `resource_id` | strong | event_id from `$input.event_id` | no |
| `resource_id` | weak | calendar_id from `$input.calendar_id` | no |

## Which evidence does the contract require?

Minimum evidence level `E2`. An independent channel is required. Minimum channels: 1.

| Channel | Level | Independence | Verifier | Description |
| --- | --- | --- | --- | --- |
| `event_intent_readback` | E2 | provider readback | `http` | Read the event that the intent names. A condition path is $observed.event_intent_readback.updated. The read states no maxAttendees parameter. |
| `calendar_change_events` | E3 | provider event | `webhook` | The notifications of a channel that watches the events collection of the calendar, since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. The body is empty, so a count names no event. |

## Which conditions must all hold for VERIFIED?

| Condition | Meaning | Path | Operator | Expected | Evidence |
| --- | --- | --- | --- | --- | --- |
| `calendar_changed_for_the_reschedule` | At least one notification says that the events collection of the calendar changed since the operation started. The verdict map holds the rest of the promise, because the read-back of this level can date no state. | `$observed.calendar_change_events.count` | `gte` | `1` | `calendar_change_events` |

## Which conditions give CONTRADICTED?

| Condition | Class | Reason | Path | Operator | Expected |
| --- | --- | --- | --- | --- | --- |
| `duplicate_calendar_change_on_reschedule` | duplicate side effect | The calendar changed more than once since the operation started. A second update mails every guest a second time. Stop and ask a person. | `$observed.calendar_change_events.count` | `gt` | `1` |

## Which observed states map to a verdict before completion?

| Rule | Match | Verdict | Reason |
| --- | --- | --- | --- |
| `rescheduled_event_is_cancelled` | `$observed.event_intent_readback.status` eq `"cancelled"` | CONTRADICTED | The event is cancelled. A cancelled event holds no promise about a time, and the API reports no failure for this end. |
| `rescheduled_event_already_sat_at_the_requested_time` | (`$observed.event_intent_readback.updated` time_before `"$operation.created_at"`) and (`$observed.event_intent_readback.start.dateTime` time_after `"$input.new_start_time"`) and (`$observed.event_intent_readback.start.dateTime` time_before `"$input.new_start_time"`) | CONTRADICTED | The event already sat at the requested time before the operation started. This operation changed nothing, and the state proves nothing about it. |
| `rescheduled_event_is_a_locked_copy` | `$observed.event_intent_readback.locked` eq `true` | CONTRADICTED | The event is a locked copy. The published description states that nobody can change its start or its end. Ask a person. |
| `rescheduled_event_is_a_series_instance` | `$observed.event_intent_readback.recurringEventId` exists `undefined` | CONTRADICTED | The event is one occurrence of a recurring event. A change of one occurrence and a change of the whole series are different operations, and this skill covers neither. Ask a person. |
| `rescheduled_to_the_wrong_time` | (`$observed.event_intent_readback.updated` time_after `"$operation.created_at"`) and ((`$observed.event_intent_readback.start.dateTime` time_before `"$input.new_start_time"`) or (`$observed.event_intent_readback.start.dateTime` time_after `"$input.new_start_time"`)) | CONTRADICTED | The agent changed the event inside this operation, and the event now starts at another instant than the person named. Every guest holds a wrong time. Stop and ask a person. |
| `the_new_time_is_not_stored_yet` | (not (`$observed.event_intent_readback.id` eq `"$input.event_id"`)) or (not (`$observed.event_intent_readback.start.dateTime` time_after `"$input.new_start_time"`)) or (not (`$observed.event_intent_readback.start.dateTime` time_before `"$input.new_start_time"`)) or (not (`$observed.event_intent_readback.end.dateTime` time_after `"$input.new_end_time"`)) or (not (`$observed.event_intent_readback.end.dateTime` time_before `"$input.new_end_time"`)) or (not (`$observed.event_intent_readback.updated` time_after `"$operation.created_at"`)) | PENDING | The provider does not yet report the event with the requested start and end. The runtime observes again later. |

## How long does the runtime observe?

| Timing member | Value |
| --- | --- |
| Initial delay | 1000 ms |
| Poll interval | 5000 ms |
| Backoff | exponential factor 2, max 60000 ms |
| Maximum attempts | 40 |
| Timeout | 900000 ms |
| Stale read window | 20000 ms |
| On timeout | UNVERIFIABLE (`evidence_unavailable_before_timeout`), escalated to a person |

## Where do these rules come from?

- `google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events~1{eventId}/patch`: [google_calendar.openapi](https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest), retrieved 2026-09-09
- `google_calendar.openapi#/components/schemas/Event/properties/updated`: [google_calendar.openapi](https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest), retrieved 2026-09-09
- `google_calendar.docs.times#events-times-and-the-change-of-a-time/events-move-does-not-change-a-time`: [google_calendar.docs.times](https://developers.google.com/workspace/calendar/api/concepts/events-calendars), retrieved 2026-09-09
- `google_calendar.docs.times#events-times-and-the-change-of-a-time/one-instant-five-spellings`: [google_calendar.docs.times](https://developers.google.com/workspace/calendar/api/concepts/events-calendars), retrieved 2026-09-09
- `google_calendar.events#/events/calendar.events.exists`: [google_calendar.events](https://developers.google.com/workspace/calendar/api/guides/push), retrieved 2026-09-09
- `google_calendar.docs.push#push-notifications/one-resource-state-covers-three-different-changes`: [google_calendar.docs.push](https://developers.google.com/workspace/calendar/api/guides/push), retrieved 2026-09-09
- `google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events~1watch/post`: [google_calendar.openapi](https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest), retrieved 2026-09-09
- `google_calendar.docs.push#push-notifications/what-the-page-refuses-to-promise`: [google_calendar.docs.push](https://developers.google.com/workspace/calendar/api/guides/push), retrieved 2026-09-09

### Can google_calendar.event.rescheduled return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read `calendar_change_events`.

### What happens after the timeout?

The verdict is UNVERIFIABLE with the reason `evidence_unavailable_before_timeout`. The operation goes to a person for review.

## Read next

- [Read the Google Calendar API verification page](https://provely.sh/verify/google_calendar)
- [Read the google_calendar.event.created contract](https://provely.sh/verify/google_calendar/google_calendar.event.created)
- [Read the google_calendar.event.guests_invited contract](https://provely.sh/verify/google_calendar/google_calendar.event.guests_invited)
- [Read what a completion contract contains](https://provely.sh/contracts)
- [Read what a receipt proves](https://provely.sh/docs/receipts)
