Prove that the comment sits on the issue that the person named. A comment that exists is not a comment on the right issue. The level reads the comment through the issue that the person named.

Contract identity.
FactValue
Contract idjira.comment.added
Version1.0.0
Hashb52241d56dcb4ebf
Completion leveladded
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillJira Cloud platform REST API 0.1.0
Valid for provider API versions3

What is the intent?

Add this comment to the issue.

What is the subject and the action?

MemberValue
Subject typejira.comment
Subject identitycomment_id = $action.result.id
Canonical effectwork_tracking.comment_create
Provider operationPOST /rest/api/3/issue/{issueIdOrKey}/comment
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongcomment_id from $action.result.idyes
fingerprintweakissue_id from $input.issue_id; body_text from $input.body_textno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
comment_readbackE2provider readbackhttpRead the comment of the issue. A condition path is $observed.comment_readback.body.content[0].content[0].text, because the version 3 states the body as a document.
comment_creation_events_on_issueE3provider eventwebhookThe comment_created callbacks of this issue since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A count above one shows a second comment, and Jira states no idempotency key to stop it.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
comment_presentThe provider holds the comment with the identifier of the answer.$observed.comment_readback.ideq$action.result.idcomment_readback
comment_names_the_requested_issueThe URL of the comment names the issue that the intent named.$observed.comment_readback.selfregex/issue/${$input.issue_id}/comment/comment_readback
comment_text_matchesThe text of the comment equals the requested text. The version 3 states the body as a document, so the path names the text node.$observed.comment_readback.body.content[0].content[0].texteq$input.body_textcomment_readback
comment_created_in_windowThe provider created the comment after the operation started.$observed.comment_readback.createdtime_after$operation.created_atcomment_readback
comment_creation_eventAt least one comment_created callback names this issue.$observed.comment_creation_events_on_issue.countgte1comment_creation_events_on_issue

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
comment_with_another_textwrong subjectThe comment carries a different text than the intent stated.$observed.comment_readback.body.content[0].content[0].textne$input.body_text
comment_predates_operationpre existing stateThe comment is older than the operation. It proves nothing.$observed.comment_readback.createdtime_before$operation.created_at
duplicate_comment_presentduplicate side effectJira wrote more than one comment on the issue since the operation started. Do not retry.$observed.comment_creation_events_on_issue.countgt1

Which observed states map to a verdict before completion?

The contract declares no verdict map. The completion block decides.

How long does the runtime observe?

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

Where do these rules come from?

  • jira.openapi#/paths/~1rest~1api~13~1issue~1{issueIdOrKey}~1comment/post: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/paths/~1rest~1api~13~1issue~1{issueIdOrKey}~1comment/post/responses/201: jira.openapi, retrieved 2026-09-09
  • jira.docs.comments#comments/add-a-comment: jira.docs.comments, retrieved 2026-09-09
  • jira.docs.comments#comments/the-body-of-a-comment-is-a-document-not-a-string: jira.docs.comments, retrieved 2026-09-09
  • jira.openapi#/components/schemas/Comment/properties/id: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/paths/~1rest~1api~13~1issue~1{issueIdOrKey}~1comment~1{id}/get/responses/200: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/paths/~1rest~1api~13~1issue~1{issueIdOrKey}~1comment~1{id}/get: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/components/schemas/Comment/properties/self: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/components/schemas/Comment/properties/body: jira.openapi, retrieved 2026-09-09
  • jira.openapi#/components/schemas/Comment/properties/created: jira.openapi, retrieved 2026-09-09
  • jira.events#/events/comment_created: jira.events, retrieved 2026-09-09
  • jira.docs.webhooks#webhooks/the-event-names: jira.docs.webhooks, retrieved 2026-09-09
  • jira.openapi#/components/schemas/Webhook/properties/events: jira.openapi, retrieved 2026-09-09

Can jira.comment.added return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read comment_readback and comment_creation_events_on_issue.

What happens after the timeout?

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