Update one Test scenario
PATCH
/v1/tests/{testPlanId}/scenarios/{scenarioId}How to call this endpoint
Every ACP API request uses bearer authentication. The examples here show the actual request path, auth header, and body shape that the platform expects.
Path, query, and header parameters
These parameters control which ACP object the endpoint acts on and how the request is processed.
Path parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| testPlanId | path | string | Yes | — |
| scenarioId | path | string | Yes | — |
Query parameters
None.
Body schema
Content type: application/json · Required
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | No | Unique identifier. |
| name | string | No | Human-readable name. |
| description | string | No | Human-readable description. |
| kind | command | contract | integration | browser | agent | security | custom | No | — |
| command | string | No | — |
| workingDirectory | string | No | — |
| timeoutMs | integer | No | — |
| retries | integer | No | — |
| env | object | No | — |
| secretRefs | string[] | No | — |
| request | object | No | Kind-specific structured request. Secrets must be referenced through `secretRefs`. |
| assertions | object[] | No | — |
| agentId | string | No | Agent ID. |
| enabled | boolean | No | — |
| tags | string[] | No | — |
| position | integer | No | — |
| expectedUpdatedAt | string | No | — |
What the API returns
Each response code below includes the documented payload shape for the ACP API.
200Updated scenarioapplication/json
| Field | Type | Required | Description |
|---|---|---|---|
| scenario | object | No | — |
| scenario.id | string | Yes | Unique identifier. |
| scenario.name | string | Yes | Human-readable name. |
| scenario.description | string | Yes | Human-readable description. |
| scenario.kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| scenario.command | string | Yes | — |
| scenario.workingDirectory | string | Yes | — |
| scenario.timeoutMs | integer | Yes | — |
| scenario.retries | integer | Yes | — |
| scenario.env | object | Yes | — |
| scenario.secretRefs | string[] | Yes | — |
| scenario.request | object | Yes | Kind-specific structured request. Secrets must be referenced through `secretRefs`. |
| scenario.assertions | object[] | Yes | — |
| scenario.agentId | string | Yes | Agent ID. |
| scenario.enabled | boolean | Yes | — |
| scenario.tags | string[] | Yes | — |
| testPlan | object | No | — |
| testPlan.id | string | Yes | Unique identifier. |
| testPlan.projectId | string | Yes | Project ID. |
| testPlan.name | string | Yes | Human-readable name. |
| testPlan.description | string | Yes | Human-readable description. |
| testPlan.status | draft | active | archived | Yes | Current lifecycle status. |
| testPlan.targetType | project | workflow | function | web_app | agent | repository | custom | Yes | — |
| testPlan.targetId | string | Yes | — |
| testPlan.defaultEnvironmentId | string | Yes | — |
| testPlan.definition | object | Yes | — |
| testPlan.definition.schemaVersion | computer_agents_test_plan_v1 | Yes | — |
| testPlan.definition.cases | object[] | Yes | — |
| testPlan.definition.cases[].id | string | Yes | Unique identifier. |
| testPlan.definition.cases[].name | string | Yes | Human-readable name. |
| testPlan.definition.cases[].description | string | Yes | Human-readable description. |
| testPlan.definition.cases[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.definition.cases[].command | string | Yes | — |
| testPlan.definition.cases[].workingDirectory | string | Yes | — |
| testPlan.definition.cases[].timeoutMs | integer | Yes | — |
| testPlan.definition.cases[].retries | integer | Yes | — |
| testPlan.definition.cases[].env | object | Yes | — |
| testPlan.definition.cases[].secretRefs | string[] | Yes | — |
| testPlan.definition.cases[].request | object | Yes | Kind-specific structured request. Secrets must be referenced through `secretRefs`. |
| testPlan.definition.cases[].assertions | object[] | Yes | — |
| testPlan.definition.cases[].agentId | string | Yes | Agent ID. |
| testPlan.definition.cases[].enabled | boolean | Yes | — |
| testPlan.definition.cases[].tags | string[] | Yes | — |
| testPlan.definition.concurrency | integer | Yes | — |
| testPlan.definition.stopOnFailure | boolean | Yes | — |
| testPlan.definition.retryPolicy | object | Yes | — |
| testPlan.definition.retryPolicy.maxAttempts | integer | Yes | — |
| testPlan.definition.evidencePolicy | object | Yes | — |
| testPlan.definition.evidencePolicy.retainLogs | boolean | Yes | — |
| testPlan.definition.evidencePolicy.retainScreenshots | boolean | Yes | — |
| testPlan.definition.evidencePolicy.retainTraces | boolean | Yes | — |
| testPlan.definition.evidencePolicy.retainArtifacts | boolean | Yes | — |
| testPlan.definition.evidencePolicy.redactSecrets | boolean | Yes | — |
| testPlan.caseCount | integer | Yes | — |
| testPlan.planFingerprint | string | Yes | — |
| testPlan.publishedVersionId | string | Yes | — |
| testPlan.metadata | object | Yes | Free-form metadata object. |
| testPlan.createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.versions | object[] | No | — |
| testPlan.versions[].id | string | Yes | Unique identifier. |
| testPlan.versions[].testPlanId | string | Yes | — |
| testPlan.versions[].version | integer | Yes | — |
| testPlan.versions[].label | string | Yes | — |
| testPlan.versions[].description | string | Yes | Human-readable description. |
| testPlan.versions[].status | saved | published | Yes | Current lifecycle status. |
| testPlan.versions[].snapshot | object | Yes | — |
| testPlan.versions[].snapshot.name | string | Yes | Human-readable name. |
| testPlan.versions[].snapshot.description | string | Yes | Human-readable description. |
| testPlan.versions[].snapshot.status | draft | active | archived | Yes | Current lifecycle status. |
| testPlan.versions[].snapshot.projectId | string | Yes | Project ID. |
| testPlan.versions[].snapshot.targetType | project | workflow | function | web_app | agent | repository | custom | Yes | — |
| testPlan.versions[].snapshot.targetId | string | Yes | — |
| testPlan.versions[].snapshot.defaultEnvironmentId | string | Yes | — |
| testPlan.versions[].snapshot.definition | object | Yes | — |
| testPlan.versions[].snapshot.definition.schemaVersion | computer_agents_test_plan_v1 | Yes | — |
| testPlan.versions[].snapshot.definition.cases | object[] | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].id | string | Yes | Unique identifier. |
| testPlan.versions[].snapshot.definition.cases[].name | string | Yes | Human-readable name. |
| testPlan.versions[].snapshot.definition.cases[].description | string | Yes | Human-readable description. |
| testPlan.versions[].snapshot.definition.cases[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].command | string | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].workingDirectory | string | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].timeoutMs | integer | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].retries | integer | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].env | object | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].secretRefs | string[] | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].request | object | Yes | Kind-specific structured request. Secrets must be referenced through `secretRefs`. |
| testPlan.versions[].snapshot.definition.cases[].assertions | object[] | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].agentId | string | Yes | Agent ID. |
| testPlan.versions[].snapshot.definition.cases[].enabled | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.cases[].tags | string[] | Yes | — |
| testPlan.versions[].snapshot.definition.concurrency | integer | Yes | — |
| testPlan.versions[].snapshot.definition.stopOnFailure | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.retryPolicy | object | Yes | — |
| testPlan.versions[].snapshot.definition.retryPolicy.maxAttempts | integer | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy | object | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy.retainLogs | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy.retainScreenshots | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy.retainTraces | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy.retainArtifacts | boolean | Yes | — |
| testPlan.versions[].snapshot.definition.evidencePolicy.redactSecrets | boolean | Yes | — |
| testPlan.versions[].snapshot.metadata | object | Yes | Functional extension metadata only; ownership and access-control fields are deliberately excluded. |
| testPlan.versions[].metadata | object | Yes | Free-form metadata object. |
| testPlan.versions[].publishedAt | string | Yes | — |
| testPlan.versions[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.versions[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs | object[] | No | — |
| testPlan.runs[].id | string | Yes | Unique identifier. |
| testPlan.runs[].testPlanId | string | Yes | — |
| testPlan.runs[].versionId | string | Yes | — |
| testPlan.runs[].projectId | string | Yes | Project ID. |
| testPlan.runs[].taskId | string | Yes | — |
| testPlan.runs[].releaseId | string | Yes | — |
| testPlan.runs[].environmentId | string | Yes | Computer ID. |
| testPlan.runs[].agentId | string | Yes | Agent ID. |
| testPlan.runs[].triggerType | manual | mission_control | task | release | pull_request | schedule | api | Yes | — |
| testPlan.runs[].commitSha | string | Yes | — |
| testPlan.runs[].status | queued | running | passed | failed | completed_with_errors | cancelled | Yes | Current lifecycle status. |
| testPlan.runs[].executionStatus | queued | running | completed | cancelled | Yes | — |
| testPlan.runs[].verdict | passed | failed | error | cancelled | Yes | — |
| testPlan.runs[].executionType | preview | published | imported | Yes | — |
| testPlan.runs[].totalCount | integer | Yes | — |
| testPlan.runs[].passedCount | integer | Yes | — |
| testPlan.runs[].failedCount | integer | Yes | — |
| testPlan.runs[].skippedCount | integer | Yes | — |
| testPlan.runs[].errorCount | integer | Yes | — |
| testPlan.runs[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence | object | Yes | — |
| testPlan.runs[].evidence.schemaVersion | computer_agents_test_run_evidence_v2 | Yes | — |
| testPlan.runs[].evidence.runId | string | Yes | — |
| testPlan.runs[].evidence.planId | string | Yes | — |
| testPlan.runs[].evidence.planVersionId | string | Yes | — |
| testPlan.runs[].evidence.planFingerprint | string | Yes | — |
| testPlan.runs[].evidence.commitSha | string | Yes | — |
| testPlan.runs[].evidence.status | queued | running | passed | failed | completed_with_errors | cancelled | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.expectedCaseIds | string[] | Yes | — |
| testPlan.runs[].evidence.counts | object | Yes | — |
| testPlan.runs[].evidence.counts.total | integer | Yes | — |
| testPlan.runs[].evidence.counts.passed | integer | Yes | — |
| testPlan.runs[].evidence.counts.failed | integer | Yes | — |
| testPlan.runs[].evidence.counts.skipped | integer | Yes | — |
| testPlan.runs[].evidence.counts.error | integer | Yes | — |
| testPlan.runs[].evidence.executionContext | object | Yes | — |
| testPlan.runs[].evidence.executionContext.environmentId | string | Yes | Computer ID. |
| testPlan.runs[].evidence.executionContext.agentId | string | Yes | Agent ID. |
| testPlan.runs[].evidence.executionContext.projectId | string | Yes | Project ID. |
| testPlan.runs[].evidence.executionContext.taskId | string | Yes | — |
| testPlan.runs[].evidence.executionContext.releaseId | string | Yes | — |
| testPlan.runs[].evidence.generatedAt | string | Yes | — |
| testPlan.runs[].evidence.resultSetFingerprint | string | Yes | — |
| testPlan.runs[].evidence.artifactSetFingerprint | string | Yes | — |
| testPlan.runs[].evidence.provenance | object | Yes | Self-reported provenance must be unverified with no attestation. Verified-worker provenance is accepted only when the server-verified attestation binds every canonical evidence identity and digest. |
| testPlan.runs[].evidence.provenance.schemaVersion | computer_agents_test_run_evidence_provenance_v1 | Yes | — |
| testPlan.runs[].evidence.provenance.source | computer_agents_thread | execution_worker | api_client | legacy_import | Yes | — |
| testPlan.runs[].evidence.provenance.trustLevel | self_reported | verified_worker | Yes | — |
| testPlan.runs[].evidence.provenance.verificationStatus | unverified | verified | Yes | — |
| testPlan.runs[].evidence.provenance.executor | object | Yes | — |
| testPlan.runs[].evidence.provenance.executor.kind | string | Yes | — |
| testPlan.runs[].evidence.provenance.executor.id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.provenance.attestation | object | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.schemaVersion | computer_agents_test_execution_attestation_v1 | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.attestationId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.workerId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.dispatchId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.workerAssertionId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.runId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.planId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.planVersionId | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.planFingerprint | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.commitSha | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.environmentId | string | Yes | Computer ID. |
| testPlan.runs[].evidence.provenance.attestation.resultSetFingerprint | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.artifactSetFingerprint | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.issuedAt | string | Yes | — |
| testPlan.runs[].evidence.provenance.attestation.verifiedAt | string | Yes | — |
| testPlan.runs[].evidence.results | object[] | Yes | — |
| testPlan.runs[].evidence.results[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.results[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.results[].caseId | string | Yes | — |
| testPlan.runs[].evidence.results[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.results[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].evidence.results[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.results[].attempt | integer | Yes | — |
| testPlan.runs[].evidence.results[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence.results[].exitCode | integer | Yes | — |
| testPlan.runs[].evidence.results[].summary | string | Yes | — |
| testPlan.runs[].evidence.results[].diagnostics | object | Yes | — |
| testPlan.runs[].evidence.results[].evidence | object | Yes | — |
| testPlan.runs[].evidence.results[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].evidence.results[].attemptCount | integer | No | — |
| testPlan.runs[].evidence.results[].attempts | object[] | No | — |
| testPlan.runs[].evidence.results[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.results[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.results[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.results[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].summary | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].evidence.results[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].evidence.results[].attempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].evidence.artifacts | object[] | Yes | — |
| testPlan.runs[].evidence.artifacts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].evidence.artifacts[].testRunId | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].testCaseResultId | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].type | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].evidence.artifacts[].uri | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].contentType | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].sizeBytes | integer | Yes | — |
| testPlan.runs[].evidence.artifacts[].sha256 | string | Yes | — |
| testPlan.runs[].evidence.artifacts[].metadata | object | Yes | Free-form metadata object. |
| testPlan.runs[].evidence.artifacts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].evidence.fingerprint | string | Yes | — |
| testPlan.runs[].metadata | object | Yes | Free-form metadata object. |
| testPlan.runs[].execution | object | Yes | — |
| testPlan.runs[].execution.owner | string | Yes | — |
| testPlan.runs[].execution.attempt | integer | Yes | — |
| testPlan.runs[].execution.leaseExpiresAt | string | Yes | — |
| testPlan.runs[].execution.heartbeatAt | string | Yes | — |
| testPlan.runs[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results | object[] | No | — |
| testPlan.runs[].results[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].testRunId | string | Yes | — |
| testPlan.runs[].results[].caseId | string | Yes | — |
| testPlan.runs[].results[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempt | integer | Yes | — |
| testPlan.runs[].results[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].summary | string | Yes | — |
| testPlan.runs[].results[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].evidence | object | Yes | — |
| testPlan.runs[].results[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts | object[] | No | — |
| testPlan.runs[].results[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].results[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].results[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].results[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].attempts[].summary | string | Yes | — |
| testPlan.runs[].results[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].results[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].results[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].results[].attempts[].attempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].testRunId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].caseId | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].kind | command | contract | integration | browser | agent | security | custom | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].status | queued | running | passed | failed | skipped | error | Yes | Current lifecycle status. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].attempt | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].durationMs | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].exitCode | integer | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].summary | string | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].diagnostics | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].evidence | object | Yes | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].startedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].completedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].createdAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].updatedAt | string | Yes | ISO 8601 timestamp. |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].classification | queued | running | passed | failed | skipped | error | flaky | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].attemptCount | integer | No | — |
| testPlan.runs[].resultAttempts[].attempts[].attempts[].attempts[].attempts[].attempts[].attempts | object[] | No | — |
| testPlan.runs[].artifacts | object[] | No | — |
| testPlan.runs[].artifacts[].id | string | Yes | Unique identifier. |
| testPlan.runs[].artifacts[].testRunId | string | Yes | — |
| testPlan.runs[].artifacts[].testCaseResultId | string | Yes | — |
| testPlan.runs[].artifacts[].type | string | Yes | — |
| testPlan.runs[].artifacts[].name | string | Yes | Human-readable name. |
| testPlan.runs[].artifacts[].uri | string | Yes | — |
| testPlan.runs[].artifacts[].contentType | string | Yes | — |
| testPlan.runs[].artifacts[].sizeBytes | integer | Yes | — |
| testPlan.runs[].artifacts[].sha256 | string | Yes | — |
| testPlan.runs[].artifacts[].metadata | object | Yes | Free-form metadata object. |
| testPlan.runs[].artifacts[].createdAt | string | Yes | ISO 8601 timestamp. |
409Draft changed concurrently
None.