Prove that Drive holds the content of the file, and that the bytes match. A file resource that exists is not a file whose content arrived. This level compares the size and the checksum that Drive publishes.

Contract identity.
FactValue
Contract idgoogle_drive.file.content_stored
Version1.0.0
Hasha06dbef40106e525
Completion levelcontent_stored
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillGoogle Drive API 0.1.0
Valid for provider API versionsv3.20260901

What is the intent?

Upload the content of the file into the folder without a change.

What is the subject and the action?

MemberValue
Subject typegoogle_drive.file
Subject identityfile_id = $action.result.id
Canonical effectstorage.file_upload
Provider operationPOST /drive/v3/files
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongfile_id from $action.result.idno
resource_idweakparent_id from $input.parent_idno
fingerprintweakname from $input.name; parent_id from $input.parent_idno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
file_readbackE2provider readbackhttpRead the file from the provider. A condition path is $observed.file_readback.md5Checksum. Drive writes size as a string with the format int64, so a condition compares a string.
folder_child_eventsE3provider eventwebhookThe notifications of a channel that watches the parent folder, since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A Drive notification carries an empty body, so a count states how many times the child list changed.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
file_presentThe provider holds the file with the identifier of the upload answer.$observed.file_readback.ideq$action.result.idfile_readback
file_name_matchesThe name of the file equals the requested name.$observed.file_readback.nameeq$input.namefile_readback
file_in_requested_parentThe first parent of the file equals the requested folder. Drive states that a file has one parent folder only.$observed.file_readback.parents[0]eq$input.parent_idfile_readback
file_created_in_windowThe provider created the file after the operation started.$observed.file_readback.createdTimetime_after$operation.created_atfile_readback
folder_gained_a_childAt least one notification says that the child list of the parent folder changed since the operation started. The duplicate guard reads the same channel, so a workspace with no notification channel cannot verify and cannot miss a second upload either.$observed.folder_child_events.countgte1folder_child_events
file_size_matchesThe size that Drive publishes equals the number of bytes that the agent sent. Drive writes size as a string with the format int64, so the condition compares a string and normalizes nothing.$observed.file_readback.sizeeq$input.size_bytesfile_readback
file_checksum_matchesThe MD5 checksum that Drive publishes equals the checksum of the content that the agent sent. Drive publishes the member for a file with binary content only.$observed.file_readback.md5Checksumeq$input.md5_checksumfile_readback

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
file_in_wrong_parentwrong subjectThe file sits in a different folder than the intent named.$observed.file_readback.parents[0]ne$input.parent_id
file_name_differswrong subjectThe file carries a different name than the intent named.$observed.file_readback.namene$input.name
file_predates_operationpre existing stateThe file is older than the operation. It proves nothing.$observed.file_readback.createdTimetime_before$operation.created_at
file_moved_to_trashotherThe file is in the trash. Ask a person before you act again.$observed.file_readback.trashedeqtrue
duplicate_file_in_folderduplicate side effectThe child list of the folder changed more than once since the operation started. Do not retry the upload.$observed.folder_child_events.countgt1
file_size_differspartial completionDrive holds fewer bytes than the agent sent, or more. Do not upload again before a person reads the file.$observed.file_readback.sizene$input.size_bytes

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
converted_to_editor_file$observed.file_readback.mimeType regex "^application/vnd\\.google-apps\\."CONTRADICTEDDrive imported the content into an editor file. Drive publishes no checksum for such a file, so no read can prove the bytes.
content_differs($observed.file_readback.md5Checksum exists undefined) and ($observed.file_readback.md5Checksum ne "$input.md5_checksum")CONTRADICTEDDrive holds other bytes than the agent sent. Ask a person before you upload again.
checksum_not_published_yet$observed.file_readback.md5Checksum absent undefinedPENDINGDrive publishes no checksum for the file yet. The runtime observes again later.

How long does the runtime observe?

Timing memberValue
Initial delay1000 ms
Poll interval5000 ms
Backoffexponential factor 2, max 60000 ms
Maximum attempts40
Timeout3600000 ms
Stale read window20000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person

Where do these rules come from?

  • google_drive.openapi#/components/schemas/File/properties/size: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/components/schemas/File/properties/md5Checksum: google_drive.openapi, retrieved 2026-09-09
  • google_drive.docs.uploads#upload-file-data/upload-the-content: google_drive.docs.uploads, retrieved 2026-09-09
  • google_drive.docs.uploads#upload-file-data/resume-an-upload-that-broke: google_drive.docs.uploads, retrieved 2026-09-09
  • google_drive.openapi#/components/schemas/File/properties/id: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/paths/~1drive~1v3~1files~1{fileId}/get/responses/200: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/components/schemas/File/properties/name: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/paths/~1drive~1v3~1files/post/requestBody: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/components/schemas/File/properties/parents: google_drive.openapi, retrieved 2026-09-09
  • google_drive.openapi#/components/schemas/File/properties/createdTime: google_drive.openapi, retrieved 2026-09-09
  • google_drive.events#/events/drive.file.update.children: google_drive.events, retrieved 2026-09-09
  • google_drive.docs.push#push-notifications/the-changed-members: google_drive.docs.push, retrieved 2026-09-09
  • google_drive.openapi#/paths/~1drive~1v3~1files~1{fileId}~1watch/post: google_drive.openapi, retrieved 2026-09-09
  • google_drive.docs.uploads#upload-file-data/what-a-caller-cannot-read-from-these-pages: google_drive.docs.uploads, retrieved 2026-09-09

Can google_drive.file.content_stored return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read file_readback and folder_child_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.