package registry import "time" // Kind classifies a registry entry. type Kind string const ( KindFunction Kind = "function" KindPipeline Kind = "pipeline" KindComponent Kind = "component" ) // Purity indicates whether a function has side effects. type Purity string const ( PurityPure Purity = "pure" PurityImpure Purity = "impure" ) // Algebraic classifies a type. type Algebraic string const ( AlgebraicProduct Algebraic = "product" AlgebraicSum Algebraic = "sum" ) // Function represents an entry in the functions table. // Covers kind: function, pipeline, and component. type Function struct { ID string `json:"id"` Name string `json:"name"` Kind Kind `json:"kind"` Lang string `json:"lang"` Domain string `json:"domain"` Version string `json:"version"` Purity Purity `json:"purity"` Signature string `json:"signature"` Description string `json:"description"` Tags []string `json:"tags"` UsesFunctions []string `json:"uses_functions"` UsesTypes []string `json:"uses_types"` Returns []string `json:"returns"` ReturnsOptional bool `json:"returns_optional"` ErrorType string `json:"error_type"` Imports []string `json:"imports"` Example string `json:"example"` Notes string `json:"notes"` Documentation string `json:"documentation"` Code string `json:"code"` Tested bool `json:"tested"` Tests []string `json:"tests"` TestFilePath string `json:"test_file_path"` FilePath string `json:"file_path"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` // Component-only fields (kind: component) Props []PropDef `json:"props,omitempty"` Emits []string `json:"emits,omitempty"` HasState *bool `json:"has_state,omitempty"` Framework string `json:"framework,omitempty"` Variant []string `json:"variant,omitempty"` } // PropDef describes a component prop. type PropDef struct { Name string `json:"name"` Type string `json:"type"` Required bool `json:"required"` Description string `json:"description"` } // Type represents an entry in the types table. type Type struct { ID string `json:"id"` Name string `json:"name"` Lang string `json:"lang"` Domain string `json:"domain"` Version string `json:"version"` Algebraic Algebraic `json:"algebraic"` Definition string `json:"definition"` Description string `json:"description"` Tags []string `json:"tags"` UsesTypes []string `json:"uses_types"` Examples string `json:"examples"` Notes string `json:"notes"` Documentation string `json:"documentation"` Code string `json:"code"` FilePath string `json:"file_path"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // ProposalKind classifies a proposal. type ProposalKind string const ( ProposalNewFunction ProposalKind = "new_function" ProposalNewType ProposalKind = "new_type" ProposalImproveFunction ProposalKind = "improve_function" ProposalImproveType ProposalKind = "improve_type" ProposalNewPipeline ProposalKind = "new_pipeline" ) // ProposalStatus represents the review state of a proposal. type ProposalStatus string const ( ProposalPending ProposalStatus = "pending" ProposalApproved ProposalStatus = "approved" ProposalRejected ProposalStatus = "rejected" ProposalImplemented ProposalStatus = "implemented" ) // Proposal represents a suggested improvement to the registry. type Proposal struct { ID string `json:"id"` Kind ProposalKind `json:"kind"` TargetID string `json:"target_id"` Title string `json:"title"` Description string `json:"description"` Evidence map[string]any `json:"evidence"` Status ProposalStatus `json:"status"` CreatedBy string `json:"created_by"` ReviewedBy string `json:"reviewed_by"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // GenerateID builds the canonical ID: {name}_{lang}_{domain} func GenerateID(name, lang, domain string) string { return name + "_" + lang + "_" + domain }