
###########################################################################
# This file contains the source of truth for the set of EncodingConfigs
# that are registered in version 0.1 of Cobalt.
#
# This file is maintained by hand. To add a new EncodingConfig or change
# the definition of an EncodingConfig, manually edit this file and
# commit the change to the Cobalt repo.
#
# The format of this file is the textual representation of the
# RegisteredEncodings Protocol Buffer message, which is defined in
# encodings.proto
##########################################################################


#########################
# Customer 1 (Fuchsia)
########################

########################### Project 100: Ledger ###############################

#####################################################################
# EncodingConfig(1, 100, 1)
#
# DEPRECATED: Please use EncodingConfig (1, 100, 2) instead.
#
# Name:  Basic RAPPOR for Rare Event Occurrences
# Description: A Configuration of Basic RAPPOR with no privacy, with string
#              category names, and with one category for each rare event.
######################################################################
element {
  customer_id: 1
  project_id: 100
  id: 1
  basic_rappor {
    prob_0_becomes_1: 0.0
    prob_1_stays_1: 1.0
    string_categories: {
      category: "Ledger-startup"
      category: "Commits-received-out-of-order"
      category: "Commits-merged"
      category: "Merged-commits-merged"
      category: "Commits-received-out-of-order-not-recovered"
    }
  }
}

#####################################################################
# EncodingConfig(1, 100, 2)
# Name:  Basic RAPPOR for Rare Event Occurrences
# Description: A Configuration of Basic RAPPOR with no privacy, with 128
#              indexed categories.
######################################################################
element {
  customer_id: 1
  project_id: 100
  id: 2
  basic_rappor {
    prob_0_becomes_1: 0.0
    prob_1_stays_1: 1.0
    indexed_categories: {
      num_categories: 128
    }
  }
}

##################### Project 101: Module Usage Tracking ######################

#####################################################################
# EncodingConfig(1, 101, 1)
# Name:  Forculus with minimal privacy
# Description:  We are using Forculus to collect arbitrary strings. We don't
#               need privacy at this time so we use a threshold of 2 and
#               an aggregation epoch of a month. This means that a string
#               will be decoded as long as it as sent by at least two differnt
#               devices in any given calendar month. At the time of this writing
#               we have not yet implemented persistent device identity so
#               every re-start of the Cobalt Client process on a Fuchsia
#               system counts as a new device.
######################################################################
element {
  customer_id: 1
  project_id: 101
  id: 1
  forculus {
    threshold: 2
    epoch_type: MONTH
  }
}

######################### Project 102: System Metrics ##########################

#####################################################################
# EncodingConfig(1, 102, 1)
# Name:  NoOp encoding
# Description:  Observations are sent unencoded.
######################################################################
element {
  customer_id: 1
  project_id: 102
  id: 1
  no_op_encoding {
  }
}


################################################################################
#      ***  NOTICE: Below this line are testing-only projects. ***
#
#           These project must all use project IDs less than 100.
################################################################################

## Project 1: End-to-End test

#### EncodingConfig(1, 1, 1)
element {
  customer_id: 1
  project_id: 1
  id: 1
  forculus {
    threshold: 20
    epoch_type: DAY
  }
}

#### EncodingConfig(1, 1, 2)
element {
  customer_id: 1
  project_id: 1
  id: 2
  basic_rappor {
    prob_0_becomes_1: 0.1
    prob_1_stays_1: 0.9
    int_range_categories: {
      first: 0
      last:  23
    }
  }
}

#### EncodingConfig(1, 1, 3)
element {
  customer_id: 1
  project_id: 1
  id: 3
  basic_rappor {
    prob_0_becomes_1: 0.01
    prob_1_stays_1: 0.99
    string_categories: {
      category: "apple"
      category: "banana"
      category: "cantaloupe"
    }
  }
}

#### EncodingConfig(1, 1, 4)
element {
  customer_id: 1
  project_id: 1
  id: 4
  basic_rappor {
    prob_0_becomes_1: 0.2
    prob_1_stays_1: 0.8
    int_range_categories: {
      first: 0
      last:  10
    }
  }
}

#### EncodingConfig(1, 1, 5)
element {
  customer_id: 1
  project_id: 1
  id: 5
  basic_rappor {
    prob_0_becomes_1: 0.0
    prob_1_stays_1: 1.0
    indexed_categories: {
      num_categories: 100
    }
  }
}

# Encoding (1, 1, 6) is the No-Op encoding.
element {
  customer_id: 1
  project_id: 1
  id: 6
  no_op_encoding {
  }
}

## Project 2: Fuchsia Test App

#####################################################################
# EncodingConfig(1, 2, 1)
# Name:  Basic RAPPOR for Daily Rare Event Counts
# Description: A Configuration of Basic RAPPOR with no privacy, with string
#              category names, and with one category for each rare event.
######################################################################
element {
  customer_id: 1
  project_id: 2
  id: 1
  basic_rappor {
    prob_0_becomes_1: 0.0
    prob_1_stays_1: 1.0
    string_categories: {
      category: "Ledger-startup"
      category: "Commits-received-out-of-order"
      category: "Commits-merged"
      category: "Merged-commits-merged"
    }
  }
}

#####################################################################
# EncodingConfig(1, 2, 2)
# Name:  Forculus with minimal privacy
# Description:  We are using Forculus to collect arbitrary strings. We don't
#               need privacy at this time so we use a threshold of 2 and
#               an aggregation epoch of a month. This means that a string
#               will be decoded as long as it as sent by at least two differnt
#               devices in any given calendar month. At the time of this writing
#               we have not yet implemented persistent device identity so
#               every re-start of the Cobalt Client process on a Fuchsia
#               system counts as a new device.
######################################################################
element {
  customer_id: 1
  project_id: 2
  id: 2
  forculus {
    threshold: 2
    epoch_type: MONTH
  }
}

#####################################################################
# EncodingConfig(1, 2, 3)
# Name:  Basic RAPPOR for Rare Event Occurrences
# Description: A Configuration of Basic RAPPOR with no privacy, with 128
#              indexed categories.
######################################################################
element {
  customer_id: 1
  project_id: 2
  id: 3
  basic_rappor {
    prob_0_becomes_1: 0.0
    prob_1_stays_1: 1.0
    indexed_categories: {
      num_categories: 128
    }
  }
}
