title promoted to SUPABASE_EXTRA_COLUMNS (projects, site_visits, sow_lines)

Bug: supabase_write_service update_record promotes ss_fields to denormalized Supabase columns via config.SUPABASE_FIELD_MAP plus config.SUPABASE_EXTRA_COLUMNS. "title" was in neither, so passing {"title": ...} updated only raw_data — the denormalized title column (which portal lists/search read) stayed stale. Found 2026-07-30 while fixing the VAB-9008 mis-parsed intake, where the title correction needed a direct client.table().update() workaround.

Fix (entirely-api 97be064, pushed + deployed): added "title" to SUPABASE_EXTRA_COLUMNS for projects, site_visits, and sow_lines (each verified live to have a title column). No SmartSuite-slug constant maps to a title column, so this is non-redundant. Parametrized regression test in tests/test_supabase_write_service.py (test_update_record_promotes_title_column). Suite 279 passed host-side (cert_pipeline pillow_heif collection skip pre-existing, container-only).

Note: a title-only sow_lines update via generic update_record does NOT clear the migration-026 ABSoW stamp — the clear hooks live in update_sow_line/create/delete paths and title is not in _SOW_SCOPE_KEYS.

Rule: Supabase-only columns (no SmartSuite slug) that callers pass by column name must be listed in SUPABASE_EXTRA_COLUMNS, or writes silently land only in raw_data.