Updates
rb2b industry writes crosswalk ontoindustry_select (issue #905)
#805 mapped rb2b company firmographics onto whatever attribute already
existed, which put industry verbatim onto the legacy industry text
attribute. That attribute is what the crm-uploader ai-3fs migration is
retiring — the canonical industry taxonomy lives on the sibling
industry_select single-select seeded with the HubSpot enum, and the text
attribute already carries the Title-Case “pollution” class that migration
catalogued and dropped. rb2b’s verbatim labels (“Software”, “SaaS”) joined
that pollution instead of the taxonomy.
rb2b labels now crosswalk onto their industry_select option
(“Software” → COMPUTER_SOFTWARE) via a curated table in
libs.attio.values.format_company_industry_select. The mapping inherits the
gtm-cd0ix select-write guard by joining _ENRICHMENT_SELECT_FIELDS, so an
archived attribute (ai-e6e’s documented failure mode for this very slug) or a
renamed option drops the write with an attio_industry_field_unavailable /
attio_industry_option_unavailable warning instead of 400ing the whole
upsert. A label with no crosswalk entry is dropped with an
attio_industry_unmapped warning — the raw value still lands in the
tracking-event body JSON. The dispatcher’s merge_only_if_empty guard for
industry now reads industry_select, or it would silently no-op whenever
only the select was populated.
Three backstop mappings split onto the Title-Case LinkedIn-v2 options the
live list turned out to carry (verified active on dev + prod 2026-10-05,
resolving the review threads on #926): “professional services” now lands on
Professional Services instead of MANAGEMENT_CONSULTING (consultant
vocabulary stays on the enum title), and “manufacturing” / “engineering
services” land on Manufacturing / Engineering Services instead of the
V1 best-fit MECHANICAL_OR_INDUSTRIAL_ENGINEERING, which conflated
machinery makers with engineering-services firms.
Deliberately unchanged: estimate_revenue keeps its #805 lower-bound write
onto the annualrevenue currency — the alternative estimated_arr_usd band
select is an Estimated ARR field (semantic mismatch for a revenue value)
and drops off-band ranges like rb2b’s $5M - $20M. employee_count keeps
its bucketed employee_range write. The verbatim-text formatter
(format_company_industry) is retired — it was absent from
contracts/downstream_api.toml and every consumer repo before removal.