Member Junction
    Preparing search index...
    CATALOG_OBJECT_COLUMNS: readonly [
        "ID",
        "IntegrationID",
        "Name",
        "DisplayName",
        "Description",
        "Category",
        "APIPath",
        "ResponseDataKey",
        "DefaultPageSize",
        "SupportsPagination",
        "PaginationType",
        "SupportsIncrementalSync",
        "SupportsWrite",
        "DefaultQueryParams",
        "Configuration",
        "Sequence",
        "Status",
        "WriteAPIPath",
        "WriteMethod",
        "DeleteMethod",
        "IsCustom",
        "CreateAPIPath",
        "CreateMethod",
        "CreateBodyShape",
        "CreateBodyKey",
        "CreateIDLocation",
        "UpdateAPIPath",
        "UpdateMethod",
        "UpdateBodyShape",
        "UpdateBodyKey",
        "UpdateIDLocation",
        "DeleteAPIPath",
        "DeleteIDLocation",
        "IncrementalWatermarkField",
        "MetadataSource",
        "SupportsCreate",
        "SupportsUpdate",
        "SupportsDelete",
        "SyncStrategy",
        "ContentHashApplicable",
        "StableOrderingKey",
        "CompanyIntegrationID",
        "IntegrationObjectID",
        "Provenance",
        "ProvenanceDetail",
        "IsSelected",
        "SelectedAt",
        "FirstSeenAt",
        "LastSeenAt",
        "LastSampledAt",
    ] = ...

    Columns the object projection reads. The first 43 are IntegrationObject's own, copied verbatim so a per-connection row answers every question a shared row answers; the rest are what per-connection rows add. IntegrationID is deliberately among the first group and denormalised onto the table: connectors read it off the object, and a join per read would be the wrong trade.