Symptom and next-action matrix
Failure 1: the control was added after signing
Symptom
The request is refused as an unsigned Explain control, even though the application appears to send a valid value.Why it happens
x-t9-explain changes whether the request executes and must be integrity-protected. If an HTTP interceptor appends the header after SigV4 signing, the adapter cannot trust it. A reverse proxy can cause the same problem if it adds or rewrites the control after the client signs.
Confirm it
Inspect request construction without printing the authorization credential:- Identify where endpoint selection, request override and signing occur.
- Confirm
x-t9-explainis present before the signer runs. - Check that the signed-header set covers it.
- Confirm there is exactly one value and that no proxy rewrites it.
Fix it
In AWS SDK for Java 2.x, use request override configuration while building the service request:What not to do
Do not remove the header and send the mutation normally just to see whether the endpoint works. Use a non-mutating operation or fix signing first.Failure 2: the operation succeeded but the report is unavailable
Symptom
AnExecuteAndExplain call returned its native success and x-t9-explain-id, but reading the report returns 404 NotFound, 503 Unavailable or remains partial.
Interpretation
The origin operation and report have separate lifecycles. Native success is evidence about the origin API response. It does not seal the report. A report receipt identifies correlation intent; it does not prove that a report row was persisted. Report unavailability is evidence about the diagnostic read path, not a rollback of target effects.Safe response
- Preserve the native response, origin request ID, report ID and target resource identity.
- Verify the intended target state using the service’s normal read path.
- Retry only the exact signed report GET with bounded backoff and the same owner identity.
- If a declared origin status poll exists, select the same report ID and exact resource identity.
- Record the latest report revision; ignore a late older revision.
- Do not replay the mutating operation merely to create another report.
Failure 3: an explicit mode is unsupported
Symptom
The application explicitly requestsExplain or ExecuteAndExplain, and the adapter refuses before the operation runs.
Interpretation
An explicit request is fail-closed. The adapter does not silently ignore it, fall back to the adapter default or execute normally. This protects a preview from becoming a mutation.Safe response
- Read the exact refusal and origin operation.
- Inspect the directed service profile and operation-specific coverage.
- Confirm that the deployed adapter and selected target match the profile you inspected.
- Choose a supported non-mutating operation for connectivity testing, or collect ordinary service evidence without claiming an explanation.
x-t9-explain: true as a workaround: that value means ExecuteAndExplain, not a more compatible preview.
Malformed, duplicate and false controls
The adapter refuses these controls before ordinary service processing:version. The third uses the wrong enum case. The fourth contains an unknown field. Empty, non-ASCII, over-4096-byte and repeated fields are also refused.
Log a redacted representation of the control and its byte length, not the complete signed request.
Default-caused unexplained requests
When an adapter default asks for explanation but a declared status read must execute ordinarily, the response can include:Missing receipt
Nox-t9-explain-id can have several causes:
- the request never reached an HTTP service;
- no explicit control or adapter default applied;
- the operation was served under default fallback and has
x-t9-explain-unexplained; - the request was refused before report creation, including some authorization paths;
- middleware removed response headers;
- the client inspected only a decoded error and discarded raw HTTP metadata.
Report read dispositions
Use the status and disposition together:409 NotYetVisiblemeans the stored revision is below the direct GET’s requestedminimumVersion; retain the previously recorded snapshot, record the current stored revision returned by the disposition, and retry the read.409 NotSealedorRevisionMismatchapplies to acknowledgment; read the current report and use its supplied acknowledgeable revision.410 Consumedmeans the owner already acknowledged the sealed revision. Repeating the same owner acknowledgment at the same revision is idempotent; another revision is a mismatch.410 Expiredis terminal while the expired record remains; after retention collection, the same report can appear as404.503 Unavailablepermits a later read attempt, not a mutation replay.404 NotFoundcan mean nonexistent, concealed from this principal, not persisted, unsupported schema or already collected after expiry. Changing the guessed ID is not a discovery mechanism.
fmt=Human to fmt=Json renders the same report. It does not start a new report and cannot fill missing evidence.
SDK response decoding and retries
ExplicitExplain returns a diagnostic document instead of the service’s normal result. A generated SDK may report a decoding error if it expects an S3 or DynamoDB response. That document is not a transient malformed provider response.
An explanation-aware client should:
- classify the explained response as non-retryable;
- retain the document and report ID;
- avoid converting it to a successful resource result;
- ensure the request control is signed on every attempt;
- preserve every report ID if an executing request is genuinely retried.
ExecuteAndExplain only when performing the operation is intended and the ordinary native response is required. See Explaining SDK Requests.
Endpoint, region and credential mistakes
An origin SDK still signs for its origin service and region while sending to the adapter endpoint. Check these independently:- process-wide
AWS_ENDPOINT_URL_<SERVICE>or programmatic endpoint override; - origin region and signing name;
- origin credential provider used by the SDK;
- adapter’s configured target identity;
- network and TLS path to the adapter.
Build a support bundle
Include:- product, adapter and SDK versions;
- origin, target and operation;
- exact mode and sanitized control;
- timestamp, endpoint category and request identifiers;
- native status/error and Explain receipt headers;
- report ID, revisions, lifecycle, assurance and limitations;
- the smallest redacted request shape;
- observed target state and how it was checked;
- whether any retry or cleanup ran;
- what remains unknown.