Skip to main content

FAQ + Troubleshooting

Sections:


Procurement & security

Does Trinitite store our prompts? By default, no. Inference response bodies are not persisted unless the tenant opts into replay support. The Glass Box Ledger stores only the cryptographic hashes of inputs, the verdict, and any correction patches — never the raw text. See Trust Center > Retention.

Does Trinitite train on our data? No. Closed-loop training (see Guardian Training) operates on embeddings of correction patches, not raw prompts, and is opt-in per tenant. Federated Defense aggregates embeddings only from tenants who have explicitly opted in.

Where is the data stored? US-East, EU-Central, or AP-Southeast at your choosing. Other regions on request. Self-hosted deployments stay entirely in your environment — see Self-hosting.

Can we self-host? Yes. Trinitite ships as Docker images you can deploy to Kubernetes, ECS, GCE, or air-gapped environments. See Self-hosting.

Do you have a SOC 2 report / BAA / DPA? Yes — available under NDA. Email trust@trinitite.ai. See Trust Center > Security artifacts.

Do you have a vulnerability disclosure program? Yes. security@trinitite.ai, PGP available at /.well-known/security.txt. See Trust Center > Vulnerability disclosure.

What happens if Trinitite goes away? Your Glass Box Ledger receipts are independently verifiable via the public verifier — see Public Verification. Your trained Guardians are exportable as standard LoRA tensor files. You can run the inference path on any deterministic-mode SGLang or vLLM server.


Architecture

Why a separate Guardian model instead of fine-tuning the main LLM? Mathematical incompatibility: the same parameters can't be both creative (the Actor) and restrictive (the Censor). See Architecture > Why Separation of Concerns.

Why deterministic if the underlying LLM isn't? The Guardian doesn't need to be creative. It needs to map an input vector to one of three outcomes. That decision is made deterministic via batch-invariant kernel and fixed-tile reduction. See Architecture > Batch-Invariant Determinism.

How is this different from RAG? RAG retrieves context. The Guardian decides whether the output of any system (RAG-augmented or not) is safe to release. They compose well — see Observability > RAG Telemetry.

Can the Guardian itself be wrong? Yes — and that's why every decision is hashed, signed, and replayable. The replay verdict taxonomy (bit_exact / semantic_only / divergent / original_missing) explicitly handles the case where a later run disagrees with an earlier one. See Glass Box Ledger > Replay Verdict Taxonomy.

What happens under load? Latency stays sub-400ms p99. Safety drift stays at 0.00%. See Benchmarks for the methodology.


Operational

My calls are hanging — what do I check first? Three things, in order:

  1. The L4 breaker for your provider — GET /v1/governance/state will show open breakers.
  2. The L5 retry limiter on the offending tool.
  3. Network egress allowlists from your environment to api.trinitite.ai and (if applicable) your upstream provider.

A Guardian is blocking calls I expect to pass. Pull the receipt: GET /v1/logs/{ledger_id}. The correction_diff field shows the embedding distance and which Forbidden subspace was matched. Two common causes:

  1. The Guardian is operating against a stricter rubric than you expected — check policy_hash on the receipt against the policy you intended.
  2. A recent training run advanced the Safety Ratchet past your threshold. Roll back the adapter via POST /v1/guardians/:id/rollback.

My MCP tool is returning Schema validation errors. The per-tool Guardian validates against the schema you registered. If the LLM is consistently producing slightly off-schema arguments, retrain the Guardian via POST /v1/training/retrain — the Teleological Data Generator will pick up the new patterns.

I don't see my events in the SIEM. Three things, in order:

  1. Check the sink config: GET /v1/observability/sinks — look for the last_ship_at and last_error fields.
  2. Verify the audit chain: GET /v1/public-verify/anchor should return a valid Merkle anchor for the time window in question.
  3. Check the destination's quota / index settings.

Errors

CodeMeaningWhat to do
unauthorizedBearer token invalid or expiredRotate the key; check it's tk_test_… for sandbox or tk_live_… for prod.
guardian_not_foundThe Guardian name does not exist for this tenantList available: GET /v1/guardians.
guardian_blockedOutput blocked by Guardian decisionPull the receipt to see the reason. This is not an error in the platform — it's a policy decision.
policy_finalization_pendingThe Guardian is still trainingPoll GET /v1/finalization-pipelines/:id until status is ready.
route_breaker_openL4 breaker is open on this routeInspect with GET /v1/governance/state; close manually or wait for cool-down.
economic_session_trippedL3 breaker tripped on a sessionReset with operator approval; consider raising the per-session ceiling.
nhi_suspendedThe NHI making the request is L2-suspendedLift the suspension if intentional; otherwise investigate why the NHI was suspended.
org_blockedL1 org-wide block appliesInspect the block list at GET /v1/governance/state.
emergency_shutdownL0 fleet shutdown is activeOut-of-band restoration is required.
rate_limitedPer-tenant rate limit hitBack off; see Retry-After header. See SLA & Limits.
idempotency_key_reusedThe same idempotency key was used with different payload bytesGenerate a fresh key; idempotency window is 24h.
provider_credential_invalidThe vaulted provider credential failed upstreamRe-vault it via POST /v1/provider-credentials.
policy_hash_driftThe retrieved policy hash differs from the active rubricReconcile via POST /v1/policies/:id/finalize — surfaces in Observability > RAG Telemetry.
imds_shield_blockedL6 IMDS shield blocked egress to a metadata endpointIf intentional, this is a policy bug — most legitimate workloads don't need IMDS. Investigate before raising the shield.