luplo.core.models ================= .. py:module:: luplo.core.models .. autoapi-nested-parse:: Data models for all 12 tables. Mirrors DB schema from 0001_init_schema. Classes ------- .. autoapisummary:: luplo.core.models.Project luplo.core.models.Actor luplo.core.models.WorkUnit luplo.core.models.System luplo.core.models.Item luplo.core.models.ItemType luplo.core.models.Link luplo.core.models.Idea luplo.core.models.Capture luplo.core.models.CapturePromotion luplo.core.models.GlossaryGroup luplo.core.models.GlossaryTerm luplo.core.models.GlossaryRejection luplo.core.models.HistoryEntry luplo.core.models.AuditEntry luplo.core.models.SyncJob luplo.core.models.ItemCreate luplo.core.models.SearchResult Module Contents --------------- .. py:class:: Project .. py:attribute:: id :type: str .. py:attribute:: name :type: str .. py:attribute:: description :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:class:: Actor Attribution label — "who wrote this," not an authenticated principal. luplo core treats actors like git commit authors: a free-form registry of name/email pairs referenced as FK on items, history, and audit. Authentication (password, OAuth, session) lives outside core. .. py:attribute:: id :type: str .. py:attribute:: name :type: str .. py:attribute:: email :type: str .. py:attribute:: role :type: str | None .. py:attribute:: external_ids :type: dict[str, str] .. py:attribute:: joined_at :type: datetime.datetime .. py:class:: WorkUnit .. py:attribute:: id :type: str .. py:attribute:: project_id :type: str .. py:attribute:: title :type: str .. py:attribute:: description :type: str | None .. py:attribute:: system_ids :type: list[str] .. py:attribute:: status :type: str .. py:attribute:: created_by :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: closed_at :type: datetime.datetime | None .. py:attribute:: closed_by :type: str | None .. py:attribute:: context :type: dict[str, Any] .. py:class:: System .. py:attribute:: id :type: str .. py:attribute:: project_id :type: str .. py:attribute:: name :type: str .. py:attribute:: description :type: str | None .. py:attribute:: depends_on_system_ids :type: list[str] .. py:attribute:: status :type: str | None .. py:class:: Item .. py:attribute:: id :type: str .. py:attribute:: project_id :type: str .. py:attribute:: item_type :type: str .. py:attribute:: title :type: str .. py:attribute:: body :type: str | None .. py:attribute:: source_url :type: str | None .. py:attribute:: parent_item_id :type: str | None .. py:attribute:: work_unit_id :type: str | None .. py:attribute:: source_ref :type: str | None .. py:attribute:: actor_id :type: str .. py:attribute:: system_ids :type: list[str] .. py:attribute:: tags :type: list[str] .. py:attribute:: rationale :type: str | None .. py:attribute:: alternatives :type: Any .. py:attribute:: confidence :type: str | None .. py:attribute:: supersedes_id :type: str | None .. py:attribute:: deleted_at :type: datetime.datetime | None .. py:attribute:: expires_at :type: datetime.datetime | None .. py:attribute:: source_type :type: str | None .. py:attribute:: source_page_id :type: str | None .. py:attribute:: stable_section_key :type: str | None .. py:attribute:: current_section_path :type: str | None .. py:attribute:: start_anchor :type: str | None .. py:attribute:: content_hash :type: str | None .. py:attribute:: source_version :type: int .. py:attribute:: last_synced_at :type: datetime.datetime | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: updated_at :type: datetime.datetime .. py:attribute:: context :type: dict[str, Any] .. py:class:: ItemType Registry entry for an item_type (e.g. 'task', 'qa_check', 'sprint'). .. py:attribute:: key :type: str .. py:attribute:: display_name :type: str .. py:attribute:: schema :type: dict[str, Any] .. py:attribute:: owner :type: str .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: updated_at :type: datetime.datetime .. py:class:: Link .. py:attribute:: from_item_id :type: str .. py:attribute:: to_item_id :type: str .. py:attribute:: link_type :type: str .. py:attribute:: strength :type: int .. py:attribute:: note :type: str | None .. py:attribute:: created_by_actor_id :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:class:: Idea Append-only ideation note attached to a work unit. Separate from ``Item`` because lifecycle and intent differ: ``Idea`` is a 탐색 흔적 (exploratory trace), ``Item`` is a 확정된 기록 (committed record). Mistakes are recovered via the redact pattern (``redacted_at`` / ``redacted_by``) — never deleted. .. py:attribute:: id :type: str .. py:attribute:: work_unit_id :type: str .. py:attribute:: project_id :type: str .. py:attribute:: text :type: str .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: created_by :type: str | None .. py:attribute:: redacted_at :type: datetime.datetime | None :value: None .. py:attribute:: redacted_by :type: str | None :value: None .. py:class:: Capture Raw text intake outside the curated items graph. .. py:attribute:: id :type: str .. py:attribute:: text :type: str .. py:attribute:: summary :type: str | None .. py:attribute:: review_state :type: str .. py:attribute:: sensitivity_hint :type: str .. py:attribute:: signals :type: dict[str, Any] .. py:attribute:: created_by :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: updated_at :type: datetime.datetime .. py:attribute:: redacted_at :type: datetime.datetime | None :value: None .. py:attribute:: redacted_by :type: str | None :value: None .. py:class:: CapturePromotion Bridge from a raw capture to a curated item. .. py:attribute:: capture_id :type: str .. py:attribute:: target_item_id :type: str .. py:attribute:: promoted_as :type: str .. py:attribute:: created_by :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:class:: GlossaryGroup .. py:attribute:: id :type: str .. py:attribute:: project_id :type: str .. py:attribute:: scope :type: str .. py:attribute:: scope_id :type: str | None .. py:attribute:: canonical :type: str .. py:attribute:: definition :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: created_by :type: str | None .. py:attribute:: last_reviewed_at :type: datetime.datetime | None .. py:attribute:: last_reviewed_by :type: str | None .. py:class:: GlossaryTerm .. py:attribute:: id :type: str .. py:attribute:: group_id :type: str | None .. py:attribute:: surface :type: str .. py:attribute:: normalized :type: str .. py:attribute:: is_protected :type: bool .. py:attribute:: status :type: str .. py:attribute:: source_item_id :type: str | None .. py:attribute:: context_snippet :type: str | None .. py:attribute:: decided_by :type: str | None .. py:attribute:: decided_at :type: datetime.datetime | None .. py:attribute:: created_at :type: datetime.datetime .. py:class:: GlossaryRejection .. py:attribute:: group_id :type: str .. py:attribute:: rejected_term :type: str .. py:attribute:: rejected_by :type: str | None .. py:attribute:: rejected_at :type: datetime.datetime .. py:attribute:: reason :type: str | None .. py:class:: HistoryEntry .. py:attribute:: id :type: int .. py:attribute:: item_id :type: str .. py:attribute:: version :type: int .. py:attribute:: content_before :type: str | None .. py:attribute:: content_after :type: str | None .. py:attribute:: content_hash_before :type: str | None .. py:attribute:: content_hash_after :type: str | None .. py:attribute:: diff_summary :type: str | None .. py:attribute:: semantic_impact :type: str | None .. py:attribute:: changed_at :type: datetime.datetime .. py:attribute:: changed_by :type: str .. py:attribute:: source_event_id :type: str | None .. py:attribute:: notification_sent :type: bool .. py:class:: AuditEntry .. py:attribute:: id :type: int .. py:attribute:: timestamp :type: datetime.datetime .. py:attribute:: actor_id :type: str .. py:attribute:: action :type: str .. py:attribute:: target_type :type: str | None .. py:attribute:: target_id :type: str | None .. py:attribute:: metadata :type: dict[str, Any] | None .. py:class:: SyncJob .. py:attribute:: id :type: int .. py:attribute:: source_type :type: str .. py:attribute:: source_page_id :type: str .. py:attribute:: source_event_id :type: str | None .. py:attribute:: payload :type: str | None .. py:attribute:: scheduled_at :type: datetime.datetime .. py:attribute:: status :type: str .. py:attribute:: attempts :type: int .. py:attribute:: last_error :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: updated_at :type: datetime.datetime .. py:class:: ItemCreate Input for creating an item. id is auto-generated if omitted. .. py:attribute:: project_id :type: str .. py:attribute:: item_type :type: str .. py:attribute:: title :type: str .. py:attribute:: actor_id :type: str .. py:attribute:: body :type: str | None :value: None .. py:attribute:: source_url :type: str | None :value: None .. py:attribute:: parent_item_id :type: str | None :value: None .. py:attribute:: work_unit_id :type: str | None :value: None .. py:attribute:: source_ref :type: str | None :value: None .. py:attribute:: system_ids :type: list[str] :value: [] .. py:attribute:: tags :type: list[str] :value: [] .. py:attribute:: rationale :type: str | None :value: None .. py:attribute:: alternatives :type: Any :value: None .. py:attribute:: confidence :type: str | None :value: None .. py:attribute:: supersedes_id :type: str | None :value: None .. py:attribute:: expires_at :type: datetime.datetime | None :value: None .. py:attribute:: context :type: dict[str, Any] .. py:attribute:: source_type :type: str | None :value: None .. py:attribute:: source_page_id :type: str | None :value: None .. py:attribute:: stable_section_key :type: str | None :value: None .. py:attribute:: current_section_path :type: str | None :value: None .. py:attribute:: start_anchor :type: str | None :value: None .. py:attribute:: content_hash :type: str | None :value: None .. py:class:: SearchResult .. py:attribute:: item :type: Item .. py:attribute:: score :type: float .. py:attribute:: snippet :type: str | None :value: None