Generación de Contratos de Grabadora y Arquitectura de Proyección
Resumen Ejecutivo
recorder-contract es el generador/verificador determinista canónico para los artefactos de proyección de Recorder. Emite salidas de esquema/contrato/ejemplo/glosario/tooltip bajo Docs/generated/recorder/, ahora incluyendo artefactos de proyección de SDK bajo Docs/generated/recorder/sdk/, y aplica controles de deriva que fallan en cerrado.
La generación de tooltips ahora es metadatos de proyección de clase mundial con:
- manifiesto de tooltips compatible hacia atrás (
tooltips.json), - catálogo de términos enriquecidos (
tooltips.catalog.json), - pointer/token bindings for code blocks and JSON examples
vinculaciones de puntero/token para bloques de código y ejemplos de JSON (
tooltips.annotations.json), - markdown del glosario (
glossary.md) generado a partir de la misma fuente de términos.
Autoridad del Artefacto
Código del generador autoritativo:
crates/recorder-contract/src/lib.rscrates/recorder-contract/src/contract_generation.rscrates/recorder-contract/src/contract_generation_artifacts.rscrates/recorder-contract/src/contract_generation_schema.rscrates/recorder-contract/src/contract_generation_samples.rscrates/recorder-contract/src/contract_generation_sdk_types.rscrates/recorder-contract/src/contract_generation_sdk_sidecar.rscrates/recorder-contract/src/contract_generation_sdk_vectors.rscrates/recorder-contract/src/sidecar_api.rscrates/recorder-contract/src/sidecar_api/openapi.rscrates/recorder-contract/src/sidecar_api/artifacts.rscrates/recorder-contract/src/sidecar_api/specs/mod.rscrates/recorder-contract/src/tooltips.rscrates/recorder-contract/src/tooltips_base_terms.rscrates/recorder-contract/src/tooltips_builders.rs
Raíz generada autoritativa:
Docs/generated/recorder/
Autoridad del manifiesto de la máquina:
index.json incluye la versión del contrato más los metadatos del hash SHA-256 por artefacto. Cuando están presentes los artefactos de la API sidecar, se aplican puertas de compatibilidad desde los artefactos generados a través de scripts/ci/sidecar_contract_gates.py.
Modos de Generador
recorder-contract admite dos modos deterministas:
GenerateMode::Generate- Regenera artefactos y reescribe la raíz de salida.
- Elimina archivos inesperados y obsoletos en la raíz de salida.
- Fails closed if output-root traversal encounters symlinks, hard-linked archivos de artefactos, o tipos de entrada de sistema de archivos no soportados.
GenerateMode::Check- Falla cerrada por archivos faltantes, desplazamiento de bytes o archivos inesperados.
- Fails closed if expected paths resolve through symlinked roots/components, archivos no regulares, o archivos de artefactos con enlace duro.
Integración de CLI:
generar contrato de grabadoraverificación del contrato del grabador
Modelo de Determinismo
Los controles de determinismo incluyen:
- ordenación estable de artefactos a través de mapas/conjuntos ordenados,
- codificación JSON canónica a través de JCS,
- hash SHA-256 explícito para entradas de manifiesto,
- comparación de bytes en modo de verificación contra archivos comprometidos.
Proyección de Esquema Consciente de Restricciones
La generación de esquemas es de dos etapas:
- inferir la forma estructural a partir de artefactos de muestra determinísticos,
- aplicar restricciones de dominio autoritativas mediante superposición de punteros JSON.
Las superposiciones de restricciones incluyen:
- políticas estrictas de forma de texto UUID para todos los campos de ID,
- restricciones de cadena hostil y longitud máxima para campos de identificador/texto,
- política estricta de regex para el tipo de evento y límite de longitud,
- política de regex estricta para
key_id(^[0-9a-f]{64}$), - restricciones de matriz de bytes de longitud fija para campos de hash/firma,
- representaciones nulas explícitas para campos opcionales,
- full
BundleSelectoralgebra projection (BySegment,BySegments,ByTrace,ByTimeRange,ByEnvelopeIds,ByFilter, recursive proyección algebraica completa deBundleSelector(BySegment,BySegments,ByTrace,ByTimeRange,ByEnvelopeIds,ByFilter,Compositerecursivo) a través del esquema$defs.
La proyección falla cerrada si faltan las rutas de puntero esperadas al aplicar restricciones.
Conjunto de Artefactos Producidos
Archivos emitidos actuales v1:
- index.json
schemas/envelope.schema.jsonschemas/segment.schema.jsonschemas/bundle.schema.jsoncontracts/adapter.jsoncontracts/provider.jsoncontracts/integrations/decision_gate.mapping.jsoncontracts/integrations/otel.mapping.json- glosario.md
tooltips.json- tooltips.catalog.json
- tooltips.annotations.json
examples/envelope.jsonexamples/segment.jsonexamples/bundle.jsonapis/sidecar.openapi.jsonapis/sidecar.errors.jsonapis/sidecar.enums.jsonapis/sidecar.examples.jsonapis/sidecar.compat.jsonconfig/sidecar.schema.jsonconfig/sidecar.compat.jsonconfig/sidecar.example.tomlconfig/sidecar.mdsdk/types.jsonsdk/methods.jsonsdk/test_vectors.jsonsdk/manifest.json
Conformidad y Validación
recorder-contract las pruebas unitarias validan:
- determinismo de generación repetida,
- consistencia de hash de manifiesto/bytes de archivo,
- los ejemplos generados se validan contra los esquemas generados,
- el catálogo de tooltips incluye todos los nombres de métodos de contrato de adaptador/proveedor,
- cobertura de términos centrales de clase mundial requerida,
- los punteros del catálogo de tooltips se resuelven contra los artefactos JSON generados,
- las vinculaciones de anotación de tooltip solo hacen referencia a las claves de términos definidos,
- schema/runtime invariance for
key_id, hostile text fields, and identifier invarianza de esquema/runtime parakey_id, campos de texto hostiles y restricciones de longitud máxima de identificador. - emisión de artefactos sidecar e inclusión en el manifiesto.
- consistencia del registro de errores del sidecar y la línea base de compatibilidad.
- consistencia del contrato de idempotencia de OpenAPI/compat del sidecar.
- consistencia del artefacto de configuración del sidecar (vínculo de esquema/compatibilidad/ejemplo/documentación).
- sidecar OpenAPI component typing strength for
BundleandVerificationVerdict(contratos de objeto no flexibles, amigables para generadores). - Emisión de artefactos SDK e inclusión de manifiestos (
types/methods/test_vectors/manifest). - Declaraciones de script requeridas en el manifiesto del SDK y consistencia del registro de idioma objetivo.
- SDK type projection hardening (field-level constraints + OpenAPI component bindings) and SDK method projection hardening (request/response schema refs, error/enum contract linkage, auth/idempotency metadata) for adaptador/proveedor/superficies de sidecar.
- Cobertura de métodos/vectores de prueba del SDK para superficies centrales de adaptador/proveedor/sidecar.
- Integration mapping contract drift checks for Decision Gate and OTel artículos generados contra constantes de tiempo de ejecución del adaptador.
- Sidecar media-type contract drift checks ensuring runtime policy-derived request media allowlists are projected consistently in OpenAPI and artefactos de compatibilidad.
recorder-contract pruebas de seguridad de rutas dedicadas validan:
- el modo de generación rechaza las raíces de salida vinculadas simbólicamente,
- el modo de generación rechaza las rutas hijas enlazadas simbólicamente bajo la raíz de salida,
- el modo de generación rechaza los archivos de artefactos esperados vinculados de forma rígida,
- el modo de verificación informa sobre la deriva de bytes para los artefactos modificados,
- el modo de verificación rechaza los archivos de artefactos esperados vinculados de forma rígida,
- el modo de verificación rechaza los archivos de artefactos esperados vinculados simbólicamente.
Orquestación y CI
Punto de entrada de orquestación de un solo comando:
scripts/ci/generate_all.sh
Comportamiento:
generate: regenerate contract artifacts + regenerate Python SDK contract constants (sdk/python/generate.sh) + run sidecar contract gates + regenerar la documentación de cobertura de pruebas.check: run contract drift check + Python SDK drift/unit/system gates (sdk/python/check.sh,sdk/python/test.sh) + sidecar contract gates + docs drift check (fallar cerrado).- Optional perf matrix mode: if
RECORDER_PERF_MATRIX=1(or legacyRECORDER_SIDECAR_PERF_GATE=1), execute debug/test + release perf suites viascripts/ci/perf_matrix.pyand enforce release gate policy viascripts/ci/perf_gate.pycontra contratos de línea base comprometidos.
Los flujos de trabajo de CI ejecutan esto en los controles de calidad requeridos.
Límite de Transferencia de Proyección
Política de entrega de i18n del sitio web y propiedad del glosario:
Docs/roadmap/recorder_generated_contract_sync_and_glossary_policy.md
Esto define la presencia de archivos requeridos, la verificación de hash, la estabilidad de la ruta y la propiedad de glosario/tooltip de una sola fuente.