# Contrato AS01-F01

**Dirección:** [A1–A6 adoptadas](https://xcim.org/standardization/source/ACCEPTED-A1-A6.md). **Revisión de fixtures:**
AS01-F01. Los schemas concretan el diseño [AS-01](https://xcim.org/standardization/source/AUTHORITY-STATE-PROPOSAL.md)
sin modificar schemas, firmas, hashes o ventanas históricas WD/P1.

## Selección y contratos

| Contrato | Schemas | Comprobación semántica aparte del schema |
|---|---|---|
| C1 | trust-policy, genesis | Pins locales, quórums, conjuntos disjuntos, URI de consentimiento, origen/genesis y deadlines. Nunca se toma política de un email. |
| C2 | manifest, protected/common | Quórum por thumbprint distinto, role/kid/type/alg exactos, cadena/epoch, claves revocadas no reactivadas ni kid reutilizado. |
| C3/C4 | control-head, checkpoint | Firmantes distintos, enlace exacto, secuencias, tiempos, mismo corte y batch WD firmado; sin autoautorizar al firmante por su propia hoja. |
| C5 | locator, material, state-core, state-value | App actual por ID estable, scope/epoch, MSA P1 exacta, control/MP separados, vigencias y roles de dominio. |
| C6 | witness | 256 siblings hoja→raíz; clave derivada localmente; membership/ausencia bajo raíz autenticada del fixture; campos de ausencia null. |
| C7 | evidence-set, history, permission-evidence, event-inclusion | Componentes ligados al corte/historia, sin resolver evidencia arbitraria. `anchor_evidence` es obligatoriamente null en esta revisión. |
| C8 | event | Atestación firmada, cadena por locator, nuevo core sin ciclo, inclusión y proyección reconstruida; tombstones terminales. |
| Auxiliares | root-transition, possession | Schema de transición/posesión; doble quórum de transición comprobado como artefacto, posesión real y store de challenge pendientes. |

Los 19 schemas tienen objetos cerrados y uniones enumeradas. IDs
`https://xcim.invalid/ietf/as01/schemas/` son de desarrollo; el registry local
incluye las dos copias WD de `baseline/`. No se descargan refs remotas.
`build_schemas.py` es fuente generadora y permite comparar bytes sin escribir.
Schema no prueba confianza, frescura, firmas, control DNS ni consentimiento.

## Concreciones de esta iteración

Se conservan `proposal_version: "as-01"`, los tipos/tags del diseño, JCS/E1 y
JWS Ed25519 específicos para objetos nuevos. Los nombres de `typ` con `+jcs`
siguen sin registro IANA y dependen de G07/G10. No se reinterpretan objetos
legacy con `EdDSA`: el dispatch sólo lo admite para receipt/batch 0.1 exactos,
con pins locales `legacy_receipt`/`legacy_batch` y sus `typ` establecidos.

C1 agrega explícitamente `consent_issuer` para ligar el issuer ID URN de los
batches a la URI exacta firmada por el receipt P1. `legacy_keys` enumera dos
pins acotados por rol y tiempo; `limits` fija edades/tamaño del ensayo. Esto
evita inferir equivalencia URN↔URL o asignar rol batch a una clave checkpoint.
No habilita una migración global de algoritmos ni discovery autoautorizado.

C2 permite una secuencia completa de manifiestos firmados por la raíz actual;
no reutiliza kid para material/rol distintos ni reactiva uno revocado. Rotación
de raíz se comprueba por separado y no instala políticas ni reconstruye el
historial de múltiples raíces. La transición de claves no autoriza cambios
colaterales de política: éstos requieren reprovisionamiento explícito.

C3/C4 del subperfil fixture tienen una cabeza por checkpoint y secuencias desde
uno. `history` incluye hasta 16 cortes/manifiestos y 128 eventos por log. Se
verifican los prefijos completos, no proofs compactas de consistency. El log AS
se reproduce para comprobar su proyección entera y las transiciones terminales.
La solicitud/autenticación del actor se sustituye por una atestación del issuer
firmada y un compromiso sintético explícito, no por prueba de consentimiento.

Permiso WD: se valida receipt/batch 0.1, firma, evento de emisión/inclusión y
proof sparse con bitmap. El fixture de emisión usa un permiso/una hoja; el
caso `permission-revoked` demuestra rechazo de hoja firmada revocada, sin
afirmar que implementa todo el lifecycle WD de revocación/reconsentimiento.
Floors de permiso conservan revocaciones conocidas y no se pierden al exportar
un candidato nuevo. No hay prueba de actor, epoch de permiso o anchor inventado.

**C7 es un contrato de desarrollo incompleto para publicación:**
`anchor_evidence: null` no es un anchor válido ni prueba adjunta usable. Un
objeto que afirme `finalized` se rechaza por schema. El adaptador concreto y
su rama cerrada de evidencia requieren una revisión nueva antes de integrar
Proof/P1 o un receiver público. El checker P1 conserva
`PROOF_VALIDATOR_PENDING`; AS01-F01 no lo reemplaza ni transforma flags en PASS.

## Tiempo, estados y floors

Aplicar `this_update <= t-u` y `t+u < deadline`, con `u <= 60` acotado por C1.
Estado hasta 300s, manifiesto hasta 86400s y límites locales pueden estrechar
ambas ventanas. El deadline efectivo incluye todos los firmantes efectivamente
usados, manifiesto/política, estados, MSA, receipt, permiso y observaciones de
dominio; una root key que vence antes limita también el resultado reutilizable.
Es el deadline del componente AS comprobado, no un resultado completo de email:
RBA/MP, DKIM, anti-replay y aceptación SMTP se deben intersectar al integrar.

El checker acepta reloj/caché/floors únicamente de un contexto marcado
`fixture_only`. Devuelve un `floor_candidate` sin escribirlo. Detecta floors
perdidos/no disponibles, manifest/checkpoint conflictivos, epochs menores y
tombstones conocidos. No demuestra persistencia, instalación atómica ni
coordinación entre MX; no usar el candidato como una transacción implementada.

Claves de publicación se revocan bajo C2/C1, no por una hoja propia. Revocar
MSA/MP en C5 produce negativa aun con firma válida e `iat` anterior. El
ocultamiento de C2 y compromiso de ambos roles online siguen fuera de la cota
de 300s. Ninguna prueba sintética acredita disponibilidad o seguridad de la raíz.

## Reproducción y límites

`base.json` contiene EvidenceSet/política/contexto sintéticos completos.
`cases.json` declara patches literales (`set`/`remove`, paths como arrays) sobre
ese base y resultados esperados explícitos. Las firmas ya están en los patches;
el checker no firma ni repara un caso. Se pueden materializar/reimplementar
sin importar el generador. La generación tiene inventario y hashes estables.

Los parsers limitan JSON a 1 MiB/depth32 y segmentos firmados a 256 KiB;
E1 rechaza floats/exponentes/duplicados antes de convertir y exige bytes JCS
en los segmentos. Los budgets son de ensayo; los 256 siblings por hoja pueden
superar Proof de P1. No se aumenta el límite de headers ni se añade un fallback
URL libre. No existe cliente HTTP en este paquete: los tests de origins sólo
comprueban sintaxis/selección, no DNS rebinding o transporte real.

Copias de schema WD conservan bytes/IDs con [proveniencia](https://xcim.org/standardization/as01/baseline/provenance.json).
La dependencia hermana P1 incluye su propio receipt baseline, schemas y
primitives públicos; se conserva byte a byte en el bundle. El manifest local
es integridad sin firma, no una raíz de confianza.
