syntax = "proto3"; package charybdis.core; import "core/common.proto"; // GroupMetadata represents identifying information for a group entity // A group represents a team or organizational unit message GroupMetadata { // Required: The group name (e.g., "team-a", "engineering") string name = 1; // Optional: Namespace for organizational grouping (default: "default") string namespace = 2; // Optional: Human-readable description of the group string description = 3; // Optional: Labels for categorization and filtering // Key-value pairs (e.g., "department": "engineering", "cost-center": "1234") map labels = 4; // Optional: Tags for additional classification repeated string tags = 5; // Optional: Links to external resources (e.g., team page, Slack channel) repeated Link links = 6; } // GroupSpec represents configuration for a group entity message GroupSpec { // Required: Type of group // Standard types: "team", "business-unit", "product-area", "root", "department" string type = 1; // Optional: Group profile information GroupProfile profile = 2; // Optional: Parent group for hierarchy (references a Group entity) // Leave empty for root-level groups string parent = 3; // Optional: Child groups in the hierarchy (references Group entities) repeated string children = 4; // Optional: Direct members of this group (references User entities) repeated string members = 5; } // GroupProfile contains detailed profile information message GroupProfile { // Display name (e.g., "Engineering Team") string display_name = 1; // Group email address string email = 2; // Group picture/logo URL string picture = 3; }