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.