# TIME Phase T3 — Projection, representations, and embedding enqueueing This phase adds the NEW-only TIME projection layer on top of the Leitstand import foundation from T2. ## Scope Included in T3: - `TIME.time_entry_search_projection` - Leitstand projection builder from imported `TIME.ls_*` tables - semantic text materialization for canonical `DOC.doc_document` roots of `TIME.time_entry` - lexical indexing through `DOC.doc_text_representation.search_vector` - embedding job enqueueing for the TIME primary semantic representation Not included yet: - structured search endpoint - dedicated TIME search DTOs - Toggl import - cross-source search ## Representation strategy One root semantic representation is generated per canonical `TIME.time_entry` document. The semantic text is built from: - Time recording description / remark / ID / URL - person display name - activity type - task ids / names / descriptions - cost unit ids / names / descriptions - contract names / references - contract position names / references - organization names - recorded time window and duration This keeps the searchable unit aligned with the future common TIME search concept: one canonical time-entry document enriched with source-specific business context. ## Operational notes After T2 import runs, T3 can immediately refresh projection rows for the imported Leitstand time recordings. A separate startup runner is also available for rebuilding all TIME projections and semantic representations for already-imported rows: ```yaml id: time-t3-startup dip: time: leitstand: startup-projection-rebuild-enabled: false build-search-projection: true build-representations: true representation-language-code: de ``` ## Files added in this phase - `TIME.time_entry_search_projection` - `LeitstandTimeProjectionService` - `TimeEntryRepresentationMaterializationService` - `LeitstandTimeProjectionStartupRunner`