No. Google Calendar API returns a success response when it accepts the request. The event then holds one of 6 states. Only confirmed and rescheduled are terminal success. Provely proves created, guests_invited and rescheduled as separate promises.
| Fact | Value |
|---|---|
| Skill version | 0.1.0 |
| Publisher | Built and signed by Provely. |
| Certification | Provisional (score 49 of 100) |
| Last conformance run | 2026-09-05T12:00:00Z: 42 of 42 cases passed, 0 critical false VERIFIED |
| Provider API versions | v3.20260826 |
| Default provider API version | v3.20260826 |
| Compiled | 2026-09-05T12:00:00Z by compiler 0.1.0 |
| Manifest hash | d25bd97b813d4e99 |
| Manifest hash check | the document hashes to the value the manifest states |
| Signature | valid, key provely-skill-2026-09, trusted by this build |
What does this page prove?
| Claim | Proven by | Evidence | Status |
|---|---|---|---|
| The event exists with the intended title, start and end. It does not prove that a guest is on it, was told, or comes. | google_calendar.event.created | E2 + E3 | proven |
| The stored attendee list holds the addresses that the person named. It does not prove that Google mailed a guest, or that a guest accepted. | google_calendar.event.guests_invited | E2 + E3 | proven |
| 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. | google_calendar.event.rescheduled | E3 | proven |
| An outcome outside Google Calendar API, such as a bank credit or a person who read a message | not proven | no E5 channel | not proven |
The meaning of the guests_notified state of google_calendar.event | not proven | no source states it | not proven |
| The agent report that the action worked | never counts | E0 | not proven |
Which completion levels does the Google Calendar API skill expose?
Each level is one promise with one contract. An agent picks the level that matches the promise it makes. It cannot upgrade a level. Read the completion level definition.
| Level | Contract | Promise | Evidence | Certification |
|---|---|---|---|---|
created | google_calendar.event.created v1.0.0 | The event exists with the intended title, start and end. It does not prove that a guest is on it, was told, or comes. | E2 + E3 | Provisional |
guests_invited | google_calendar.event.guests_invited v1.0.0 | The stored attendee list holds the addresses that the person named. It does not prove that Google mailed a guest, or that a guest accepted. | E2 + E3 | Provisional |
rescheduled | google_calendar.event.rescheduled v1.0.0 | 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. | E3 | Provisional |
What is the Google Calendar API lifecycle?
Which states can a google_calendar.event be in?
| State | Class | Verdict | Meaning | Source |
|---|---|---|---|---|
confirmed | terminal success | VERIFIED | The event exists on the calendar with the member status confirmed, which the published description names the default status. The stored start and the stored end name the time of the first version of the event. | google_calendar.docs.times |
rescheduled | terminal success | VERIFIED | The stored start and the stored end name the new time, and the member updated names a time inside the operation. The member status stays confirmed, so no published state member reports the change. | google_calendar.docs.times |
tentative | terminal neutral | FAILED | The published description states that the event is tentatively confirmed. The event exists, and the organizer has not confirmed it. | google_calendar.docs.times |
cancelled | terminal neutral | FAILED | The published description states that the event is cancelled and deleted. It states that a deleted event is only guaranteed to carry the member id. The API reports no failure for this end. | google_calendar.docs.times |
guest_declined | terminal neutral | FAILED | The attendee entry of a guest carries the responseStatus declined. The guest is on the attendee list, and the guest states that they do not come. No level of this skill promises an acceptance. | google_calendar.docs.times |
guests_notified | unknown | UNVERIFIABLE | Google mailed the guests. The query parameter sendUpdates decides the mail, the Event schema publishes no member that reports it, and the published reference sentence states that some mails still go out when the value is none. No read of this API reaches this state. | google_calendar.docs.times |
In google_calendar.event under provider API version v3.20260826, confirmed and rescheduled are the only states that mean terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.
Source: google_calendar.openapi · retrieved 2026-09-09
How does Provely tie the evidence to this exact operation?
A matching state that already existed must not verify. Every contract names the correlation keys that bind the evidence to the operation, and the idempotency key that stops a duplicate side effect.
| Strategy | Assurance | Keys | Required | Window |
|---|---|---|---|---|
resource_id | weak | calendar_id from $input.calendar_id | no | 600000 ms |
resource_id | weak | calendar_id from $input.calendar_id | no | 600000 ms |
resource_id | strong | event_id from $action.result.id | no | none |
resource_id | strong | event_id from $input.event_id | no | none |
fingerprint | weak | calendar_id from $input.calendar_id; summary from $input.summary | no | 600000 ms |
In words
- E0 agent assertion: never sufficient.
- E1 action response: the provider acknowledged the request.
- E2 provider readback: the runtime read the resource back.
- E3 provider event: the provider reported the change.
- E4 independent system: a system outside the action path agrees.
- E5 external outcome: the result is observable in the world.
Which evidence channels does the skill read?
The runtime prefers the channel that is more independent from the action path. Read the evidence level definition. An acknowledgement from Google Calendar API is E1 and never terminal success.
| Channel | Level | Independence | Verifier | Deterministic | Typical latency |
|---|---|---|---|---|---|
calendar_change_events | E3 | provider event | webhook | no | 3000 ms |
event_action_response | E1 | same response | action_result | yes | not stated |
event_intent_readback | E2 | provider readback | http | yes | 300 ms |
event_readback | E2 | provider readback | http | yes | 300 ms |
Which ways can a Google Calendar API action look done and not be?
| Contract | Case | Rule | Verdict |
|---|---|---|---|
| google_calendar.event.created | wrong subject | The event carries a different title than the person named. | CONTRADICTED |
| google_calendar.event.created | wrong subject | The event starts before the instant that the person named. | CONTRADICTED |
| google_calendar.event.created | wrong subject | The event starts after the instant that the person named. | CONTRADICTED |
| google_calendar.event.created | wrong subject | The event ends before the instant that the person named. | CONTRADICTED |
| google_calendar.event.created | wrong subject | The event ends after the instant that the person named. | CONTRADICTED |
| google_calendar.event.created | pre existing state | The event is older than the operation. It proves nothing about this operation. | CONTRADICTED |
| google_calendar.event.created | 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. | CONTRADICTED |
| google_calendar.event.created | observed state | The event is cancelled. The published description states that a cancelled event is a deleted event. The API reports no failure for this end. | CONTRADICTED |
| google_calendar.event.created | observed state | The event is a locked copy. The published description states that nobody can change its title, its start or its end. Ask a person. | CONTRADICTED |
| google_calendar.event.created | observed state | 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. | CONTRADICTED |
| google_calendar.event.guests_invited | wrong subject | The event carries a different title than the person named. | CONTRADICTED |
| google_calendar.event.guests_invited | wrong subject | The event starts before the instant that the person named. | CONTRADICTED |
| google_calendar.event.guests_invited | wrong subject | The event starts after the instant that the person named. | CONTRADICTED |
| google_calendar.event.guests_invited | wrong subject | The event ends before the instant that the person named. | CONTRADICTED |
| google_calendar.event.guests_invited | wrong subject | The event ends after the instant that the person named. | CONTRADICTED |
| google_calendar.event.guests_invited | pre existing state | The event is older than the operation. It proves nothing about this operation. | CONTRADICTED |
| google_calendar.event.guests_invited | 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. | CONTRADICTED |
| google_calendar.event.guests_invited | partial completion | The read returned a short attendee list. The verifier cannot see every guest. Ask a person. | CONTRADICTED |
| google_calendar.event.guests_invited | observed state | The event is cancelled. The published description states that a cancelled event is a deleted event. The API reports no failure for this end. | CONTRADICTED |
| google_calendar.event.guests_invited | observed state | The event is a locked copy. The published description states that nobody can change its title, its start or its end. Ask a person. | CONTRADICTED |
| google_calendar.event.guests_invited | observed state | 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. | CONTRADICTED |
| google_calendar.event.guests_invited | observed state | The invitation names other people than the person asked for. A guest who should not see the meeting can see it, or a guest who should see it cannot. Ask a person. | CONTRADICTED |
| google_calendar.event.rescheduled | 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. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | The event is cancelled. A cancelled event holds no promise about a time, and the API reports no failure for this end. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | The event already sat at the requested time before the operation started. This operation changed nothing, and the state proves nothing about it. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | The event is a locked copy. The published description states that nobody can change its start or its end. Ask a person. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | 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. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | 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. | CONTRADICTED |
| google_calendar.event.rescheduled | observed state | The provider does not yet report the event with the requested start and end. The runtime observes again later. | PENDING |
What did the last conformance run show?
| Dimension | Score | Maximum |
|---|---|---|
| Documentation | 14 | 20 |
| Schema alignment | 13 | 15 |
| Lifecycle certainty | 16.67 | 20 |
| Evidence strength | 16 | 20 |
| Causal correlation | 10 | 15 |
| Sandbox conformance | 10 | 10 |
| Raw score | 79.67 | 100 |
| Score after the caps | 49 | 100 |
The raw score is 79.67. 4 hard caps apply, so the score is 49 and the level is Provisional.
| Reason | Highest score it allows |
|---|---|
| A lifecycle state has unknown semantics. The compiler cannot prove the end state. | 49 |
| No strong correlation strategy ties the evidence to the operation. | 69 |
| 28 uncertainty records are open. The lowest cap is 49. | 49 |
| 3 mandatory cases are missing. Example: google_calendar.event.created:terminal_failure. | 74 |
| Contract | Raw score | Score after the caps | Certification |
|---|---|---|---|
google_calendar.event.created | 80.09 | 49 | Provisional |
google_calendar.event.guests_invited | 79.17 | 49 | Provisional |
google_calendar.event.rescheduled | 79.91 | 49 | Provisional |
The weakest contract is google_calendar.event.created. It scores 49 and reaches Provisional. The package level is Provisional, because a package level never rises above its weakest contract. Read the level of the contract you use.
The last conformance run on 2026-09-05T12:00:00Z passed 42 of 42 cases with 0 critical false VERIFIED. One critical false VERIFIED rejects a skill.
| Case class | Passed | Total |
|---|---|---|
| duplicate side effect | 3 | 3 |
| error after execution | 3 | 3 |
| error before execution | 3 | 3 |
| evidence unavailable | 3 | 3 |
| pre existing state | 3 | 3 |
| stale readback | 3 | 3 |
| still transitional | 3 | 3 |
| terminal success | 3 | 3 |
| timeout after commit | 3 | 3 |
| version mismatch | 3 | 3 |
| webhook duplicate | 3 | 3 |
| webhook out of order | 3 | 3 |
| wrong subject | 3 | 3 |
| wrong terminal state | 3 | 3 |
The conformance artifact digest is 975790a84ba0b9ec. The harness signs the run, so a reader can check that these numbers come from that run.
What remains uncertain?
The level is Provisional because of it. A lifecycle state has unknown semantics. The compiler cannot prove the end state. 28 uncertainty records are open. The lowest cap is 49. Provely does not guess a rule that a source does not state.
Where do these facts come from?
Every claim above cites a source assertion in the skill provenance. The compiler records the source, its hash, and the retrieval date. A page never states a provider rule without one.
| Source | Kind | Retrieved | Excerpt |
|---|---|---|---|
| google_calendar.docs.events | docs | 2026-09-09 | authored |
| google_calendar.docs.push | docs | 2026-09-09 | authored |
| google_calendar.docs.times | docs | 2026-09-09 | authored |
| google_calendar.docs.versions | docs | 2026-09-09 | authored |
| google_calendar.events | event sample | 2026-09-09 | authored |
| google_calendar.openapi | openapi | 2026-09-09 | trimmed |
How do I verify a Google Calendar API action?
Verify a Google Calendar API action with Provely
- Begin the operation.Call
beginwith the contractgoogle_calendar.event.createdand the input. Keep the operation id. - Make the Google Calendar API call you make today.Send the request with the correlation metadata that
beginreturned. - Submit the acknowledgement.Call
action_resultwith the Google Calendar API response. This is evidence level E1. It is not completion. - Verify.Call
verify. The runtime readscalendar_change_events,event_action_response,event_intent_readbackandevent_readbackand evaluates the contract. - Report the verdict exactly as returned.VERIFIED comes with a signed receipt. PENDING comes with the operation id. CONTRADICTED and UNVERIFIABLE are not success.
Questions developers ask
Does the created level prove the rescheduled level?
No. The event exists with the intended title, start and end. It does not prove that a guest is on it, was told, or comes. 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. Use google_calendar.event.rescheduled to prove rescheduled.
Which Google Calendar API API versions does the skill support?
v3.20260826. An operation on another version returns UNVERIFIABLE with the reason version_unsupported. The runtime never guesses.
Does Provely need write access to Google Calendar API?
No. The agent keeps its write key. The verifier reads with a separate read-only credential where Google Calendar API permits it, and it never shares that credential with the agent.