syntax = "proto3"; package camino; enum Cardinality { CARDINALITY_UNSPECIFIED = 0; OPTIONAL_ONE = 1; EXACTLY_ONE = 2; MANY = 3; MANY_UNIQUE = 4; } message AtomDefinition { string atom_id = 1; string display_name = 2; } message AtomConformance { string atom_id = 1; string interface_revision_id = 2; string conformance_id = 3; } message StateAttachment { string slot_id = 1; string attached_atom_id = 2; string display_name = 3; string value_type_json = 4; string storage_policy_json = 5; string default_value_json = 6; string owner_conformance_id = 7; } message EndpointConstraint { oneof kind { string atom_id = 1; string interface_revision_id = 2; } } message EdgeEndpoint { string projection_id = 1; string display_name = 2; EndpointConstraint constraint = 3; Cardinality cardinality = 4; bool ordered = 5; // Empty means restrict. Direction is the endpoint being deleted. string on_delete = 6; bool retain_other = 7; // Empty for sets/lists, otherwise string, boolean, or int64 map keys. string key_type = 8; // Explicit read-only dependency injection traversal, not mutation authority. bool public_traversal = 9; } message EdgeAttachment { string edge_type_id = 1; string display_name = 2; EdgeEndpoint first = 3; EdgeEndpoint second = 4; string owner_conformance_id = 5; } // Camino consumes this persistence-only projection of a checked workspace. // Interfaces, operation bindings, packages, and constructors stay in orch. message PersistencePlan { string workspace_id = 1; string workspace_revision_id = 2; repeated AtomDefinition atoms = 3; repeated AtomConformance conformances = 4; repeated StateAttachment states = 5; repeated EdgeAttachment edges = 6; }