ExecuteAndExplain keeps the service’s native response while headers identify the report. A completed Explain preview returns an origin-protocol 409 ExplainedNotPerformed error and a receipt without performing the requested action. Retrieve explanation content through the dedicated synthetic AWS service t9. The application API and report API have distinct signed service identities; configure the supplied t9 endpoint explicitly and sign report calls as t9. A local forwarding URI may be shared physically without changing that service identity. These headers have different jobs:
- Request controls select explanation behavior and must be signed with the request.
- Response receipts identify the effective mode or a report. A receipt is not the report itself.
- Report API fields identify the returned rendering and revision. The
fmtrequest field selects rendering; the AWS JSON response contains the rendered report as a string inbody. - Origin correlation and request-effect headers retain their narrow, documented meanings.
Request controls
A separate
T9CloudAdapter.GetExplanation call chooses its renderer with the fmt JSON field. Its response identifies that rendering in fmt. Accept: application/vnd.tensor9.explain+json on a service operation does not select an explanation body. The legacy x-t9-explain-id request selector is refused with 400 InvalidExplainConfiguration; call the t9 report service instead.
The x-t9-explain grammar
The shorthand form executes the request:
ExecuteAndExplain with Human presentation. It is useful when an ordinary SDK should continue consuming the native response, but it is not a preview.
Use the explicit JSON form when mode needs to be unambiguous:
versionandmodeare required.versionmust be1.modeis exactlyExplainorExecuteAndExplain.fmt, when omitted, defaults toHuman; accepted values areHuman,Agent, andJson.- Unknown or duplicate JSON fields are refused.
- The header must be ASCII and no larger than 4096 bytes.
- More than one
x-t9-explainfield is refused; the adapter does not choose one. false, an empty value and an unrecognized string are refused. To request ordinary execution, omit the header.
true overrides a default of Explain and selects ExecuteAndExplain. Invalid input is refused before ordinary service processing; it never falls back to a default or ordinary execution.
The request control must be covered by the request signature. Add it before SigV4 signing. A proxy, middleware layer or SDK interceptor that appends it after signing produces an unsigned-control refusal.
Response receipts
x-t9-explain-id and x-t9-explain-mode are identifiers, not outcome assertions. In particular, their presence does not mean:
- the target operation succeeded;
- an asynchronous operation converged;
- the report is sealed or complete;
- authorization was allowed;
- it is safe to retry the origin request.
x-t9-explain-unexplained is used only for the narrow adapter-default fallback. It does not appear beside a report ID. An explicit request for an unsupported mode is refused instead of silently running unexplained.
Read an existing report
Configure a report client with the deployment’s explicitt9 endpoint and signing region. Use regular IAM credentials, including the session token when present, and SigV4 signing service t9. Keep the application’s S3 or DynamoDB endpoint and signing service on its ordinary SDK client. Do not sign report requests as s3, dynamodb or another application service, and do not assume their endpoint is the t9 endpoint.
Use T9_ENDPOINT_URL and T9_SIGNING_REGION supplied for that deployment. Local tensor9 adapt svc run readiness output names both settings; an existing provisioned fabric’s tensor9 adapt cloud connect -dir "$FABRIC_DIR" -env output exports them. See report client configuration.
The exact report-owner principal must authenticate. There is no separate diagnostic token, and the report ID alone grants no access. Report access also remains scoped to the deployment’s tenant and fabric.
The report API uses AWS JSON 1.1. Every call is POST / on the t9 endpoint with no query string, Content-Type: application/x-amz-json-1.1, and exactly one X-Amz-Target covered by SignedHeaders:
reportId is required. fmt is optional and accepts Human, Agent or Json; omitting it uses the stored report format. Rendering the same report differently does not run the service operation again.
On a later monotonic read, supply minimumVersion to refuse a snapshot older than the recorded revision. It must be a positive signed 64-bit integer. Use the next revision only when waiting specifically for newer evidence:
minimumVersion, it returns 409 NotYetVisible with the current revision when known. Report responses, including errors, use Cache-Control: no-store. Reading does not extend retention.
A successful 200 response is an AWS JSON object:
body is a string. Decode the outer AWS JSON object first, then read or parse its body according to fmt. The HTTP response body is not the raw Human, Agent or JSON report. acknowledgeRevision is present only when the sealed report can be acknowledged.
The read statuses are intentionally distinct:
Errors use AWS JSON fields
__type and message, with disposition and revision when known. For example:
404 to distinguish a nonexistent report from one hidden from this principal. It can also describe an unpersisted report, unsupported stored schema or record already collected after expiry. No report error establishes the original operation’s outcome.
The signed SDK retrieval flow uses this same GetExplanation API with the published endpoint and region. Decode the outer AWS JSON response’s body string to read the selected rendering. Retrieval performs no implicit acknowledgment. A positive minimumVersion is optional; omit it for a first read or revision zero.
Acknowledge a sealed report
Export needed evidence before acknowledgment. SendT9CloudAdapter.AcknowledgeExplanation to the same configured t9 service endpoint, signed as t9, and supply exactly the acknowledgeRevision returned by GetExplanation:
Only the authenticated principal recorded as the report owner can read or acknowledge it. Another role or session is not an additional reader. The owner can share sanitized exports with approved people or systems. Repeating the same owner acknowledgment for the same sealed revision is idempotent; a different revision returns
RevisionMismatch.
Poll report progress and resource status separately
RepeatT9CloudAdapter.GetExplanation through t9 for later revisions. Query resource status independently using its ordinary AWS SDK operation and exact resource identity. An executing status read retains its native response and still follows any configured Explain default unless an explicit control replaces it.
A report ID never selects an explanation through an application service operation. The legacy x-t9-explain-id request selector is refused with 400 InvalidExplainConfiguration. Do not use the former private /_t9 report paths; report retrieval belongs to the dedicated t9 service.
Retention and expiry
The default report lifetime is 24 hours from creation. The operation receipt’sx-t9-explain-expires-at and the JSON report’s reportExpiresAt name the deadline. Reads do not renew it. Setting T9_SIPSVR_EXPLAIN_RETENTION_SECS to a positive duration changes the lifetime of newly created reports; existing deadlines remain fixed.
Expiry ends report capture and access without cancelling the underlying service operation or changing its execution mode. An expired report returns 410 Expired to its owner while the expired record remains. After collection it returns 404 NotFound. Another principal continues to receive 404 rather than learning that an expired report exists.
Logical expiry and physical storage collection are separate. The expiry deadline is enforced by default. Physical collection is opt-in with T9_SIPSVR_EXPLAIN_REAP_ENABLED=true; T9_SIPSVR_EXPLAIN_REAP_SECS configures the bounded sweep interval. Without that sweep, expired content is unavailable through the API but the stored record remains. Owner acknowledgment can consume a sealed report earlier. Export evidence needed for longer storage before expiry or acknowledgment.
Origin correlation metadata
Origin-shaped responses retain service-specific identifiers:
These identifiers do not establish which backend operation ran, whether a write completed, or whether a retry is safe. Preserve them alongside the report ID and relevant adapter logs.
Failed-request effect information
x-tensor9-request-effect has one narrowly defined value:
X-Tensor9-Error-Source, X-Tensor9-Debug, or similarly guessed interface.