Agent Trust & Assurance / Agent Trust & Assurance ← The Life of a Uderia Agent

Administrator Operations Guide

Agent Trust & Assurance

This is the operations manual for the whole Agent Trust & Assurance stack. It is the single place an administrator comes to understand why the assurance capabilities exist, what each one is, and how to operate them together as one process — Grounding, Guardrails, Evaluation, Observability/Ops, the Ontology and its Governance, the Trust Membrane, Agent Authority, and Data-Product Governance.

This document is self-contained in its Why, What, and How. You can read it end to end and fully understand the mission, every capability, and how to operate the whole process — without opening anything else. The architecture documents linked throughout are optional deeper reading on internals (data models, code seams); they are never required to understand what a capability is, why it exists, or how to run it. If you administer a production Uderia deployment, this is your runbook.

Version: last updated 18 July 2026. This manual tracks a fast-moving platform; verify capability status against the linked architecture and roadmap documents for anything time-sensitive.


Part 1 — WHY: the mission

1.1 The trust problem

An LLM agent is powerful and, by default, untrustworthy for enterprise use. Left ungoverned it will:

Enterprises cannot deploy what they cannot trust. Every one of these is a trust failure, not a security failure — the platform can be perfectly secure and still produce a confidently wrong, out-of-scope, unattributable answer.

1.2 The mission

Make agents trusted. Turn an AI agent from an opaque generator into a grounded, guarded, measured, attributable, and verifiable participant in the enterprise — without sacrificing the openness that makes the platform useful.

Trust is not one feature. It is a stack of independent, composable layers, each closing one failure mode, each safe to run on its own, and each strongest when run together.

1.3 The two pillars — and where this manual sits

Uderia separates two concerns that are often conflated:

Pillar Question it answers Covered by
Platform Security Is the platform itself secure? (authN/Z, secrets, encryption, audit) SECURITY_ARCHITECTURE.md
Agent Trust & Assurance Is the AI's behaviour truthful, in-scope, safe, attributable, and verifiably good? This manual

Security keeps the doors locked. Assurance makes the thing inside the doors trustworthy. Both map onto external frameworks (EU AI Act, NIST AI RMF, GDPR) — see §5.

1.4 The design principles (why the stack behaves the way it does)

Every capability in this manual was built to the same principles. Knowing them tells you how the whole system will behave under your hand:

  1. Safe by default. Every capability ships off, or observe-only. A fresh deployment behaves exactly like an ungoverned one until you turn something on. You are never surprised; you opt into rigor deliberately.
  2. Show, don't block (for sharing). Trust is visible and verifiable, and by default it informs rather than blocks. Sharing stays open; enforcement is a choice you make.
  3. When in doubt, refuse (for enforcement). Where a capability does enforce (grounding, guardrails, agent-identity limits), any internal error denies — it never quietly permits.
  4. Applies to every kind of agent. Assurance works the same for all five kinds of agent (Ideate, Focus, Optimize, Coordinate, Conversation) — not just the tool-using ones.
  5. Trust ≠ access. A checked thing is not an authorised one. Signing proves an agent and its parts are intact and unchanged; it grants no permissions. Authority is a separate concern (Agent Authority).
  6. Defence in layers. No single control is the whole answer. A turn passes through several independent checks; each catches what the others miss.
  7. Honest about limits. Where a capability is the attainable form of a larger goal, this manual says so plainly. (The long-standing example — Agent Authority limiting what an agent can do while limiting what data it can see stayed "the OBDA future" — has since closed: signed data products shipped Aug 2026, and a surface-only agent's data authority is now literally the set of signed products on its surface. See §2.12.)

Part 2 — WHAT: the assurance stack

2.0 The trust lifecycle of a single turn

The capabilities are not a menu — they are a pipeline. One agent turn passes through them in order, and that ordering is the assurance process:

                    ┌─────────────────────── one agent turn ───────────────────────┐
  user / trigger →  │ ① INBOUND GUARDRAIL  → ② IDENTITY (who is acting, scope set)   │
                    │        → ③ GROUNDING trusted-scope stamped                     │
                    │        → engine runs: every tool call ④ IDENTITY-ENFORCED       │
                    │        → answer drafted                                         │
                    │        → ⑤ OUTBOUND GUARD (personal data/toxicity) → ⑥ GROUNDING │
                    │        → ⑦ EVAL scores the turn → ⑧ PROVENANCE sealed (signed)  │  → answer
                    └───────────────────────────────────────────────────────────────┘
        everything grounds on ⓪ THE ONTOLOGY;  the agent + its ingredients carry a ⑨ TRUST BADGE;
        the whole flow is watched in ⑩ OBSERVABILITY (Agents / Sessions lenses)

Each numbered stage is a capability below. Read Part 2 to know what each is; read Part 3 to know how to operate them.

2.1 ⓪ The Ontology — the knowledge foundation

Everything trustworthy an agent says is anchored to a knowledge model of your business — the ontology. It captures both the business view (the entities that matter and their attributes) and how that maps to the real data (the tables and columns behind them), plus business concepts, metrics, and domain terms.

2.2 ③⑥ Grounding — anti-hallucination, enforced

Grounding checks every answer against the knowledge the agent was actually given, and can pass · annotate · block confident-but-wrong drift. It closes the failure mode in §1.1.

2.3 ①⑤ Guardrails — protection on both edges

Fast, free protection at both ends of the conversation (it adds no cost — no extra model call):

2.4 ②④ Agent Authority — the agent as a governed principal

When an agent acts on its own — a coordinator's expert, a scheduled task, a step in a flow, a call from another system — it takes on a limited identity derived from its owner: a strict subset of what the owner could do. Every attempted action is checked against that limit before it happens (and refused if it fails, safely), and every such action is recorded as done by the agent, not the person who owns it.

2.5 ⑦ Evaluation — measuring every turn

Every turn is measured, for all five kinds of agent (not just the tool-using ones):

2.6 ⑩ Observability & Ops — the two lenses

Assurance you can watch. Two views onto the same tamper-evident record of what happened:

2.7 ⑨ The Trust Membrane — verifiable trust for agents & artefacts

A tamper-evident signed badge on every agent and every shareable thing, on one principle: an agent is trusted exactly when everything it is built from is — its knowledge model and every skill, extension, and repository it uses must each be signed.

Every kind of thing that can be exposed — what gets signed, and what "trusted" means for it. Anything that can be shared (published to the marketplace) or built into an agent can be signed. There are ten kinds, and sign-off runs the right check for that kind — so "trusted" is transparent and means something specific each time (a signed skill was screened for hidden instructions; a signed extension had its code inspected for unsafe actions; a signed knowledge model was checked for validity). This table is the whole surface — nothing exposable is left uncovered:

# Kind of artefact What gets signed What "trusted" checks
1 Ontology (knowledge model) the business model itself Validity — checked against the correct shape of an ontology; an invalid one cannot be signed, a partial one can be signed with a noted caveat
2 Skill the skill's written instructions Content safety — screened for hidden / manipulative instructions
3 Extension the extension's package and code Code + content safety — the code is inspected for unsafe actions; the text screened for hidden instructions
4 Knowledge repository its documents Integrity + content safety — the documents are intact and unchanged, and screened for unsafe content
5 Planner repository its saved query patterns Integrity + query + content safety — the patterns are intact, and their queries and text are checked for unsafe statements
6 Flow the flow's steps and logic Logic + query + content safety — the step logic, any embedded queries, and step text are checked
7 Dashboard its tiles and their queries Query + content safety — the tile queries, and the request that generated them, are checked
8 Canvas its content and blocks Display + content safety — the rendered content is checked for unsafe markup, and its text screened
9 Agent its whole make-up — its knowledge model and every skill it uses Everything together — trusted only when every part is trusted; this is the one badge a consumer reads
10 Agent pack its whole bundle — the agents and knowledge it packages Everything together — trusted only when every packaged part matches what was signed

Kinds 1–8 are individual things (signed on their own content); kinds 9–10 are bundles (signed only when all their parts are). Every check returns a plain verdict — clean (ready to sign), caveat (sign, with a note), or blocked (fix it first) — so sign-off is never a rubber stamp: it tells you exactly what, if anything, is wrong. A shared copy shows 🟢 only if it is an exact, unmodified copy of what was signed — which is why trust survives the marketplace: publish it, and whoever installs, subscribes to, or forks it sees the same honest badge.

2.8 Governance of products — ontology, packs, metrics

Trust's governance face — turning knowledge assets into governed data products with a release lifecycle:

2.9 Operational trust — consumption & cost

An agent you cannot bound is not operationally trustworthy. Per-user consumption limits (requests per hour, usage per month, configuration changes) and consumption tiers (Free / Pro / Enterprise / Unlimited) stop runaway cost; when a limit is reached, the request is refused rather than quietly allowed. Configured under Administration → App Config → Security. (Full detail lives with the platform-security pillar — noted here so the assurance stack is complete.)

2.10 Every trust process at a glance

Every trust-related process in one view — what value it delivers, how the process runs in plain terms, where you operate it, and how you see it working. Nothing in the stack is a black box.

Trust process The value (what it protects) How the process runs Where you operate it How you see it working
Grounding answers stay inside the knowledge you gave the agent — no confident-but-wrong flags any answer reaching outside declared scope; a second opinion confirms real drift; passes honest "not in my scope" refusals; can annotate or withhold master switch + per-profile mode a grounding note on the turn: pass / annotate / block
Incoming guard a hidden instruction in a document can't hijack the agent the incoming request is screened before the agent reads it; a hostile one is refused overall switch (default posture) a refusal turn; a guardrail note listing what was caught
Outgoing guard no personal data or toxic content leaves the agent the drafted answer is screened; personal data is masked, toxic answers withheld overall switch + per-agent mode a guardrail note with the categories found (labels only)
Agent authority an agent acting on its own can't exceed the authority you gave it, and every such action is attributable when an agent runs unattended it takes on a limited version of its owner; each attempted action is checked against that limit before it happens per-profile Agent Authority card actions marked as done by the agent; blocked attempts recorded
Evaluation quality is measured, so decline is visible before users complain every turn is scored the moment it finishes; a sample is also judged by an independent model. Deterministic scoring is free; the independent-model judging is a real model call whose tokens are metered against your consumption exactly like a normal turn (visible in the live counters and the turn's cost) on/off + judge sampling the Quality card on every turn; the Agents roster
Governed-data lane you can tell whether an answer's figures came from a governed data product or the agent free-forming its own query every data operation is tagged governed (a product/metric compiled to correct SQL — including the agent executing a compiled statement verbatim), free-formed (raw SQL the agent wrote), or confined (every raw attempt was denied by the data surface — nothing executed, which reads as the protection working, never as a failure); every governed consumption also seals a receipt into the turn's signed record the OBDA_ENABLED master switch (App Config → Trust, default off); rewarded by evaluation the Governed Data Operations note on the turn · the Data products row in the answer capsule (product · version · trust · rows) · a governed-data-ratio on the Quality card
Signed data products a business question has a signed answer path: the same request always compiles to the same governed SQL and the same rows — machine-proven before signing, probed against the live database declare a product on the ontology (entities, the only joins allowed, measures) → the V1–V7 gate proves it deterministic (live probes catch a wrong cardinality or phantom column) → sign → optionally confine an agent to its products (surface-only) → every consumption is receipted the ontology's Products dialog (Designer) + the profile editor's Data surface card + the OBDA_ENABLED master product trust chips (🟢/🟠/⚪) in the Designer · the capsule's Data products receipt · a surface_breach inbox item if the confinement ever leaks
Provenance an unforgeable record of what actually happened, verifiable later every turn is sealed into a tamper-evident record always on the trajectory trace on any past turn
Trust sign-off you know an agent and everything it's built from was checked and is unchanged each artefact is validated for its class, then signed; an agent is signed only when all its parts are. An agent's seal covers its parts and its safety posture — the grounding, guardrail and honesty modes that decide what it will and will not say — so weakening a gate flips the badge to 🟠 and calls for a deliberate re-sign. Agent authority is deliberately not sealed: it is deployment-bound access, legitimately different per owner (trust ≠ access), and is protected by fail-closed enforcement plus audit instead. Signing also states whether the posture actually acts: clean when at least one gate enforces, partial when every gate is observe-only — signing is never refused for an unhardened agent, it is only labelled honestly each artefact's trust badge 🟢 / 🟠 / ⚪ badges; the agent shield; the posture band on the sign-off dialog
Posture portability a hardened agent stays hardened when you ship it, and a republish cannot quietly un-harden it an agent pack carries the full trust posture (grounding / guardrail / honesty / authority) with the agent instead of leaving it behind at the platform defaults. On a re-import, a manifest that would REDUCE an existing profile's protection is refused (posture_downgrade) unless explicitly allowed; a block the manifest omits always preserves what you already have POST /v1/agent-packs/importallow_posture_downgrade; dry-run reports it first the refusal naming each weakened setting; the dry-run change plan
Trust verify anyone can independently confirm a shared thing is genuine re-checking the signature against the published content the badge, or on hand-off a verified / not-verified result, checkable even offline
Ontology governance the shared knowledge model is valid and versioned, not ad-hoc check validity, then walk it through draft → release → retire, with optional approval the ontology's Govern dialog + admin policy validity report + lifecycle badges
Pack governance a distributed agent bundle is approved, trusted, and service-rated the same lifecycle for a pack, with a service tier and a "must be trusted to publish" gate the pack's Govern dialog + admin policy lifecycle stepper, trust hero, SLA pills
Consumption no agent can run up unbounded cost usage is metered against per-user limits and refused past them admin security settings quota state; refusals when exceeded
Honesty check a confident "that doesn't exist" built on failed queries never reaches the user unflagged when an answer asserts non-existence and every data query that turn actually errored, the claim is flagged (or, in enforce, rewritten to an honest retrieval-failure); a legitimate empty result is never touched per-profile honesty mode an honesty note on the turn
Grain-substitution disclosure an answer computed at a coarser grain than the question asked never presents itself as the asked answer two deterministic triggers (0 tokens): a data product REFUSED a member and the agent answered at a coarser admissible grain without saying so (precise); or a ranking question names a product entity while the answer was grouped by none of that entity's asked dimensions (a narrow heuristic — it also catches the plan-time substitution that produces no REJECT at all). In annotate/enforce the gate appends a disclosure naming the substitution — never a replacement, never parked: the figure itself is correct governed data; only the framing was dishonest. Optionally, the heuristic is confirmed by the Grain Faithfulness LLM judge before acting (honestyConfig.grainJudge, off by default — a judge PASS withdraws the verdict, recorded; unavailable keeps the deterministic append). An answer that already names the limit is left untouched. The rendered product contract also states the rule at plan time per-profile honesty mode + the Honesty card's "Confirm with the Grain Faithfulness judge" toggle the appended Note: in the answer; the Honesty card reading "grain substitution disclosed" / "judge ruled faithful — verdict withdrawn"
Master-switch honesty in the profile editor a profile control whose platform master switch is OFF says so — and one whose machinery keeps running is never falsely marked every gated card in the profile editor reads the deployment masters and marks itself: deactivated — master off (chip + banner + greyed, still editable — configure ahead of enablement) on the cards whose runtime genuinely short-circuits on the master (Grounding, both Guardrail cards, Judges, Smart Next Steps); the OBDA data surface is deactivated with them — OBDA is additive (charter #15): with the master off the platform behaves as if OBDA were not installed (no contracts reach the planner, query_product refuses, the surface does not confine — gated once at the authority parse seam, so every consumer inherits). Cards with no master (Honesty incl. the grain judge, the non-surface authority controls) are never marked the admin masters under Administration → App Config → Trust (and Features for Smart Next Steps) the "deactivated — master off" chip on a collapsed card; the banner naming where to activate; the surface block's observability note
Preflight schema grounding a hallucinated database name is caught before the query runs a SQL call's database references are validated against the authoritative catalog cached in the session; a provably-absent reference is logged (observe) or short-circuited into deterministic recovery (enforce) global preflight mode preflight log lines; recovered turns
Behavioral trust a signed-but-misbehaving agent cannot keep reading as fully trusted every agent's recent conduct (recency-weighted pass rate + trust-critical checks, volume-gated, stale-decayed) fuses with its integrity badge into one composite state: Provisional / At-risk / Watch / Proven / Trusted; integrity can only cap the state, never promote it Config → App Config (trust_behavior block) the ring around the seal on the Agents roster; the Trust Posture matrix
Circuit breaker sustained bad conduct triggers a response instead of waiting for the weekly review when an agent's trailing record enters At-risk (its trust budget is exhausted), the owner is alerted — and in freeze_autonomy mode the agent's unattended use is suspended (Agent Authority) until a human reviews; interactive use is never touched trust_behavior.breaker_mode (off / notify / freeze_autonomy) the breaker alert; the frozen flag on the Agent Authority card
Policy backtest the observe → enforce climb is decided on evidence, not anxiety a proposed grounding/guardrail policy is replayed over your recent persisted turns — deterministically, at zero token cost — showing exactly what it would have done (masked, refused, escalated) with the affected turns listed Agents → Trust Posture → Policy backtest counts + per-turn samples; "nothing would change" is an explicit result
Memory firewall a planted instruction can't become a persistent compromise via Agent Memory every memory write (explicit, learned, or manual) is screened for injection patterns; a match is stored quarantined — preserved and inspectable, never recalled rides the overall guardrails switch the paused item in the Memory manager; a firewall log line
Retrieval firewall a poisoned document can't steer the agent through retrieval every retrieved knowledge chunk is screened; a match is defused — kept (never silently dropped) but explicitly labelled untrusted data the model must not follow rides the overall guardrails switch the firewall label in the context; a log line
Tool-result firewall a poisoned tool output — a database row, or a web page / browser / files / Google / Slack result that says "ignore all previous instructions" — can't hijack the agent every tool output is screened for injection through one shared entry, covering the database-tool path, the connector/web path (the highest-risk indirect-injection lane), and the ReAct engine (whose output re-enters context directly); observe-only (the result is never altered), surfaced to the Assurance Inbox rides the overall guardrails switch a tool_result_injection item in the Assurance Inbox; a log line
Trust-aware routing a coordinator only consults experts you have actually signed with requireTrustedExperts on a coordinator, routing excludes any expert whose badge is not 🟢 (fail-closed per expert); if none qualify the turn refuses with the exact blockers listed coordinator profile genieConfig.requireTrustedExperts excluded experts in the log; an honest refusal when none qualify
Answer receipts the answer's consumer can see — and export — why to trust it every assistant answer carries a "Why trust this answer?" capsule: the turn's trust journey, scope, data lane, guard findings (labels only), and provenance seal, exportable as a portable JSON receipt containing the Ed25519-signed chain always available under each answer the capsule; the downloaded receipt
Assurance inbox trust incidents are worked items, not dashboard archaeology three item classes, one rule each: approvals (a review-mode gate parked a withheld original — you decide), incidents (a protection acted: breaker trips, quarantines, injection catches, judge condemnations, every acting gate outcome derived from the trace, the session sentinel, and per-agent station shortfalls when a segment's rate goes red) — all ack-able, derived observations included; receipts (records of your own acts — never counted). Each row wears a severity dot (red/amber/muted) + the severity word + its station chip, and the list filters by agent (one pill per agent with items, IFOC-coloured) and by severity (everything / needs you now / worth a look / for the record); Approve all shown / Uphold all shown bulk-disposition exactly the filtered view — release into the conversation is deliberately never bulkable. Severity behaviour comes from ONE construct; each station carries an admin-assigned reporting level (everything / warning+ / danger only — danger always surfaces, and below-level items stay recorded behind "recorded below the reporting level") Agents view → Assurance Inbox; reporting levels: Admin → App Config → Trust (per station block) the item list; the badge (approvals + unacknowledged, level-filtered); open items folding into the ring segments' colour
Session sentinel a multi-turn probing campaign the per-turn guards each miss is caught across one session, injection-flagged inbound requests are counted; crossing a threshold surfaces one session-level danger item always on (derived) a session-sentinel item in the inbox
Resilience self-test the deterministic guards' recall is measured, not assumed a curated attack corpus is run straight through the real injection/PII/toxicity detectors; per-category recall + benign false-positive rate + a headline score are reported (0 tokens, no live model) Agents → Trust Posture → Run resilience self-test the recall chips + score
Audit pack an auditor gets a portable, verifiable evidence bundle posture + eval aggregates + incidents + the resilience test + a compliance-control map (EU AI Act / NIST AI RMF / GDPR), Ed25519-signed with the deployment provenance key Agents → Trust Posture → Export audit pack the downloaded, offline-verifiable file
Human review (HITL) a human dispositions withheld answers — nothing lost, nothing silently delivered the review mode (all four answer gates: grounding incl. the corpus family, inbound guardrail, outbound guardrail, honesty) = enforce with retention: the answer is withheld/redacted exactly as enforce, but the original is parked in the review queue; the owner approves or upholds. Release is append-only — delivered history is never rewritten. Two release scopes: Approve (record only — the original becomes readable from the turn's "Why trust this answer?" capsule, labelled released after human review) and Approve + release (the owner explicitly releases the original into the conversation: subsequent turns receive it via the review_release context module, clearly labelled as a human decision, and its exact PII values join a session-scoped outbound allowlist so the agent can state what was released — forward-only, the sealed turn is never rewritten). Either way the owner is notified and the choice is a recorded trust event. Distinct from the recovery ledger: under plain Enforce a full withholding retains its original as a retained entry — recoverable from the inbox's collapsed "recoverable originals" section, but never owed, never counted, and no oversight claimed per gate: Enforce + ☑ keep withheld originals in the Assurance Inbox for my review (stores the composite mode review; Grounding / Guardrails / Honesty cards); release scope chosen per item at decision time pending items in the Assurance Inbox (Approve / Approve + release / Uphold); the decision + release scope on the turn's trace; the released original in the answer capsule; released content visible in the context-window snapshot of subsequent turns
RAG grounding (corpus family) answers grounded in retrieved knowledge don't assert unsupported specifics the grounding gate's second trigger family: unsupported numbers / verbatim quotes / identifiers vs the retrieved chunks, with a second-chance targeted retrieval before anything is flagged; escalation to the groundedness judge; same posture model (Observe/Enforce, each with its property checkbox — disclosure stores annotate, retention stores review) groundingConfig.mode (+ optional .corpus.mode) the Grounding Gate card's corpus rows (unsupported claims named verbatim, second-chance cleared); dotted-underline marks on the unsupported spans in the answer itself (annotate)
Retrieval-sufficiency honesty weak retrieval never becomes a confident specific answer the honesty gate's RAG branch: retrieval ran, found (near-)nothing, yet the answer asserts specifics → flag / honest "the knowledge base does not cover this" (enforce); opt-in per-profile sufficiencyThreshold honestyConfig.mode the Honesty card's "not covered — honest refusal" wording
Ingest firewall + earned corpus signature documents are screened at ingest; the corpus signature attests screened, not just unchanged every ingestion path screens for injection / PII categories / exfil URLs (observe-only — never blocks an upload); signing then REQUIRES 100% screening and resolved critical findings (quarantine or an acknowledged reason — a recorded human judgement frozen into the signature) guardrails master switch the Corpus Health panel in the repository inspection modal (coverage, PII manifest, findings, quarantine); the sign-off verdict wording
Document quarantine a poisoned document can be excluded from retrieval in one click, reversibly retrieval_defuse/ingest/anomaly inbox events carry the doc ref → Quarantine doc; excluded at the shared retrieval seam, still visible in the manager, reversible; flips the corpus signature until re-signed owner action the Assurance Inbox action; Corpus Health quarantine list
Suspicious-chunk browser a document-level finding can be traced to the exact chunks that trip the detectors the repository Inspect view's chunk browser screens every displayed chunk live with the SAME detectors as the ingest firewall and stamps flagged chunks with problem tags (injection label · pii:<category> ×n · exfil_url); a Suspicious only toggle filters the whole corpus to its flagged chunks; Export findings downloads them (tags + full text) as a JSON report guardrails master switch (controls the whole screening surface) the Inspect view chunk table (tags + severity edge marker), the chunk detail window's Screening row
Exfil-URL guard a poisoned chunk can't exfiltrate via a rendered link outbound category exfil_url: novel AND exfil-shaped URLs (parameters / data-URI / IP host / userinfo) are defanged in enforce — text preserved, link dead, never silently deleted guardrailConfig.outbound (+ .exfil boolean) the Guardrail card's findings (defanged form only)
Source provenance every answer shows where its knowledge came from and how trustworthy the source is retrieved chunks carry the corpus integrity-signature state (🟢/🟠/⚪ — a SOURCE guarantee, never a consumption guarantee), CDC staleness ("verified N d ago" / "sync off"), and sensitivity always-on (read-side) the answer capsule's Sources row; retrieval events
Sensitivity levels confidential repositories are governed per agent per-collection sensitivity (public/internal/confidential); per-agent knowledgeConfig.maxSensitivity retrieval ceiling; answers drawing on a confidential repo carry a themed annotation collection PATCH + profile config the sensitivity note under the answer; capsule source chips
Retrieval-anomaly monitoring an index-poisoning "hub" document is detectable statistically per-doc retrieval frequency × query diversity over persisted turns (honestly labelled statistical detection; never auto-quarantine) on-demand (Trust Posture) "Scan retrieval patterns"; flagged hubs in the Assurance Inbox with one-click quarantine
Corpus red-team lane the retrieval firewall + outbound guard are proven end-to-end with REAL planted documents live probes plant payload docs in a caller-designated TEST collection, ask the retrieving question, score deterministically, and delete the payloads (cleanup status reported) opt-in per run the live-probe row's corpus input + cleanup status

2.11 The closed trust loop — how the new layers compose

The stack above no longer just measures and reports — it closes the loop:

  1. Every turn renders its Trust Journey (the §2.0 pipeline as a live strip in the turn's trace) and offers the consumer an answer receipt.
  2. Every agent's measured conduct feeds its behavioral trust state; the seal (integrity) and the ring (conduct) are one glyph on the roster.
  3. Exhausting the trust budget trips the circuit breaker — alerting, and optionally freezing autonomy, instead of waiting for a human to notice.
  4. Before tightening any policy, the backtest replays it over sealed history so enforcement decisions are made on evidence.
  5. The three firewalls (memory, retrieval, tool-result — the last covering the connector/web lane and the ReAct engine) close the indirect-injection paths the edge guardrails cannot see; trust-aware routing makes compositional trust operative at coordination time, not just visible on a badge.

Nothing in this loop weakens the founding principles: everything ships off or observe-only, every enforcement fails closed, every action is attributable and visible, and computing any of it costs zero tokens.


2.12 Signed data products — determinism you can verify

The newest layer (Aug 2026) goes one level deeper than everything above: instead of observing, grading, or enforcing what an agent says, it constrains what an agent can even reach — and hands the reader a sealed receipt for every number that crossed the boundary. Full architecture: OBDA_ARCHITECTURE.md; the visual story: The Anatomy of a Signed Data Product on the trust site.

Reading the Products dialog (the gold Products button on an ontology's card — rendered only when the OBDA_ENABLED master is on):

Reading a consumption. A governed answer's capsule ("Why trust this answer?") carries a Data products row — fitness_sales v1 · trusted · 32 rows — with the request hash, compiled-SQL hash and the seal note one hover away. The receipt is sealed into the turn's Ed25519 chain (step type obda.consumption) and rides the existing Export receipt, verifiable offline. The Governed-Data note's lane reads governed (all operations through products), free-form/mixed (the agent wrote raw SQL), or confined — every raw attempt was denied by the data surface and nothing executed: that is the protection working, and it reads as a pass at GROUNDED, never as a failure.

Confining an agent. The profile editor's Trust section carries the Data surface card: list the products, then either Surface-only (raw SQL denied fail-closed; only 🟢 products served; the one exception is the statement the surface itself compiled this turn, executed verbatim) or Advisory (nothing denied; violations observed and scored — the development mode). If a surface-only agent ever executes free-formed SQL, a danger surface_breach item lands in the Assurance Inbox — "a hole report, not agent misbehaviour" — because the structural confinement should have made that impossible.

The knowledge twin. The Knowledge card's Signed knowledge only toggle (requireSignedKnowledge) is the same posture for the other modality: only collections whose integrity signature is signed-and-intact back this agent's answers. If the trust suite is physically absent it fails open with a loud warning rather than silently emptying the knowledge lane.

Composition. A product built from signed products signs with its members' attested hashes inside its own signature (lineage). An unsigned member blocks the sign-off naming the member; a re-signed parent flips the composed child 🟠 until it is re-signed (and a parent shape change forces re-validation first).

Part 3 — HOW: operating the assurance process

This is the runbook. It assumes an admin-tier account.

3.0 Reading the Trust Circle

Where: Trust → Trust Circle. Pick an agent from the star at the centre, or leave it on the whole estate.

The ring is eight live readings of one agent (or the estate), arranged as the loop the assurance stack actually runs: configuration → behaviour → judgement → back to configuration. It is not an illustration; every station reads from the same records the REST API serves.

"The estate" always means your estate. Even in admin system scope — where the Sessions and Agents lenses can span every user — the ring restricts its execution readings to your own agents before any station reads them, because its configuration side (your profiles) and SIGNED (your attestations) can only ever describe yours. Both attributes of a reading describe one subject; 4/12 pairing your four profiles against twelve agents belonging to everyone is the exact mixed-subject reading the two-attribute model forbids.

Each station shows two things

Under every station you see a pair:

review · 1/4
   │       └── execution: what actually happened in the scored window
   └────────── configuration: how the control is set

Those answer different questions, and both matter:

The pair is what makes drift visible. review · 1/4 means "configured to withhold a bad answer, but only 1 of 4 scored turns came through clean." Either number alone would mislead you.

One grammar, four channels (every trust ring in the product)

The same visual language holds on the Trust Circle, the per-answer assurance dial, the mini glyphs and the Assurance Inbox — each channel has exactly one job:

What the numbers mean is decided by altitude, not by surface: estate = worst-of x/y agents · agent = mode · windowed rate · per turn = events (nothing is a rate).

Colour and the inbox correlate — by construction

An open inbox item folds into its station's colour (a danger item ⇒ the segment reads red until you decide or acknowledge it), and a station red from a failing rate files one ack-able station-shortfall observation per agent — so a red segment always resolves to a worked item in the Assurance Inbox, and acting on the item releases the fold. An acknowledgment means seen, never fixed: the measured rate stays red until the turns improve.

Where the numbers come from — press the "?"

Pin a station (click it) and a ? appears beside the close control. It opens "How these figures are derived": the population the figure was measured over, how each attribute was computed, and — where quality scores contribute — the contributing dimensions as clickable chips that open the Assurance Guide, scoped to that station and showing each dimension's live status.

This is the answer to the most common question about the ring: the ring counts TURNS; the Quality card counts CHECKS. 12/18 on GROUNDED means twelve of eighteen scored turns were clean on its dimensions — it is not comparable to the Quality card's "24 checks", which grades the one turn you are looking at.

Every check is counted at JUDGED. The other seven stations report what their machinery did. These are two different questions asked at two different moments. A guarantee station answers what ran during the turn — a gate that escalated, a guard that redacted, a boundary that denied a tool. A check answers how the finished answer graded, taken after it shipped by a scorer that changed nothing. So every check lands at JUDGED, whose whole subject is exactly that, and the seven guarantee stations read their own machinery alone.

The practical consequence: a red Grounding Overlap colours JUDGED, not GROUNDED. GROUNDED tells you what its four gates did; JUDGED tells you how the answer graded. Both are true, and reading them as one number was the confusion this change removed — a gate that did its job all turn could read red because a scorer graded the answer poorly afterwards, with nothing on screen saying which half had moved.

Each check still records which guarantee it is about — you see it as a chip on its Assurance Guide entry, and it is how you get from a poor score to the machinery that should have prevented it. That is a label for navigation; it is not where the check is counted.

The one place everything comes together is TRUSTED, the sole aggregate: a recency-weighted blend of the trust-critical checks with every remaining check, each counted exactly once, capped by integrity.

Inside JUDGED, the checks are grouped by the MOMENT they measure — Plan · Retrieve · Act · Compose · Deliver, plus The run (cost, latency, volume, termination) and Flow run for flow-agents. That is the process an agent actually runs, so a poor group points at a stage of the work rather than a category of metric.

What you can change, and what is fixed

Two things in the Assurance Guide look alike and are not equally under your control:

Configurable? Where
Which moment a check belongs to, and which guarantee it is about No — both derived in code a code change
A check's pass line — but only for deterministic ones Yes Administration → App Config → Trust → Quality bands — each slider sits under the moment it measures
A judge dimension's verdict No threshold exists — a model returns the verdict you can turn judges on/off and change how often they sample

Deterministic dimensions come in three shapes, and the Guide says which one you are looking at:

Shape What it means
Scored, with a pass line a number cut by a threshold you can set (Grounding Overlap, Cost, Latency…)
A yes/no check it either holds or it doesn't — no score, nothing to configure (Safety, Completed, Output Sanity…)
Informational reports a number for context and never convicts a turn — no pass/fail at all (Plan Execution, Efficiency, Context Health…)

The third is easy to mistake for the second. A dimension that never returns a verdict cannot fail a turn, so it never contributes to a station's clean count — it is there to be read, not to judge.

The Guide states this per dimension: open it (from a station's ? explainer, or "What do these mean?" on the roster) and each entry names its pass line, the exact admin key that moves it, or says plainly that there is nothing to set. The deterministic / LLM judge chip beside each name is the tell.

The Guide shows your CURRENT bands, not the shipped defaults. Each entry reads "Bands now: Healthy ≤ $0.30 · Danger > $0.60" for what is actually configured on this deployment, read live from the same settings the sliders write — so it stays right the moment you retune them, and the comparison direction follows the metric (/> where lower is better, /< where higher is better). A metric you have not tuned says not set — measured, but not banded; the one exception is Grounding Overlap, where the scorer still applies a code fallback of Danger < 50%, and the Guide names it rather than implying nothing convicts. Out of the box only two metrics ship banded (max_out_of_scope_dbs, max_tool_calls).

Two lenses — the whole record and the current leg

The ring reads through one of two lenses, toggled at the top-left of the stage (Whole record · This leg) — the speedometer model: the odometer never resets, the trip meter does.

What a reset is not: it deletes nothing. Every turn, verdict, incident and review stays on the whole record; the reset appends an audited marker (who, when, your reason, and the agent's signing state at that moment) that appears in the agent's Trust History and its story. While the leg lens is active, every scoped reading names its boundary ("since 30 Jul") and an amber leg chip rides the ring — a clean leg can never masquerade as a clean history.

The same leg is available on the Agent Roster: expand an agent and a This leg pill sits beside the runs filters (only when a leg exists) — it scopes the dimension bars, the work mix and the runs ledger together, each section carrying the "this leg · since …" chip.

What the lens never touches: configuration readings (SIGNED, BOUNDED, the modes), the behavioral badge, the circuit breaker, and the audit pack all keep reading the whole record — the lens is how you look at the agent, not how the platform judges it. Only your own agents can be reset, and an empty leg reads "empty, not clean".

Why a station can read dashed rather than amber

Some protections are opt-in, and a station that guards one asks "is anything owed?" before it asks for your attention:

Dashed means "nothing is owed" — never "we could not tell". Where the answer is uncertain the station reads amber, because an unnecessary amber is a smaller error than a dash hiding real exposure.

Where green ends and amber begins — configurable

A rate's colour comes from two floors: green at or above 0.80, amber at or above 0.50, red below. They are set once under Administration → App Config → Operations → Agent Evaluation → Quality bands, and every surface that colours a pass rate reads them — the roster bars, the Trust Circle's execution attribute, and the cross-agent KPI charts.

Raising the green floor turns currently-green agents amber immediately. It changes how quality is reported, never how a turn is scored or gated.

Only the numbers are configurable. Whether a gate acts (enforce/review can withhold an answer; observe/annotate only record) and worst-of aggregation across agents are properties of the system, not judgements about where a bar sits — a setting that let an observe-only gate read green, or turned worst-of into best-of, would manufacture exactly the false green this whole grammar exists to prevent.

Reading n= — why some dimensions have far fewer verdicts

A dimension's rate is only as strong as the number of turns it was decided on, and that number differs per dimension. The n= badge (on the roster bars and the explainer chips) is that denominator:

Badge Meaning
(none) decided on every scored turn — the rate is the whole window
n=11 grey decided on fewer turns than were scored (e.g. the dimension didn't apply to some)
0/1 (a fraction, not a %) ≤2 verdicts — a single verdict drives the whole number, so it is shown as a raw fraction and the bar is dimmed. At this sample size a percentage would be false precision: 0% and 100% are the only values one verdict can produce, and both read as confident rates. 0/1 cannot mislead

Colour is reserved for the rate's band and nothing else — a thin sample is marked by shape (the fraction form, the dimmed bar, a dashed chip edge), never by borrowing amber, which would put a perfectly healthy dimension under a warning tint. Every visual channel on a bar row is in that legend — colour (the band), the n= badge (its denominator), the fraction + dimming (thin evidence), the dashed judge marker (a model opined rather than a rule measuring). A channel that carries meaning but is not in the legend is a signal nobody can read; the grammar gate now asserts this.

Why judge dimensions have tiny denominators. Deterministic scoring is free and runs on every turn; the LLM-judge dimensions cost real tokens, so they are sampled (5% of turns by default, plus any anomalous turn). So Groundedness (RAG) 0% n=1 means "the one turn a judge looked at did not pass"not "this agent is ungrounded". Read an amber n= as "worth a look at that one turn", never as a rate. Raise the judge sample rate under Administration → App Config → Trust → Scoring & evidence if you want a denominator you can trust.

Seven stations read no checks at all and say so in their explainer — they report what their mechanisms did, which is a different thing and the point of the split. Only JUDGED reads checks. Where a station's machinery did nothing this turn, the side renders a dash: honest absence, never a zero.

When two checks of the same thing disagree. A few dimensions measure one property twice — Grounding Overlap counts literal word overlap, Groundedness reads meaning and refines it. Where both decided a turn, what you see is the pair's standing, not the worse of the two: if the coarse check flagged an answer and the judge cleared it, the station reads worth a look and tells you why — "N turns flagged by the coarse lexical check and cleared by the judge that refines it". That usually means the answer paraphrases heavily (benign) or the judge was lenient (worth a glance). The numbers themselves are never rewritten — the chip still shows what was measured; only what it contributes to the station changes. A failure both checks agree on is never softened.

Reading REVIEWED on a quiet turn. A gate in review mode that ran and found nothing reads "armed — nothing on this answer needed a human", not "not turned on": the protection is in force, it simply had nothing to park. And when a request is refused at the door — the inbound guard blocking an injection before any model sees it — every layer downstream reads a dash with the cause named ("the request was refused before the agent ran"), because there was no retrieval to screen, no answer to ground and nothing to seal. That is the best outcome the guard can produce, and it must not render as a screen full of gaps.

A means that side genuinely does not exist, not that it is broken or empty:

Reading Meaning
— · unsigned SIGNED has no setting to configure — signing is an act you perform
unscoped · — BOUNDED has no execution data — autonomous denials are not aggregated yet

When one agent is in focus, SIGNED shows the state wordunsigned, not attested here, attested, changed — not a ratio. Focused on a single agent, 0/1 is the scope size wearing a ratio's clothes: it reads identically for an agent that was never signed and for one whose only outstanding act is the local attestation. Estate scope keeps the ratio, where it is real.

Every station's two attributes describe the same subject. Focused on one agent, REVIEWED shows that agent's queue; the estate figure is still named in the hover so a focused zero can never be misread as "the inbox is empty."

The colour tells you where to look, not whether you passed

This is the most important thing to internalise. Station colour is a call to attention, not a verdict. It answers "does this need me, and how urgently?" — because with eight stations, the only decision you actually make is where to look next.

Colour Word What to do
Green quiet Nothing needs you. Hover to confirm if you want.
Amber worth a look One of the two attributes is short of its intent.
Red needs you now A real discrepancy was detected, or a rate is failing.
Dashed not turned on A protection that exists but is off, and nothing is owed. Hover to see what it would do.

Dashed always means nothing is waiting on you — never work you haven't done. SIGNED is the case where that matters: while nothing in your deployment has ever been signed, SIGNED reads dashed, because signing is opt-in and you have not opted in. The moment you sign your first agent, every unsigned agent turns amber — signing is now a practice here, so the rest are genuinely outstanding, and the hover says so: "sign-off is outstanding — this deployment signs agents and this one is not signed yet." The station becomes a to-do list exactly when it starts to mean something.

The colour is the worse of the two attributes, and the hover always tells you which one caused it — look for "needs you now because of execution". That distinction is the whole point: a design problem and an operating problem need opposite responses.

Two deliberate behaviours worth knowing:

SIGNED also changes shape, because two ambers can mean different work

Colour answers how urgently, so two states that need you equally are the same amber — correct, but it left two genuinely different jobs looking identical. SIGNED therefore carries a second signal in its shape: the same seal you already see on profile cards and marketplace listings.

Shape State What is owed
Shield with a check attested nothing
Shield, lower half dashed not attested here attest this deployment — it is publisher-signed and intact; what is missing is this instance recording its model, tools and connectors
Warning triangle changed re-sign — its make-up moved after sign-off
Dashed circle unsigned sign it (or nothing, if signing is not in use here)

The button follows the shape. An agent that is publisher-signed but unattested is offered "Attest this deployment" — not "Sign this agent", which would be an act that cannot help.

Only SIGNED does this. The other seven stations have no such vocabulary to borrow, and inventing one per station is exactly the drift this grammar exists to prevent.

The summary line saves you the scan

Above the ring: "1 needs you now — SCORED · 3 worth a look — GROUNDED, BOUNDED, TRUSTED." Read that first. You should never have to scan eight glyphs to find the two that matter.

The hover is the same four slots, every station

CONFIGURATION   review
EXECUTION       12 of 14 turns clean on safety checks
────────────────────────────────────────────────
WHY             quiet   enforce and review can redact or withhold an answer;
                        observe and annotate only record
EVIDENCE        2 of the last 14 scored turns tripped a guardrail

The Execution row carries a unit-bearing figure — N of M turns, never a bare 4/4 "dimensions" (the I4 fix: "dimensions" reads as the 14 scored dimensions when it actually counts turns; the code now emits "N of M turns clean on safety checks" and the gate asserts it).

The top pair is what it says — the two attributes, with the value first because that is what you came to read. The pair below the line is why it says that: which rule produced the colour, and which concrete instances are behind it. When the colour was pulled by one attribute rather than the other, the Why row names it — worth a look · execution means the configuration is fine and the measurement isn't.

Always read Evidence. It is mandatory precisely so that a comfortable-looking count can never hide a finding. The clearest example: REVIEWED can read 0 open (nothing is waiting on your decision) while Evidence names a danger-severity observation sitting in the Assurance Inbox — because derived observations are recomputed from the sealed trace and carry no disposition to dispose of. The count is honest; Evidence is where the finding lives.

Clicking a station

A single click pins the station: the reading stays on screen and the station's actions appear beside it — because acting on a reading must not cost you the reading. Which actions appear is derived from the state, so SIGNED offers Sign this agent when sign-off is owed, Attest this deployment when only the local half is missing, and Verify offline when it is already signed (§3.5). Blocking ingredients get their own route, so a refusal is never a dead end.

Navigation stays available alongside them, and the driver decides which route leads: a station amber because its execution fell short opens this agent's runs, while one amber because of its configuration opens the posture matrix. The other route stays beneath it — reordering routes is honest, removing one is not.

Dismiss a pinned station five ways: Esc, clicking it again, clicking outside it, the ✕, or pinning another. It is never a trap.

Estate scope

With no agent selected, each station aggregates across every agent — worst-of, so one laggard keeps the station amber. The value then reads as a ratio (2/10 · 4/6), and Evidence names the laggards so you know who to fix. A green estate station means every agent is clean, not that at least one is.

Contract and conventions behind these readings: TRUST_STATUS_COMMUNICATION.md

3.0a Reading a station's modules — what actually assessed this

A station panel names the mechanisms that ran ("1 withheld", "nothing acted"). That tells you what happened, not why — which module produced the finding the mechanism acted on, or what it measured. Each mechanism row expands to exactly that.

what you see what it means
3 modules, all quiet three modules assessed this turn; none found anything
1 of 3 found something one produced a finding — the row it belongs to carries a solid accent edge
1 module, none ran a module is bound, but it had no input this turn (dashed, dimmed)
nothing bound no module is assessing this property at all — never hidden, because "nothing is
watching this" is the reading that must not be invisible

Each row is property · module · what it found, with the module's own numbers beneath it (supported ratio 100%, 1 tool call). The property is the stable name on the left; the module is whatever is bound to it today — so after a remap the row shows the new module rather than a fossil of the old one's output. Clicking a row opens that property's entry in the Assurance Guide.

An abstention is not a pass. A module that could not run says so in words ("needs scope_databases, which this turn did not provide") and is drawn dashed — a turn with nothing to assess is a turn nobody checked, which is a different fact from a clean one.

How a module finding reaches the station colour. Through the mechanism, never around it:

assessor finding → mechanism reading → station colour (worst-of its mechanisms)

So a station goes amber because a mechanism read amber, and a mechanism reads amber because it folded a finding. The indirection is deliberate, not plumbing: the mechanism reading is the gate's own decision, which may legitimately differ from a raw finding. The clearest case is the grain heuristic — a module fires, the grain_faithfulness judge withdraws the verdict, and the reading is correctly a pass. If module findings coloured the ring directly, a withdrawn verdict would still light it up.

The failure mode to know about, because it has happened: a gate that assesses several branches (the honesty gate runs three — absence claims, retrieval sufficiency, and the library-provenance branch, which itself reports two kinds: a citation the turn never opened, and an identifier the library does not contain) must fold all of them into its one row. Reading only one branch's stamp produced a row saying "no unsupported absence claim" with a green dot, directly above its own module list saying "1 of 3 found something" — one mechanism, two answers, and a quiet station above both. A multi-branch mechanism reads worst-of its branches and names which one drove it, and still names the quiet ones, so you can tell checked and clean from not checked at all.

3.0b Reading the Assurance Guide's PROPERTIES

The Guide's other entries answer what does this measure and what does this control do. The Properties shelf answers the question underneath both: what is actually being assessed.

A property is the unit both lanes are about — a guarantee promises it, a control upholds it, a measurement grades it. Each entry states:

This is the surface a remapping UX will operate on. A property is permanent; which module assesses it is a binding, and bindings are data.

3.0c Reading the Agent Roster — three readings, not one

The roster's headline (44% live pass rate · 18 turns · 8 failed) answers one of the questions you can ask about an agent, and the words invite the others.

question answered by where it lives today
How well do its answers grade? measurements, after delivery the live pass rate
How often did a control have to act? mechanisms, in-path the intervention reading on the card · the acted mark and Acted filter on each run
What did the people using it think? the users' own votes user feedback — N up · M down · K disagree with the scorecard on the card · an upvoted/downvoted chip on each run

The third one is a preference, not a measurement, and the surface keeps it apart on purpose: a vote never moves the pass rate, a band, or a station colour (Rule 3bb.4). The line is absent entirely when nobody has voted — that is an honest absence, not a zero. In system scope you see no vote reading at all rather than someone else's zero.

Read the disagreement count first. It counts turns where the scorers and the person point in opposite directions — passed but downvoted, or failed but upvoted. That is the only signal in the platform where a human tells you the quality bands are wrong for this deployment; everything else is the platform grading itself. A rising disagreement count is your cue to revisit Config → Trust → Quality bands, not to discipline the agent. See §3.0d for what a vote actually changes.

The pass rate is the first one. A turn counts as failed when a check a rule measured landed in the danger band — unless the judge that refines it corrected that (the row then carries a judge-cleared mark saying why it is not a failure) — or a gate withheld the answer, so a withheld turn can never read clean. Amber flags but never convicts, and a judge alone never convicts: a model opined, no rule measured it.

Why it is not mechanism-driven. It would flatter the agent. On a real 18-turn sample, 16 turns had no mechanism act at all: an intervention-driven rate would have read 89% on an agent whose grounding measurements were the worst thing about it.

The two readings are close to independent. The same sample:

a mechanism acted  + measurements flagged :  0
a mechanism acted  + measurements clean   :  2      the system working
nothing acted      + measurements flagged :  5      <- look here first
nothing acted      + measurements clean   : 11

The third row is the one to act on: those answers were delivered, and the measurements say they were poorly grounded. No control caught them. That is the case for moving a gate from observe to enforce — and it is invisible in an intervention count, which reads 0 there.

The intervention reading. Beside the rate sits the mechanism axis — "2 of 18 answers altered or withheld · 2 parked for review". It answers what the rate cannot, and an agent nothing acted on says so plainly. A trailing "N turns where a guard did not run" means a control failed open on those turns: the honest reading is unknown, not pass, which is why it is shown here and not folded into the quality figure.

Reading a run row. Each row in the Runs Ledger carries a strip of marks — one per scored dimension, in station order, the same checks in the same columns on every row (a check that did not run on a turn appears dashed in its place), so a column can be read down the ledger. Three channels, none of them colour alone: fill is what the check found (solid passed · half worth a look · outlined failed · dashed did not run), shape is who measured it (square = a rule · diamond = a model), size is what the ruling could do (a larger diamond = a gate consulted that judge during the turn, so its verdict could withhold the answer; the plain diamond = sampled after it), and a centre dot means the rule measured a failure and the judge that refines it cleared the same answer. Hovering any mark says what that check found, not just what it is; the Key above the ledger draws all three.

Two chips appear only when they have something to say. withheld · parked, with a dot and — when something is owed — the accent colour, means a mechanism acted: what was delivered is not what the model wrote. The Acted filter isolates those turns, because which turns were altered is a different question from which scored badly. 1 judge flagged this appears when the scoring panel found a problem, and gate asked a judge · cleared when a gate consulted one mid-turn and did not act on it. A turn where every judge upheld carries no chip: the diamonds already say a judge ran and agreed.

Two words, two populations: a judge is one check asked once of the turn; its models are the panel voting inside it. So 1 judge flagged this counts checks, and 1/1 models counts panel members.

Reading the sparkline. One bar per turn, oldest → newest, driven by the same value as the rate — it is the rate's evidence, not a second signal. Pass is a full-height bar, fail is half-height, so you can read it without relying on colour. There is no amber bar: per turn the reading is binary, and amber lives on the rate (≥80% green, ≥50% amber, below red).

If a historical pass rate looks better than you remember, it is: turn failure is now resolved against the current gating policy rather than the value frozen onto the span when it was scored, so turns convicted by advisory-only checks under a retired rule no longer count. See the FAQ, §4.9.

3.0d What a vote actually changes

Rating an answer in the conversation panel is not a comment box. The rating reaches the mechanism behind that answer, and what it does depends on which engine produced it — hover either button and the tooltip tells you, for that agent, before you click.

The agent that answered Downvote Upvote
Optimize retires the plan behind the answer, so it stops guiding similar questions promotes it, so similar questions reuse it
Focus flags the documents that served the answer for review in the repository's Corpus Health records them as good sources for questions like this
Coordinate passes your rejection to the expert that produced the answer — where it lands in that agent's mechanism passes your approval the same way
Ideate / conversational stops facts the agent auto-learned from that answer being recalled nothing — an upvote is not a request to remember
Every agent recorded beside the quality scores as calibration evidence the same

Things worth knowing before you rely on it:

Full mechanism: FEEDBACK_SIGNAL_ARCHITECTURE.md.

3.1 The operating posture — a maturity ladder

Do not switch everything to enforce on day one. The stack is designed for a graduated rollout: observe → measure → tighten. Every capability starts safe (baseline), so you climb the ladder deliberately.

Stage Posture What you do
0 · Baseline everything off/observe Fresh install. Nothing changes agent behaviour.
1 · Illuminate turn on eval + set grounding/guardrails to observe You now measure quality, drift, and personal-data exposure without altering a single answer. Watch the Agents roster.
2 · Build the foundation build/curate the ontology; run its validity check Give grounding something true to check against; fix any validity issues it reports.
3 · Tighten where it matters move critical profiles to grounding enforce + guardrails enforce Enforce on the profiles that touch sensitive data or answer externally; leave exploratory profiles at observe.
4 · Govern & attest sign production agents and attest each deployment; release ontologies/packs via lifecycle; require approval Make trust visible and versioned. Signing vouches for what travels; attesting vouches for what this instance resolved to — both are needed before a badge goes green (§3.5).
5 · Constrain autonomy set Agent Authority scopes on autonomous profiles Scope scheduled tasks / genie experts / flows to a subset of their owner's authority.

You can stop at any rung; each is stable. Most production deployments live at stage 3–4.

3.2 The control map — where every switch lives

Capability Where you set it The choices Recommended default
Evaluation (scoring) Config → Operations → Agent Evaluation & Grounding on/off · include independent judging · how often to judge · the healthy/danger bands on, judging sampled
Grounding — overall the same card → Grounding Enforcement on/off on once the ontology is ready
Grounding — per agent Profile editor → Trust ConfigurationGrounding card (two segments: knowledge graph — what it may reference; knowledge repository — what it may claim) observe / annotate / review / enforce, per segment observe → enforce for data-facing agents
Guardrails — overall the same card → Guardrails on/off on
Agent posture — per agent Profile editor → Trust ConfigurationAgent posture card ONE hardening intent (postureConfig.mode) every gate inherits unless it overrides: Observe (☑ disclose = annotate) / Enforce (☑ keep for review = review). The card's live summary names, per gate, whether it inherits (and what it resolves to) or overrides — and GET /v1/profiles carries the same resolution as the computed posture field, source named, so no surface ever re-derives it set the agent default here; override per gate only where a surface genuinely differs
Guardrails — per agent Profile editor → Trust ConfigurationGuardrails card outgoing posture: Inherit / Observe (☑ disclose = annotate) / Enforce (☑ keep for review = review), for personal data and toxicity; incoming posture likewise enforce outgoing for anything external-facing
Judges — per agent Profile editor → Trust ConfigurationJudges card (the JUDGED station) inherit / on / off · sample-rate override · file condemnations in the Assurance Inbox inherit; judge high-stakes agents at 1.0
Judges — which models sit on the panel Config → LLMs → edit a configuration → Judging role whether this model may judge at all. On by default — switch it off for a model that is slow or unresponsive as a judge; it keeps answering exactly as before. One panel serves both layers, so one switch governs both: the judge a gate escalates to in flight (a ruling there can withhold an answer) and the panel that scores quality after the turn — plus Score this turn and the CLI leave on; exclude a model that never returns — the panel waits for every member on every judged turn, so one silent model sets the pace for the whole evaluation
Station reporting levels Admin → App Config → Trust (a selector on each station block) everything / warning+ / danger only — what each station surfaces in the inbox, badge and ring colour; danger always surfaces, and everything is always recorded warning+ (the default)
Agent Authority Profile editor → Trust ConfigurationAgent Authority card unattended on/off · read-only · tools it can't use · allowed connectors · spending cap · the Data surface — a three-option choice: Disable OBDA (default — no products reach the planner) · Surface Full (ONLY the listed products; raw SQL denied when unattended; advisory = its observe-only dev sub-toggle) · Products + regular paths (the listed products offered beside the ordinary KG paths — the model decides per question; the list is still the grant: an unlisted product is refused) unrestricted by default; scope any agent used unattended. An empty product list saves as Disable; with the OBDA_ENABLED master off the whole card is deactivated and no option acts
Governed data (OBDA) — overall Admin → App Config → TrustGoverned Data (OBDA) on/off — gates the whole family: the products REST + Designer, the lane scan + capsule receipt, the governed-data-ratio scorer off until you deploy a governed-metric layer; on when you adopt data products
Data products — per ontology the ontology card's gold Products button (Designer) author / edit the manifest · run the V1–V7 gate (Structural or Live per DB connection) · sign · delete validate LIVE before signing wherever a connection exists
Signed knowledge only — per agent Profile editor → Knowledge card → Signed knowledge only on/off (requireSignedKnowledge) — retrieval restricted to integrity-signed collections off; on for agents whose answers must be corpus-attributable
Assessment modules (which module assesses what) Admin → App Config → TrustAssessment modules rebind a property's module per lane · unbind (reads NOT ASSESSED) · restore the shipped default. Changes are staged and applied by Save Trust Settings, each as its own audited act leave at the shipped defaults unless a pack gives you a genuine alternative
Third-party control posture the same card, What acts on it off / observe / annotate / enforce / review — the one act that lets a pack's machinery act at all observe (where it arrives); raise deliberately
Trust sign-off each thing's trust badge (skills, extensions, knowledge models, repositories, packs) + the shield on the agents list + the SIGNED station on the Trust Circle (pin it; the act offered is the act that is owed) sign · re-sign · attest this deployment · verify sign your production agents, then attest each deployment
Ontology Governance Config → Features → System Feature AvailabilityOntology Governance require approval · who may approve · block invalid ontologies from release off by default
Agent Pack Governance Config → Features → System Feature AvailabilityAgent Pack Governance require approval · require trust to publish off by default
Consumption / cost Administration → App Config → Security per-user limits · consumption tiers disabled for single-user
Behavioral trust admin app-config trust_behavior block (API; UI card planned) enabled · evidence window · state floors · staleness off (compute-on-read; ring hidden until enabled)
Circuit breaker trust_behavior.breaker_mode off / notify / freeze_autonomy off
Policy backtest Agents → Trust Posture → Policy backtest grounding / outbound / inbound modes to simulate on demand (read-only, 0 tokens)
Memory + retrieval firewalls ride the overall Guardrails switch inherit guardrails master (off = baseline)
Trust-aware routing coordinator profile genieConfig.requireTrustedExperts true / false false

3.2a Third-party controls — what you are agreeing to when you raise one

A pack can ship a control: machinery that withholds, alters or annotates a live answer. Three things are true of every one of them, and they are what make raising one a decision you can make safely.

It arrives dormant. A third-party control installs at observe. It records what it would have done and changes nothing until you raise it here. Installing a pack can never, by itself, withhold an answer — so you can run a new pack for a week and read what it would have caught before giving it any power.

The act is the platform's, not the pack's. The pack chooses when to act and which act from a closed set (withhold · alter · annotate). Uderia performs it, and the posture ladder, the parking, the retention, the audit event and the reading on the Trust Circle are identical however the finding arrived. A pack cannot ship "always withhold, whatever the operator set": it declares what it wants at enforce, and every weaker posture is derived by the platform.

It cannot act unless its pack is signed and bound. A control only ever sees findings from a module you have assigned, and assigning requires a signature. An unsigned pack's control is inert at any posture — you do not have to remember this, it is structural.

Two things to know when you set one:

Platform gates behave differently on one point: their posture is per agent (the profile editor's Trust Configuration), not deployment-wide, so their rows here name where their mode is set rather than offering a switch.

Where the per-agent cards live: the profile editor has a dedicated Trust Configuration sidebar section, grouped by Trust Circle station — GROUNDED holds Grounding and Honesty (honesty's findings land at GROUNDED), GUARDED holds Guardrails, BOUNDED holds Agent Authority, JUDGED holds Judges. REVIEWED is armed by setting any gate to Review; SIGNED, TRUSTED and PROVEN have nothing per-profile to set. Cards open collapsed (a single-card section stays open).

Persistence note: the Agent Evaluation & Grounding card has its own Save button; its settings (eval, grounding master, guardrails master, thresholds) persist across restart. Per-profile cards save with the profile.

3.3 Runbook — standing up assurance on a new deployment

  1. Turn on measurement. Config → Operations → Agent Evaluation & Grounding → enable online eval → Save. Leave judges sampled (or off to start). Nothing changes for users; you now have data.
  2. Set grounding + guardrails to observe (switches on; the grounding and outgoing-guardrail modes at observe). Run real traffic for a few days.
  3. Read the Agents roster. Left nav → Agents. Look for red/amber health, out-of-scope drift, personal-data exposure, cost outliers. This tells you which agents need enforcement.
  4. Curate the ontology for the profiles that need grounding. Build/refine the KG; run the validity check; fix issues.
  5. Tighten. Move the data-touching / externally-answering profiles to grounding enforce and guardrails enforce. Leave exploratory profiles at observe.
  6. Sign and attest. Sign your production agents, then attest each deployment — two distinct acts (§3.5). Optionally enable Ontology/Pack governance approval.
  7. Constrain autonomy. For any profile used by a scheduler, genie coordinator, or flow, set an Agent Authority scope (§3.8).
  8. Establish a monitoring cadence (§3.9).

3.4 How the layers compose on one turn (defense in depth)

Understanding the ordering tells you what catches what, so you know which control to reach for when something slips through:

  1. Inbound guardrail — a prompt-injection is refused before the model sees it.
  2. Agent Authority — if autonomous, the principal + scope are set for this turn.
  3. Grounding trusted-scope — the profile's bound-ontology scope is stamped onto the turn.
  4. Tool calls — each MCP/component/connector call is identity-enforced (denied if out of scope).
  5. Outgoing guard — personal data masked, toxic answers withheld.
  6. Grounding gate — a confident out-of-scope answer is annotated or withheld.
  7. Eval — the turn is scored; drift/cost/quality banded.
  8. Provenance — the whole turn is sealed into the signed chain; the agent's trust badge reflects its (unchanged) composition.

A hallucination that slips past grounding may still be caught by evaluation; a personal-data leak the model generates is caught outbound; an injection is stopped inbound. No single layer is load-bearing.

3.5 Workflow — signing an agent, then attesting the deployment

Two acts, not one. An agent is partly portable and partly local, so its trust envelope has two halves and each is vouched for separately.

Act Covers Who performs it Travels?
Sign off composition (ontology · skills · repositories), posture, capability the author yes — survives publish and install
Attest deployment this instance's resolved model, reachable MCP tool/prompt catalog, per-profile connector opt-in the owner of the agent — any tier no — every instance attests its own

Signing (bottom-up)

  1. Open the agent — its shield shows ⚪ unsigned and what is blocking it (unsigned parts).
  2. Sign each blocking part from its own badge (the knowledge model, the skills, …). The screen walks you through it — "to sign this agent, these parts need signing first."
  3. Sign the agent. That one act vouches for the whole make-up.
  4. If any part later changes, the badge honestly flips 🟠; re-sign to re-affirm — but read which half moved first (see "When 🟠 changed means re-attest, not re-sign" below).
  5. Anyone can verify the badge is genuine — including offline, on hand-off.

When 🟠 changed means re-attest, not re-sign

🟠 changed proves a baseline exists — the agent was vouched for, and something has moved since. It does not say which half moved, and the two have different remedies:

What drifted What the panel names The act that helps
Portable — composition, posture, capability the changed ingredient Re-sign this agent
Deployment — resolved model, tool catalog, connector opt-in e.g. "model changed: Google/gemini-3.1-flash-lite → OpenRouter/inception/mercury-2" Re-attest this deployment
Both both drifts, named separately both acts

Re-signing a deployment-face drift cannot clear it — the portable signature was never broken. That is why the SIGNED panel offers the act that is owed rather than a generic "sign" button: an offered act that cannot help reads as the fix, which is worse than no button at all (Rule 8.5). The panel names the drift verbatim in its Evidence slot, so you can tell the two apart before you click.

Attesting the deployment

Signing alone does not turn a badge green. An agent you installed from a pack — or any agent whose deployment has never been attested here — reads ◒ deployment unattested: the author vouched, you haven't. SIGNED shows — · not attested here and offers "Attest this deployment".

  1. Click the SIGNED station to pin it, then Attest this deployment. The station goes green and reads — · attested. You do not need to be an admin — attesting a deployment is the owner's act on their own agent, because it is a statement about a surface only they control ("this model, these tools, these connectors are what I intend here"). Signing off the artefact stays admin-only: that half vouches for something a third party can check.

Why it is a separate act. The three things most worth catching are a swapped model, a grown tool catalog (a write tool appearing where there were only reads) and a newly enabled connector — and those are exactly the three that cannot survive an install unchanged, because a subscriber runs their own model, their own server and has opted into nothing. Folding them into the portable signature would force a choice between two dishonest outcomes: every installed pack permanently 🟠 (which teaches people to ignore 🟠), or real widening hiding behind 🟢. Two halves avoid both.

What it buys you. Once attested, those three are drift-detected and the badge names what changed"tools appeared: base_writeQuery(sql)", "connectors enabled: uderia-shell". An unexplained amber gets clicked through; a named one does not.

One honest limit. The tool catalog is read from the stored classification snapshot, not a live connection — so the badge resolves offline, but an upstream MCP server change is caught when the profile next re-classifies, not the instant it happens.

The fork trap — attest a freshly forked profile in the wrong order and it drifts on its own first use. A newly forked or installed profile's classification_results is not pre-populated — classification is lazy: it runs when the profile is first actually dispatched to while active for consumption, not at fork time. Attesting a deployment before that first run locks in an early (often empty or partial) snapshot as the baseline; the moment the agent is actually used — its classification runs, the catalog fills in for real, and the badge flips 🟠 changed ("tools appeared: …"), even though nothing insecure happened — the reachable surface was simply measured for the first time after, not before, the attestation. The safe order:

  1. Fork or install the profile.
  2. Activate it — run its connection test (Setup → Profiles), the same step every agent needs before it can be driven at all. This is what makes classification eligible to run.
  3. Optionally force it explicitly: POST /v1/profiles/<id>/reclassify (it only actually reclassifies an active profile — on an inactive one it just clears the cache and asks you to activate first).
  4. Then attest the deployment. The snapshot is settled, so the badge holds.

Attesting before step 2–3 is not wrong, exactly — the fix is the same either way (re-attest once classification has run) — but it produces a needless 🟠 the moment someone first uses the agent, which reads as a problem when it is really just late-arriving information.

3.6 Workflow — governing an ontology (validity → release)

  1. Open the ontology's Govern dialog. Read its validity report: valid / partial / invalid, with the specific issues listed.
  2. Fix what's invalid (the report is specific). A partial ontology can still be released, with a noted caveat.
  3. Walk it through the lifecycle: draft → propose → approve → release. Releasing fixes a version and signs a verifiable record of it. If approval is required, the approver must be authorised and (by policy) not the owner.
  4. Retire it when it's no longer current — a recorded, auditable act.

Honest note: "release" here means marking this version as the official one, which is a different act from sharing it on the marketplace. Today, releasing does not yet change which knowledge the agents actually use — they use the live model. Making release govern what agents ground on is a planned next step.

3.7 Workflow — governing an agent pack / data product

Open the pack's Govern dialog: a lifecycle stepper, a trust hero (affirms or nudges you to sign off), one primary CTA (the recommended next action), instant SLA pills, an activity timeline. Enable require-approval / require-trust in the admin Agent Pack Governance policy to enforce that a published pack is approved and trusted. Deprecation archives the pack's sessions and blocks new forks.

3.8 Workflow — scoping an agent that acts on its own

For any agent used unattended (scheduled tasks, a coordinator's experts, flow steps, calls from other systems):

  1. Profile editor → Agent Authority card.
  2. Decide the limits: keep it read-only? bar it from specific tools? restrict which connectors it may reach? cap its spend per run? Or switch off unattended use entirely.
  3. Save. From then on, unattended runs act under those limits; the owner's own interactive use is unaffected.
  4. Confirm in the audit trail: unattended actions show as done by the agent, and any blocked attempt is recorded.

3.9 Monitoring & triage

You want to… Go to Look for
See overall agent health Agents (Agent Performance) red/amber cards, failing checks, cost/speed outliers
Investigate one bad answer Sessions → the turn → Quality card which checks turned red; the grounding and guardrail notes on the trace
Confirm drift is being caught a turn's live status → grounding note its decision: pass / annotate / block, and the scope it checked
Confirm personal-data / attack handling a turn's live status → guardrail note the categories caught (labels only, never the raw value)
Confirm an agent is trusted the agent's shield badge 🟢 / 🟠 / ⚪ and, if not green, what's blocking it
Confirm who did an unattended action the audit trail whether it was done by the agent or by the user, and any blocked attempts

Part 4 — the capability & control reference

Layer Capability Default Can it enforce? Where you set it Deeper reading (optional)
Foundation Ontology (knowledge model) KG inspector, Ontology view ONTOLOGY
Grounding anti-hallucination observe / overall off yes Ops card + agent card TIER_1.1
Guardrails incoming + outgoing observe / overall off yes Ops card + agent card TIER_1.3
Identity scoped autonomous agent unrestricted yes (safely) agent card AGENT_AUTHORITY
Evaluation scoring + judging on (scoring) no (measures only) Ops card AGENT_OPS_EVAL
Observability Sessions + Agents views on no left navigation AGENT_OPS_EVAL
Trust signed badges unsigned badge (optional gate) each thing's badge TRUST_MEMBRANE
Governance ontology lifecycle off opt-in Features → System Feature Availability TIER_4.3
Governance pack lifecycle + service tier off opt-in Features → System Feature Availability PACK_GOVERNANCE
Governance governed metrics metric node, admin TIER_4.2
Operational consumption / cost disabled yes App Config → Security SECURITY

Part 5 — compliance mapping

Agent Trust & Assurance is how a Uderia deployment evidences AI-governance obligations: