Last reviewed 2026-09-05Skill version 0.1.0Provisional
Prove that Calendar holds the event at the requested instant. The event exists with the intended title, start and end. It does not prove that a guest is on it, was told, or comes.
Put the meeting on the calendar at the stated time.
What is the subject and the action?
Member
Value
Subject type
google_calendar.event
Subject identity
event_id = $action.result.id
Canonical effect
calendar.event_create
Provider operation
POST /calendar/v3/calendars/{calendarId}/events
Idempotency
none, retry is not safe
How does the evidence correlate with this operation?
Strategy
Assurance
Keys
Required
resource_id
strong
event_id from $action.result.id
no
resource_id
weak
calendar_id from $input.calendar_id
no
fingerprint
weak
calendar_id from $input.calendar_id; summary from $input.summary
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_readback
E2
provider readback
http
Read the new event from the provider. A condition path is $observed.event_readback.start.dateTime. Google returns the instant in the time zone of the calendar, so a condition compares instants and never two strings.
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
event_present
The provider holds the event with the identifier of the insert answer.
$observed.event_readback.id
eq
$action.result.id
event_readback
event_title_matches
The title of the event equals the title that the person named.
$observed.event_readback.summary
eq
$input.summary
event_readback
event_status_confirmed
The status of the event is confirmed. The published description names that value the default status.
$observed.event_readback.status
eq
confirmed
event_readback
event_starts_at_the_requested_instant
The stored start names the instant that the person named.
—
all_of
The rows below state the members.
event_readback
event_starts_at_the_requested_instant_not_before
The stored instant is not before the instant that the person named.
$observed.event_readback.start.dateTime
time_after
$input.start_time
event_readback
event_starts_at_the_requested_instant_not_after
The stored instant is not after the instant that the person named.
$observed.event_readback.start.dateTime
time_before
$input.start_time
event_readback
event_ends_at_the_requested_instant
The stored end names the instant that the person named.
—
all_of
The rows below state the members.
event_readback
event_ends_at_the_requested_instant_not_before
The stored instant is not before the instant that the person named.
$observed.event_readback.end.dateTime
time_after
$input.end_time
event_readback
event_ends_at_the_requested_instant_not_after
The stored instant is not after the instant that the person named.
$observed.event_readback.end.dateTime
time_before
$input.end_time
event_readback
event_created_in_window
The provider created the event after the operation started.
$observed.event_readback.created
time_after
$operation.created_at
event_readback
calendar_changed
At least one notification says that the events collection of the calendar changed since the operation started. The published page states that a small percentage of messages drop, so a lost message leaves this level unproven and never verified.
$observed.calendar_change_events.count
gte
1
calendar_change_events
Which conditions give CONTRADICTED?
Condition
Class
Reason
Path
Operator
Expected
event_title_differs
wrong subject
The event carries a different title than the person named.
$observed.event_readback.summary
ne
$input.summary
event_starts_too_early
wrong subject
The event starts before the instant that the person named.
$observed.event_readback.start.dateTime
time_before
$input.start_time
event_starts_too_late
wrong subject
The event starts after the instant that the person named.
$observed.event_readback.start.dateTime
time_after
$input.start_time
event_ends_too_early
wrong subject
The event ends before the instant that the person named.
$observed.event_readback.end.dateTime
time_before
$input.end_time
event_ends_too_late
wrong subject
The event ends after the instant that the person named.
$observed.event_readback.end.dateTime
time_after
$input.end_time
event_predates_operation
pre existing state
The event is older than the operation. It proves nothing about this operation.
$observed.event_readback.created
time_before
$operation.created_at
duplicate_calendar_change
duplicate side effect
The calendar changed more than once since the operation started. A second insert mails every guest a second time. Do not retry.
$observed.calendar_change_events.count
gt
1
Which observed states map to a verdict before completion?
Rule
Match
Verdict
Reason
event_is_cancelled
$observed.event_readback.status eq "cancelled"
CONTRADICTED
The event is cancelled. The published description states that a cancelled event is a deleted event. The API reports no failure for this end.
event_is_a_locked_copy
$observed.event_readback.locked eq true
CONTRADICTED
The event is a locked copy. The published description states that nobody can change its title, its start or its end. Ask a person.
The agent created an all-day event. This level promises a timed event, and an all-day event carries no dateTime, so no later read can prove the instant.
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