# 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`
