//! Projects: the §7 multi-repo ownership registry. //! //! A project is a repo-root that declaratively MANAGES a slice of the shared //! group tree. Each group node is owned by exactly one project (recorded in //! `groups.owner_project`); apps inherit ownership from their nearest claimed //! ancestor group. Identity is a committed `[project] slug` — stable across //! clones; the server assigns the UUID. //! //! See docs/design/groups-and-project-tool.md §7. use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use crate::{AdminUserId, ProjectId}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Project { pub id: ProjectId, /// Instance-global identity, declared in the repo's root manifest and /// frozen at registration. pub slug: String, pub name: String, /// The admin who first registered the project (`None` once their account /// is deleted — the FK is `ON DELETE SET NULL`). pub created_by: Option, pub created_at: DateTime, }