Prove that the document holds the text that the batch update promised. A batch update that landed is not one that reached its promise. This level reads the text runs of every tab against the confirmed text.

Contract identity.
FactValue
Contract idgoogle_docs.document.text_replaced
Version1.0.0
Hash56e7af577df900b0
Completion leveltext_replaced
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillGoogle Docs API 0.1.0
Valid for provider API versionsv1.20260902

What is the intent?

Replace the text in the document with the batch update.

What is the subject and the action?

MemberValue
Subject typegoogle_docs.document
Subject identitydocument_id = $action.result.documentId
Canonical effectdocument.batch_update
Provider operationPOST /v1/documents/{documentId}:batchUpdate
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongdocument_id from $action.result.documentIdyes
resource_idstrongwrite_revision_id from $action.result.writeControl.requiredRevisionIdno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
document_readbackE2provider readbackhttpRead the document from the provider. A condition path is $observed.document_readback.revisionId. The read states includeTabsContent, so the content sits under tabs and the legacy member body stays empty.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
document_is_the_subjectThe document that the read returned is the document that the intent named. The read names the document of the write answer.$observed.document_readback.documentIdeq$input.document_iddocument_readback
revision_is_the_revision_of_this_writeThe document holds the revision that this batch update produced. The published schema states that a required revision identifier inside a response is the revision of the document after the request was applied.$observed.document_readback.revisionIdeq$action.result.writeControl.requiredRevisionIddocument_readback
revision_moved_from_the_baseThe revision differs from the revision that the agent read before the write. The published sentence states that an unchanged revision identifier means an unchanged document.$observed.document_readback.revisionIdne$input.base_revision_iddocument_readback
text_runs_match_the_intentThe text runs of every tab equal the list that the person confirmed, in document order. The query steps over a section break, which holds no paragraph. A Docs text run carries the newline that ends its paragraph, so the comparison keeps it.$observed.document_readbackjsonpath$input.expected_text_runsdocument_readback

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
document_subject_differswrong subjectThe agent changed a different document than the intent named.$observed.document_readback.documentIdne$input.document_id

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
document_moved_past_this_write($observed.document_readback.revisionId ne "$action.result.writeControl.requiredRevisionId") and ($observed.document_readback.revisionId ne "$input.base_revision_id")CONTRADICTEDThe document holds a revision that this write did not produce. A second batch update or another person wrote after it. The Docs API states no idempotency key, so do not write again. Ask a person.
revision_not_published$observed.document_readback.revisionId absent undefinedPENDINGThe read carries no revision identifier. The published description states that the member needs edit access. Check the credential of the verifier.

How long does the runtime observe?

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

Where do these rules come from?

  • google_docs.openapi#/paths/~1v1~1documents~1{documentId}:batchUpdate/post/responses/200: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/BatchUpdateDocumentResponse/properties/replies: google_docs.openapi, retrieved 2026-09-09
  • google_docs.docs.batch#batch-updates-of-a-document/a-reply-can-be-empty-and-an-empty-reply-is-not-a-failure: google_docs.docs.batch, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/TextRun/properties/content: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/ReplaceAllTextResponse/properties/occurrencesChanged: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/Document/properties/documentId: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/BatchUpdateDocumentResponse/properties/documentId: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/Document/properties/revisionId: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/WriteControl/properties/requiredRevisionId: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/BatchUpdateDocumentResponse/properties/writeControl: google_docs.openapi, retrieved 2026-09-09
  • google_docs.docs.write_control#state-consistency-and-the-revision-of-a-document/the-response-of-a-batch-update-carries-a-write-control: google_docs.docs.write_control, retrieved 2026-09-09
  • google_docs.docs.write_control#state-consistency-and-the-revision-of-a-document/the-published-schema-of-the-document-revision: google_docs.docs.write_control, retrieved 2026-09-09
  • google_docs.docs.write_control#state-consistency-and-the-revision-of-a-document/read-the-revision-then-write-against-it: google_docs.docs.write_control, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/Document/properties/tabs: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/DocumentTab/properties/body: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/Body/properties/content: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/StructuralElement/properties/paragraph: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/Paragraph/properties/elements: google_docs.openapi, retrieved 2026-09-09
  • google_docs.openapi#/components/schemas/ParagraphElement/properties/textRun: google_docs.openapi, retrieved 2026-09-09

Can google_docs.document.text_replaced return VERIFIED from the action response alone?

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

What happens after the timeout?

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