Governance · sola lettura per costruzione

La policy è codice.
Non un prompt.

SQAI tratta il modello per quello che è: un client non attendibile. Le allow-list sono fissate nel codice alla costruzione dello strumento, verificate in-process prima di qualsiasi esecuzione e assenti dal protocollo del modello. Non c'è nulla su cui far leva per aggirare il sistema.

4.574capability esposte dal contratto — tutte in sola lettura
6grant nella policy di un'app
1richiesta tipizzata eseguita

IIIl restringimento, per intero

Tre livelli. Ognuno può solo sottrarre.

Ogni risposta attraversa lo stesso contenimento. Un contratto con hash fisso definisce ciò che esiste. La tua policy lo restringe a ciò che è consentito. Una singola richiesta tipizzata deve rientrare in entrambi.

  1. 01

    Il contratto

    4.778 capability nel runtime con hash fisso; 4.574 esposte agli agenti, tutte in sola lettura. Le altre 204 sono escluse del tutto — per un modello, non esistono.

  2. 02

    La tua policy

    Tre allow-list — allowedSources, allowedFields per sorgente, allowedFunctions — fissate al momento di createSQAI(). Le funzioni hanno come default "all-readonly".

  3. 03

    Una richiesta

    Un piano tipizzato, validato rispetto al contratto, poi verificato contro la policy in-process — prima dell'esecuzione, mai dopo.

Livello 01 · Il contratto4.574 esposte · sola lettura
Livello 02 · La tua policy6 grant
allowedSourcesorders
allowedFieldsregionrevenueunit_price
allowedFunctionsstats.medianfinance.npv
Livello 03 · Una richiesta1 piano tipizzato

QuerySpec v1 · median(revenue) by region · policy ✓

contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1

Solo restringimento.

Una policy può ridurre la superficie; nulla può ampliarla. Nominare una capability non esposta dal contratto fa sì che createSQAI() lanci unsupported_operation alla costruzione — l'app fallisce prima che un agente si connetta.

E l'input dello strumento del modello non porta alcun campo allowed*. La policy non è nel protocollo, quindi non c'è nulla che un prompt — o un'iniezione — possa ampliare.

IIILa policy, in codice

Scritta una volta. Verificata ogni volta.

La maggior parte degli strumenti di governance si affianca al percorso dei dati e lo osserva. La policy di SQAI si trova dentro il percorso: tre allow-list nel costruttore, applicate in-process prima di ogni esecuzione.

const sqai = createSQAI({
  sources: { orders },

  // policy — fixed here, invisible to the model
  allowedSources: ['orders'],
  allowedFields: {
    orders: ['region', 'revenue', 'unit_price'],
  },
  // functions default: 'all-readonly'
  allowedFunctions: [
    'stats.median', 'finance.npv',
  ],
});
allowedSources
Le sorgenti registrate che un piano può nominare. Qualsiasi altra restituisce policy_denied_source.
allowedFields
Le colonne, per sorgente. Un piano che accede a qualsiasi altra colonna restituisce policy_denied_field.
allowedFunctions
Le funzioni in sola lettura che un piano può chiamare — default "all-readonly". Qualsiasi altra restituisce policy_denied_function.
tool input
Non porta alcun campo allowed*. Il modello non vede mai la policy, quindi non può mai inviarne una più ampia.

Il registro dei dinieghi

I dinieghi sono dati, non eccezioni. Ognuno porta un codice stabile leggibile da un agente — e nessuno è ritentabile, così un ciclo non può logorare la policy.

alla costruzione

unsupported_operation

La policy nomina una capability non esposta dal contratto. La costruzione lancia un'eccezione; l'app fallisce prima che qualsiasi agente si connetta.

al momento della richiesta

policy_denied_source

Il piano nomina una sorgente esterna ad allowedSources.

policy_denied_field

Il piano accede a una colonna esterna agli allowedFields di quella sorgente.

policy_denied_function

Il piano chiama una funzione esterna ad allowedFunctions.

source: "sqai"ogni rifiuto di policy arriva come risultato strutturato e non ripetibile. Gli strumenti non generano mai eccezioni.

IVCustodia

I risultati sono custoditi, non conservati.

Un set di risultati completo non approda mai nel contesto del modello. Viene parcheggiato in un archivio governato e referenziato tramite id; il modello riceve un campione dichiarato.

L'archivio dei risultati

Archivio governato · TTL 15 min

result_id
16 byte casuali, base64url. Non indovinabile, mai sequenziale.
authorization
Vincolato al tenant. Un tenant errato riceve result_not_found — l'archivio non conferma mai l'esistenza.
ttl
15 minuti. Poi la voce scompare.
capacity
Al massimo 256 risultati — 64 MB totali, 16 MB per tenant.

L'archivio custodisce il risultato. Il modello legge un campione e lo dichiara.

Limiti del contesto modello

defaultLimit100limite di righe applicato quando un piano non ne definisce uno
maxExecutionRows1.000tetto massimo di righe restituite da qualsiasi esecuzione
maxRowsToModel25il massimo di righe che un contesto modello riceve
maxCellsToModel250il massimo di celle che un contesto modello riceve
maxBytesToModel32.000il massimo di byte di dati risultato che un modello riceve

Il troncamento è sempre dichiarato nel risultato. Le righe parziali non vengono mai mostrate — una riga arriva intera o non arriva affatto.

Il profilo di audit

17%delle organizzazioni è in grado di ricostruire a posteriori la sequenza completa di chiamate agli strumenti di un agente

GDPR Articolo 30 e SOC 2 CC7.2 richiedono esattamente quei record.

Ogni risposta SQAI porta già con sé la propria ricostruzione:

plan_hash · invocation_hash · computation_hash · contract_hash

Il replay è una ricerca, non un'indagine. Come funziona il replay

VIDomande

Governance, senza filtri

Il modello può ampliare i propri accessi?

No. La policy è fissata al momento di createSQAI() e verificata in-process prima dell'esecuzione. L'input degli strumenti del modello non contiene alcun campo allowed*, quindi nel protocollo non esiste nulla da ampliare — una richiesta fuori policy restituisce un risultato strutturato policy_denied.

La sola lettura è un flag aggirabile?

Non è un flag. Il contratto esposto include 4.574 capacità di sola lettura; un percorso di scrittura è assente per costruzione, non disabilitato. Il prompt injection può modificare ciò che un modello richiede — non può aggiungere capacità a un contratto fisso.

Quali record esistono per una verifica GDPR Articolo 30 o SOC 2 CC7.2?

Ogni risultato porta plan_hash, invocation_hash, computation_hash e contract_hash. Il calcolo esatto può essere riprodotto e verificato rispetto a quegli hash anche molto tempo dopo.

Dove risiedono i dati di risultato dopo una query?

In un archivio dei risultati autorizzato per tenant: gli id sono 16 byte casuali, le voci scadono dopo 15 minuti e l'archivio è limitato a 64 MB totali e 16 MB per tenant. Il contesto modello riceve al massimo 25 righe, 250 celle e 32.000 byte — troncamento sempre dichiarato.

VIIAvanti

Governa la risposta.

Porta uno schema e una domanda di compliance. Ti mostreremo la policy che vi risponde.