b4bd772d67
src/type_aliases.py had two exact anti-patterns the user flagged: 1. Line 91: 'ToolCall: TypeAlias = Metadata' -- the dict alias the user called out as 'the exact bad pattern'. Now points to the canonical @dataclass(frozen=True, slots=True) class ToolCall in openai_schemas.py. 2. Lines 53-69: duplicate FileItem dataclass with 8 fields (path, content, view_mode, summary, skeleton, annotations, tags) that conflicted with the canonical models.FileItem (10 fields: path, auto_aggregate, force_full, view_mode, selected, ast_signatures, ast_definitions, ast_mask, custom_slices, injected_at). Two FileItem types was the 'FileItem is duplicated in TWO places' blocker. Duplicate removed; FileItem now aliases models.FileItem. state.toml updated to honest state: status='active', current_phase=0, phases 2-10 marked 'not_done', 3 of 5 blockers fixed in this commit, 2 blockers (RAG return type, tool builders dicts) remain open with followup tracks planned. The 5 files that import ToolCall from src.type_aliases (aggregate/ai_client/api_hook_client/app_controller/models) only use it as a type annotation -- no constructor calls, no .from_dict() calls. Safe to fix the alias.