syntax = "proto3"; package charybdis.core; import "core/common.proto"; // ComponentMetadata represents identifying information for a component entity // A component is a software component (service, website, library, etc.) message ComponentMetadata { // Required: The name of the component string name = 1; // Optional: Namespace for organizational grouping (default: "default") string namespace = 2; // Optional: Human-readable description of the component string description = 3; // Optional: Labels for categorization and filtering // Key-value pairs (e.g., "environment": "production", "team": "payments") map labels = 4; // Optional: Tags for additional classification repeated string tags = 5; // Optional: Links to external resources repeated Link links = 6; } // ComponentSpec represents configuration for a component entity message ComponentSpec { // Required: Type of component (e.g., "service", "website", "library", "documentation") string type = 1; // Required: Lifecycle stage (e.g., "production", "experimental", "deprecated") string lifecycle = 2; // Required: Owner team or individual (references a Group or User entity) string owner = 3; // Optional: Parent system this component belongs to (references a System entity) string system = 4; // Optional: Sub-component of another component (references a Component entity) string subcomponent_of = 5; // Optional: Components this component depends on (references Component entities) repeated string depends_on = 6; // Optional: APIs this component provides (references API entities) repeated string provides_apis = 7; // Optional: APIs this component consumes (references API entities) repeated string consumes_apis = 8; }