Governance · solo lectura por diseño

La política es código.
No un prompt.

SQAI trata al modelo como lo que es: un cliente no confiable. Las listas de permisos se fijan en el código al construir la herramienta, se verifican en proceso antes de cualquier ejecución y están ausentes del protocolo del modelo. No hay nada que persuadir al sistema.

4.574capacidades que expone el contrato — todas de solo lectura
6permisos en la política de una app
1solicitud tipada que se ejecuta

IIEl estrechamiento, completo

Tres capas. Cada una solo puede reducir.

Cada respuesta pasa el mismo contenedor. Un contrato anclado por hash define lo que existe. Tu política lo reduce a lo permitido. Una solicitud tipada debe caber dentro de ambos.

  1. 01

    El contrato

    4.778 capacidades en el runtime anclado; 4.574 expuestas a agentes, todas de solo lectura. Las otras 204 están excluidas por completo — para un modelo, no existen.

  2. 02

    Tu política

    Tres listas de permisos — allowedSources, allowedFields por fuente, allowedFunctions — fijadas en el momento de createSQAI(). Las funciones tienen como valor predeterminado «all-readonly».

  3. 03

    Una solicitud

    Un plan tipado, validado contra el contrato y luego verificado contra la política en proceso — antes de la ejecución, nunca después.

Capa 01 · El contrato4.574 expuestas · solo lectura
Capa 02 · Tu política6 permisos
allowedSourcesorders
allowedFieldsregionrevenueunit_price
allowedFunctionsstats.medianfinance.npv
Capa 03 · Una solicitud1 plan tipado

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

contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1

Solo reducir.

Una política puede reducir la superficie; nada puede ampliarla. Nombrar una capacidad que el contrato no expone hace que createSQAI() lance unsupported_operation en la construcción — la app falla antes de que cualquier agente se conecte.

Y la entrada de herramienta del modelo no lleva ningún campo allowed*. La política no está en el protocolo, así que no hay nada que un prompt — ni una inyección — pueda ampliar.

IIILa política, en código

Escrita una vez. Verificada siempre.

La mayoría de las herramientas de gobernanza se sitúan junto a la ruta de datos y la observan. La política de SQAI se sitúa dentro de la ruta: tres listas de permisos en el constructor, aplicadas en proceso antes de cada ejecución.

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
Las fuentes registradas que un plan puede nombrar. Cualquier otra devuelve policy_denied_source.
allowedFields
Columnas, por fuente. Un plan que accede a cualquier otra columna devuelve policy_denied_field.
allowedFunctions
Las funciones de solo lectura que un plan puede invocar — por defecto «all-readonly». Cualquier otra devuelve policy_denied_function.
tool input
No lleva ningún campo allowed*. El modelo nunca ve la política, por lo que nunca puede enviar una más amplia.

El registro de denegaciones

Las denegaciones son datos, no excepciones. Cada una lleva un código estable que un agente puede leer — y ninguna es reintentable, por lo que un bucle no puede desgastar la política.

en la construcción

unsupported_operation

La política nombra una capacidad que el contrato no expone. La construcción lanza una excepción; la app falla antes de que cualquier agente se conecte.

en el momento de la solicitud

policy_denied_source

El plan nombra una fuente fuera de allowedSources.

policy_denied_field

El plan accede a una columna fuera de allowedFields de esa fuente.

policy_denied_function

El plan invoca una función fuera de allowedFunctions.

source: "sqai"cada denegación de política llega como un resultado estructurado y no reintentable. Las herramientas nunca lanzan excepciones.

IVCustodia

Los resultados se retienen, no se guardan.

Un conjunto de resultados completo nunca llega al contexto del modelo. Se aparca en un almacén gobernado y se referencia por id; el modelo recibe una muestra declarada.

El almacén de resultados

Almacén gobernado · TTL 15 min

result_id
16 bytes aleatorios, base64url. Imposible de adivinar, nunca secuencial.
authorization
Vinculado al tenant. Un tenant incorrecto recibe result_not_found — el almacén nunca confirma la existencia.
ttl
15 minutos. Después, la entrada desaparece.
capacity
256 resultados como máximo — 64 MB en total, 16 MB por tenant.

El almacén retiene el resultado. El modelo lee una muestra y lo indica.

Límites de contexto del modelo

defaultLimit100límite de filas aplicado cuando un plan no define uno
maxExecutionRows1.000techo absoluto de filas que devuelve cualquier ejecución
maxRowsToModel25el máximo de filas que recibe un contexto de modelo
maxCellsToModel250el máximo de celdas que recibe un contexto de modelo
maxBytesToModel32.000el máximo de bytes de datos de resultado que recibe un modelo

El truncamiento siempre se declara en el resultado. Las filas parciales nunca se muestran — una fila llega completa o no llega.

El ángulo de auditoría

17%de las organizaciones puede reconstruir la secuencia completa de llamadas a herramientas de un agente a posteriori

El artículo 30 del GDPR y el SOC 2 CC7.2 exigen exactamente esos registros.

Cada respuesta de SQAI ya lleva su propia reconstrucción:

plan_hash · invocation_hash · computation_hash · contract_hash

La reproducción es una consulta, no una investigación. Cómo funciona el replay

VIPreguntas

Gobernanza, preguntada directamente

¿Puede el modelo ampliar su propio acceso?

No. La política se fija en el momento de createSQAI() y se verifica en proceso antes de la ejecución. La entrada de herramienta del modelo no contiene ningún campo allowed*, por lo que no existe nada en el protocolo que ampliar — una solicitud fuera de política devuelve un resultado estructurado policy_denied.

¿Es de solo lectura un indicador que algo podría eludir?

No es un indicador. El contrato expuesto contiene 4.574 capacidades de solo lectura; una ruta de escritura está ausente por construcción, no deshabilitada. La inyección de prompt puede cambiar lo que un modelo solicita — no puede añadir capacidades a un contrato fijado.

¿Qué registros existen para una revisión del artículo 30 del GDPR o del SOC 2 CC7.2?

Cada resultado lleva plan_hash, invocation_hash, computation_hash y contract_hash. El cómputo exacto puede reproducirse y verificarse contra esos hashes mucho tiempo después.

¿Dónde residen los datos de resultado tras una consulta?

En un almacén de resultados autorizado por tenant: los ids son 16 bytes aleatorios, las entradas expiran a los 15 minutos, y el almacén tiene un límite de 64 MB en total y 16 MB por tenant. El contexto del modelo recibe como máximo 25 filas, 250 celdas y 32.000 bytes — truncamiento siempre declarado.

VIISiguiente

Gobierna la respuesta.

Trae un esquema y una pregunta de cumplimiento. Te mostraremos la política que la responde.