{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://omalled.com/polyform/schemas/protocol-v1.json","schema_version":1,"protocol_version":"1.0.0","name":"Polyform runtime protocol","compatibility":{"server":">=0.2.0,<0.3.0","cli":">=0.2.0,<0.3.0","rust_runtime":">=0.2.0,<0.3.0","protocol":">=1.0.0,<2.0.0","legacy_clients":"0.1.x clients may continue using v1 endpoints without negotiation; incompatible explicit protocol versions receive upgrade_required"},"composition":{"strategies":["balanced","random","homogeneous","stable"],"strategy_semantics":{"balanced":"Prefer implementations with the fewest active assignments.","random":"Choose uniformly from eligible implementations.","homogeneous":"Choose the first eligible implementation for each function.","stable":"Choose deterministically from installation identity and retain the composition until intervention."},"minimum_active_implementations_per_function":1,"assignment_authentication":"release-delegated Ed25519 signature","monotonic_fields":["list_version","revision"]},"telemetry":{"implementation_membership":"signed_composition","call_outcomes":["ok","error","timeout","panic"],"call_schema":{"required":["spec_function","implementation_id","outcome"],"optional":["duration_ms"]},"execution_schema":{"required":["client_id","composition_revision","operation","success","calls"],"optional":["duration_ms","error_kind","protocol_version","client_version"]},"event_schema":{"required":["client_id","release_id","composition_revision","event_type","spec_function","implementation_id"],"optional":["execution_id","message_code","recent_calls","protocol_version","client_version"]},"event_types":["panic","spec_error","contract_violation","timeout","integrity_failure","extraction_failure"],"limits":{"operation_max_length":100,"calls_per_execution":100,"recent_calls_per_event":32,"identifier_max_length":128,"message_code_max_length":128},"privacy":{"allowed":["random installation identifier","release identifier","composition revision","operation label","success bit","duration","bounded error category","function identifier","implementation identifier","bounded outcome"],"forbidden":["request body","request headers","request target","cookies","credentials","tokens","filenames","file contents","prompts","user documents","free-form error text"]}},"implementation_lifecycle":{"durable_statuses":["active","investigate","quarantined","superseded","disabled"],"resolution_types":["resolved","false_positive","superseded","observation"],"events":["investigate","quarantine","restore","resolve","replace","disable"],"restored_is":"event","assignable_statuses":["active","investigate"]},"reproduction":{"bundle_version":1,"safe_payload":"minimized synthetic input explicitly marked safe, otherwise deterministic generator recipe","forbidden_fields":["request_body","headers","request_target","cookies","credentials","token","authorization"]},"errors":{"shape":["code","message","field","expected","protocol_version"],"codes":["invalid_request","unsupported_outcome","unsupported_strategy","implementation_not_active","protocol_incompatible","upgrade_required","minimum_diversity_violation","reason_required","stale_evidence","implementation_not_found","release_not_found"]}}