Choose the safest Explain workflow
Use the least invasive workflow that answers the question:- Inspect the directed service profile with
tensor9 explain. This reads the published origin-to-target mapping and does not launch an adapter or call a cloud API. - Reproduce the request in an approved test appliance. Use
Explainmode when you need a hypothetical decision without applying the target operation. UseExecuteAndExplainonly when the test is meant to perform the operation. - Add the
x-t9-explainrequest control through the application’s existing, signed SDK request. The adapter returns an explanation receipt when the selected operation supports request explanation. - Retrieve the report through the install’s dedicated synthetic AWS
t9service using the original request owner’s IAM identity. Preserve an authorized and redacted copy when available, then acknowledge the exact consumable revision.
s3 or dynamodb. Its response stays in the native protocol and carries an explanation receipt when available. Explanation content is retrieved separately from the synthetic AWS t9 service, with SigV4 signing service t9. BYOC includes this protocol without a separate Cloud Adapter installation.
Establish the deployment context
Before interpreting a report, identify the deployment it came from. For a vendor investigation, record:- app, customer and release, such as
orders-api,example-customerandexample-release; - appliance form factor, origin service, target service and selected mapping;
- application, service-adapter and CLI versions;
- operation, timestamp and origin-facing endpoint;
- response status, origin request IDs and target request IDs, when supplied;
- explanation report ID, mode and revision;
- relevant tuning tags and sanitized adapter configuration; and
- the target resource observations that establish whether a mutation occurred.
Capture one request
Record its timestamp, endpoint, status, error code and response headers. Preserve the exact request identifiers returned by the adapter. Redact credentials, signed URLs, session tokens and sensitive payloads before sharing a reproduction or logs. Do not enable unrestricted SDK wire logging in a customer environment merely to collect identifiers. Wire logs can contain authentication material and application data. Use scoped collection and the customer’s approved access and handling procedures. When request explanation is enabled, capture the explanation receipt alongside the ordinary SDK result. A receipt is a correlation locator and records capture intent; it does not prove that a report row was persisted, that the operation succeeded, that the report is complete, or that the request was authorized. Keep the origin response, target observation and explanation report as separate evidence.Configure the report client
The following workflow requires an install version that publishes the dedicated report endpoint and signing region. If those settings are absent, confirm the appliance version and its supported report workflow with the vendor; do not infer an endpoint from another service URL. Use a separate client for the synthetic AWSt9 service. In a BYOC workload, read T9_ENDPOINT_URL and T9_SIGNING_REGION supplied by the deployment for the same install as the original request; see Service-adapter report endpoints. A receipt identifies a report, not its endpoint or an access credential.
Use the same credential provider as the original workload when it still resolves to the same authenticated owner. A new assumed-role session does not acquire another session’s reports. A Tensor9 API key, control-plane login or target-cloud credential does not authorize this request. See AWS IAM credentials for appliance-issued credentials and session tokens.
Retrieve an existing report
Use the signedT9CloudAdapter.GetExplanation request described in Read the explanation before guessing, with the receipt’s report ID and the published t9 connection settings for the original install. Sign as service t9 using its configured region and the original request owner’s IAM credentials, including the original session token when temporary credentials were used.
This read neither launches an adapter, executes the original operation nor acknowledges the report, and it needs no Tensor9 API key. Decode the outer AWS JSON response’s body string to read the rendering. tensor9 explain inspects a directed service profile only; it does not retrieve a deployed request report.
PostgreSQL-backed service adapters
PostgreSQL plan capture is under development for supported statements. BYOC uses the same owner-authenticatedt9 report workflow. A PostgreSQL backend alone does not establish plan support for an operation or installed release.
For a supported workload statement, the adapter plans the original compiled SQL and encoded parameters on a separate authenticated, read-only PostgreSQL connection using EXPLAIN (FORMAT JSON), without ANALYZE. Planning does not execute the write again or replace the native service result. Its planningContext is committed-state-observation: an estimate of separately observed committed state, not the original transaction snapshot or measured execution time.
Human and Agent text renderings retain the complete plan JSON, as does the JSON report. That full plan is private to the exact report owner and original IAM session. Relation and index names, predicates and application literals can occur inside it; review an exported copy before sharing. A plan can arrive in a later report revision. Read the same report with bounded backoff instead of replaying the operation; its retention deadline stays fixed.
Each active planning profile needs a separate allocation for a pool with a maximum of one connection, counted for each configured replica in addition to native connections. Another service’s allocation does not cover it. Account for the database’s other consumers and connection limits before treating the allowance as available capacity. Unavailable planning capacity or context affects the diagnostic evidence, rather than changing the ordinary operation’s outcome. Use the native result and independent resource observations to assess effects; a plan alone does not prove a commit.
Read the explanation before guessing
Retrieve the report separately and record its expiry before sharing evidence. The default lifetime is 24 hours from creation; reads do not renew it. Use the receipt’sx-t9-explain-expires-at or the JSON report’s reportExpiresAt. Read in the format appropriate to the investigator: Human for an operator, Agent for a bounded coding-agent investigation, or JSON for tooling. Distinguish observed facts, adapter decisions, constraints, target mappings and unknowns when interpreting the report.
Call T9CloudAdapter.GetExplanation using the report ID from x-t9-explain-id. Include Content-Type: application/x-amz-json-1.1 and X-Amz-Target: T9CloudAdapter.GetExplanation before signing; the target header must be covered by the signature. For example, the JSON request body is:
reportId, revision, fmt and body. The body field is a string containing the selected rendering. For fmt: "Json", parse that string as JSON to read the report. Human and Agent select text renderings. An optional positive minimumVersion requests a report at or beyond a known revision; it does not rerun the original operation.
When the response includes acknowledgeRevision, preserve the report before calling T9CloudAdapter.AcknowledgeExplanation on the same endpoint. Sign its target header and use this JSON body, replacing the example revision with the advertised value:
Cache-Control: no-store. Failures use AWS JSON __type and message fields; report disposition and revision appear only when they can be disclosed to that caller. Poll report availability with bounded reads; do not repeat the application request to obtain another report.
An explanation can establish which mapping was selected and why an adapter accepted, refused or translated a covered request. It cannot establish facts that were not captured. In particular:
- an allowed authorization fact does not prove the target accepted the request;
- a target mapping does not prove a write committed;
- a partial report does not prove the remaining steps did not occur; and
- the absence of an explanation receipt does not prove the request had no effect.
Read the diagnostic headers
Request identifiers are not proof that a backend operation completed or that a retry is safe. The request-effect header is not emitted by every adapter or every failure path.
An absent or unrecognized request-effect value means the effect is unknown. Check resource state and the operation’s idempotency rules before retrying a write. A timeout can occur after the backend performed the operation.
Python clients using Botocore response dictionaries expose headers in
ResponseMetadata.HTTPHeaders. A caught ClientError has its response dictionary on error.response; a transport exception may have no HTTP response. Collect only the metadata needed for the investigation.
Trace the deployment-specific path
Check the origin client endpoint, adapter configuration, backend identity and the resource state in the customer’s target environment. Distinguish origin authorization from backend permissions. An application’s ordinary network traffic or native database protocol may follow a different path from its cloud-management API calls. Use response identifiers to find the corresponding adapter logs in your approved observability workflow. Preserve relevant tuning tags, including tags set during resource creation. An empty test resource can hide a state-dependent bug. Use the Adapter Errors provenance header when it is present to choose the next system to inspect. Error provenance and Explain answer different questions: provenance identifies the layer that returned a failure, while Explain describes the adapter’s reasoning and recorded request path. Neither is a substitute for checking target state after an uncertain mutation.Reproduce in a test appliance
Prefer a test appliance with the same form factor and a minimal workload. Use synthetic data and scoped credentials. Reproduce the setup that matters to the request, then compare the observed result with the service’s operation coverage and documented differences. Do not replay a mutating request in a customer appliance merely to get a cleaner error. Determine whether the original request already changed resources and obtain appropriate authorization before any further live action. For a useful reproduction, keep the deployment shape faithful while reducing the data and permissions:- Match the customer appliance form factor, release and service mapping.
- Create a disposable resource with synthetic data and a scoped origin identity.
- Inspect the static profile for the exact origin, target and operation.
- Run a hypothetical explanation first when the operation supports it.
- If execution is necessary, use a unique resource name or idempotency key and observe the target before and after the request.
- Retrieve and redact the report before acknowledging it.
- Remove only the resources created by the test and record the cleanup result.
Coordinate vendor and customer responsibilities
The vendor and customer often hold different pieces of the evidence. Before sending the request, decide which application or collector will use the authenticated owner identity. That owner alone can retrieve and acknowledge through thet9 service; it exports sanitized evidence to approved participants out of band.
The originating request fixes the report owner to its authenticated principal; ownership is not reassigned after the response. The owner shares redacted evidence with approved participants and acknowledges only the exact revision advertised as consumable. Retrying the same owner acknowledgment at the same sealed revision is idempotent. Do not acknowledge merely to make an investigation queue look clean.
Use coding agents with captured evidence
The service reference, diagnostic response headers and captured logs can help identify the selected mapping and relevant limits. Documentation cannot establish what happened in a particular live request, and an investigation must not silently replay mutations against customer resources. You can ask Codex, Claude or another coding agent to investigate a sanitized reproduction through public CLI help and documentation. Give it explicit limits, for example:Report an unresolved issue
Use Getting Help for the step-by-step vendor/customer handoff. How Support Works separates adapter responsibilities from native target-service responsibilities; you do not need to establish fault before opening a case. Include versions, mapping, operation, timestamp, request identifiers, explanation report ID and revision, redacted error and configuration, relevant tags, reproduction steps and expected behavior. State what you verified about side effects, what remains unknown and whether the issue also occurs in a test appliance. Share the smallest useful evidence bundle, not the customer’s complete logs. A complete handoff for theorders-api example contains the example-customer appliance and example-release identity, the selected service mapping, adapter version, one sanitized origin response, native target observations, the redacted explanation report, report capture and acknowledgment state, and the exact next test. Keep credentials, signed URLs, customer payloads and unrestricted logs out of the bundle.