This document is the authoritative reference for all data the member service sends to the indexer service, which makes resources searchable via the query service.
Update this document in the same PR as any change to indexer message construction.
Note: The
EventPublisherinterface (internal/domain/port/event_publisher.go) exists with placeholderanytypes. Concreteindexertypes.IndexingConfigandfgasync.GenericFGAMessagetypes will be wired in a later ticket. The schemas below reflect the intended contract.
Source struct: internal/domain/model/member.go — MembershipTier
Indexed on: create, update, delete of a membership tier (Salesforce Product2).
| Field | Type | Description |
|---|---|---|
uid |
string | Tier unique identifier (invertible UUID v8 from Product2.Id) |
project_uid |
string | v2 UUID of the project this tier belongs to |
name |
string | Product name (e.g., "Gold Corporate Membership") |
family |
string (optional) | Product family (e.g., "Membership"); omitted when empty |
product_type |
string (optional) | Product type (Type__c on Product2); omitted when empty |
created_at |
timestamp | Creation time (RFC3339) |
updated_at |
timestamp | Last update time (RFC3339) |
project_slugis used internally for resolver round-trips and is not included in indexed data.
| Tag Format | Example | Purpose |
|---|---|---|
{uid} |
a1b2c3d4-... |
Direct lookup by UID |
membership_tier_uid:{uid} |
membership_tier_uid:a1b2c3d4-... |
Namespaced lookup by UID |
project_uid:{value} |
project_uid:cbef1ed5-... |
Find tiers for a project |
| Field | Value |
|---|---|
access_check_object |
project:{project_uid} |
access_check_relation |
auditor |
history_check_object |
project:{project_uid} |
history_check_relation |
auditor |
| Field | Value |
|---|---|
fulltext |
name, family |
name_and_aliases |
name |
sort_name |
name |
public |
false (access-controlled by project membership) |
| Ref | Condition |
|---|---|
project:{project_uid} |
Always set |
Source struct: internal/domain/model/membership.go — ProjectMembership
Indexed on: create, update, delete of a project membership (Salesforce Asset).
| Field | Type | Description |
|---|---|---|
uid |
string | Membership unique identifier (invertible UUID v8 from Asset.Id) |
tier_uid |
string | UID of the associated MembershipTier (Product2) |
project_uid |
string | v2 UUID of the project this membership belongs to |
project_slug |
string (optional) | URL slug of the associated project; omitted when empty |
b2b_org_uid |
string (optional) | UID of the member company (B2BOrg, derived from Account.Id); omitted when empty |
status |
string | Membership status (e.g., "Active", "Expired") |
year |
string (optional) | Membership year (e.g., "2025"); omitted when empty |
tier |
string (optional) | Membership tier label (e.g., "Gold"); omitted when empty |
auto_renew |
bool | Whether automatic renewal is enabled |
renewal_type |
string (optional) | Renewal cadence (e.g., "Annual"); omitted when empty |
price |
float64 (optional) | Current membership price; omitted when zero |
annual_full_price |
float64 (optional) | Full annual list price before discounts; omitted when zero |
payment_frequency |
string (optional) | Payment frequency; omitted when empty |
payment_terms |
string (optional) | Payment terms (e.g., "Net 30"); omitted when empty |
agreement_date |
string (optional) | Date agreement was signed; omitted when empty |
purchase_date |
string (optional) | Effective purchase date (COALESCE of PurchaseDate, InstallDate, CreatedDate); omitted when empty |
start_date |
string (optional) | Membership start date (InstallDate); omitted when empty |
end_date |
string (optional) | Membership end date (UsageEndDate); omitted when empty |
company_name |
string | Member company name (denormalized from Account) |
company_logo_url |
string (optional) | Member company logo URL (denormalized from Account); omitted when empty |
company_domain |
string (optional) | Member company website/domain (denormalized from Account.Website); omitted when empty |
tier_name |
string (optional) | Product name (denormalized from Product2); omitted when empty |
tier_family |
string (optional) | Product family (denormalized from Product2); omitted when empty |
tier_product_type |
string (optional) | Product type (denormalized from Product2); omitted when empty |
created_at |
timestamp | Creation time (RFC3339) |
updated_at |
timestamp | Last update time (RFC3339) |
AccountSFIDis used internally for write-path operations and is not included in indexed data.
| Tag Format | Example | Purpose |
|---|---|---|
{uid} |
d4e5f6a7-... |
Direct lookup by UID |
project_membership_uid:{uid} |
project_membership_uid:d4e5f6a7-... |
Namespaced lookup by UID |
project_uid:{value} |
project_uid:cbef1ed5-... |
Find memberships for a project |
tier_uid:{value} |
tier_uid:a1b2c3d4-... |
Find memberships by tier |
b2b_org_uid:{value} |
b2b_org_uid:e8f9a0b1-... |
Find memberships for a company |
status:{value} |
status:Active |
Find memberships by status |
year:{value} |
year:2025 |
Find memberships by year |
company_name:{value} |
company_name:The Linux Foundation |
Find memberships by company name |
company_domain:{value} |
company_domain:linuxfoundation.org |
Find memberships by company domain |
Tags for
b2b_org_uid,status,year,company_name, andcompany_domainare only emitted when the value is non-empty.
| Field | Value |
|---|---|
access_check_object |
project:{project_uid} |
access_check_relation |
auditor |
history_check_object |
project:{project_uid} |
history_check_relation |
auditor |
| Field | Value |
|---|---|
fulltext |
company_name, tier_name, tier |
name_and_aliases |
company_name, tier_name (non-empty values only) |
sort_name |
company_name |
public |
false (access-controlled by project membership) |
| Ref | Condition |
|---|---|
project:{project_uid} |
Always set |
membership_tier:{tier_uid} |
Always set |
b2b_org:{b2b_org_uid} |
Only when b2b_org_uid is non-empty |
Source struct: internal/domain/model/key_contact.go — KeyContact
Indexed on: create, update, delete of a key contact (Salesforce Project_Role__c).
| Field | Type | Description |
|---|---|---|
uid |
string | Key contact unique identifier (invertible UUID v8 from Project_Role__c.Id) |
membership_uid |
string | UID of the associated ProjectMembership (Asset) |
tier_uid |
string | UID of the associated MembershipTier (Product2) |
project_uid |
string | v2 UUID of the project this key contact belongs to |
b2b_org_uid |
string (optional) | UID of the member company (B2BOrg, derived from Account.Id); omitted when empty |
role |
string | Contact role designation (e.g., "Voting Representative") |
status |
string | Role record status (e.g., "Active") |
board_member |
bool | Whether this contact holds a board member role |
primary_contact |
bool | Whether this is the primary contact for the membership |
first_name |
string | Contact first name (denormalized from Contact) |
last_name |
string | Contact last name (denormalized from Contact) |
title |
string (optional) | Job title (denormalized from Contact); omitted when empty |
email |
string (optional) | Primary email from Alternate_Email__c where Primary_Email__c = true; omitted when empty |
company_name |
string | Member company name (denormalized from Account via membership Asset) |
company_logo_url |
string (optional) | Member company logo URL (denormalized from Account); omitted when empty |
company_domain |
string (optional) | Member company website/domain (denormalized from Account.Website); omitted when empty |
created_at |
timestamp | Creation time (RFC3339) |
updated_at |
timestamp | Last update time (RFC3339) |
project_slugis used internally for resolver round-trips and is not included in indexed data.
| Tag Format | Example | Purpose |
|---|---|---|
{uid} |
b2c3d4e5-... |
Direct lookup by UID |
key_contact_uid:{uid} |
key_contact_uid:b2c3d4e5-... |
Namespaced lookup by UID |
membership_uid:{value} |
membership_uid:d4e5f6a7-... |
Find key contacts for a membership |
project_uid:{value} |
project_uid:cbef1ed5-... |
Find key contacts for a project |
b2b_org_uid:{value} |
b2b_org_uid:e8f9a0b1-... |
Find key contacts for a company |
role:{value} |
role:Voting Representative |
Find key contacts by role |
status:{value} |
status:Active |
Find key contacts by status |
email:{value} |
email:user@example.com |
Find key contacts by email |
company_name:{value} |
company_name:The Linux Foundation |
Find key contacts by company name |
company_domain:{value} |
company_domain:linuxfoundation.org |
Find key contacts by company domain |
Tags for
b2b_org_uid,role,status,company_name, andcompany_domainare only emitted when the value is non-empty.
| Field | Value |
|---|---|
access_check_object |
project:{project_uid} |
access_check_relation |
auditor |
history_check_object |
project:{project_uid} |
history_check_relation |
auditor |
| Field | Value |
|---|---|
fulltext |
first_name, last_name, email, company_name, role |
name_and_aliases |
first_name, last_name, email (non-empty values only) |
sort_name |
last_name |
public |
false (access-controlled by project membership) |
| Ref | Condition |
|---|---|
project:{project_uid} |
Always set |
project_membership:{membership_uid} |
Always set |
b2b_org:{b2b_org_uid} |
Only when b2b_org_uid is non-empty |
Source struct: internal/domain/model/b2b_org.go — B2BOrg
Indexed on: create, update, delete of a B2B organization (Salesforce Account).
| Field | Type | Description |
|---|---|---|
uid |
string | Organization unique identifier (invertible UUID v8 from Account.Id) |
name |
string | Organization display name |
website |
string (optional) | Website URL — always includes scheme (http/https); omitted when empty or unparseable |
primary_domain |
string (optional) | Normalized primary domain (bare host, e.g., "example.com"); omitted when empty or invalid |
domain_aliases |
array[string] (optional) | Additional normalized domains; each item normalized with the same rules as primary_domain; invalid items are dropped |
logo_url |
string (optional) | Organization logo image URL; omitted when empty |
created_at |
timestamp | Creation time (RFC3339) |
updated_at |
timestamp | Last update time (RFC3339) |
SFID(raw SalesforceAccount.Id) is used internally and is not included in indexed data.
| Tag Format | Example | Purpose |
|---|---|---|
{uid} |
e8f9a0b1-... |
Direct lookup by UID |
b2b_org_uid:{uid} |
b2b_org_uid:e8f9a0b1-... |
Namespaced lookup by UID |
primary_domain:{value} |
primary_domain:linuxfoundation.org |
Find org by primary domain |
domain_alias:{value} |
domain_alias:lf.org |
Find org by an alias domain |
name:{value} |
name:The Linux Foundation |
Find org by name |
Tags for
primary_domain,domain_alias, andnameare only emitted when the value is non-empty. Onedomain_alias:{value}tag is emitted per entry indomain_aliases.
| Field | Value |
|---|---|
access_check_object |
b2b_org:{uid} |
access_check_relation |
viewer |
history_check_object |
b2b_org:{uid} |
history_check_relation |
auditor |
| Field | Value |
|---|---|
fulltext |
name, primary_domain, website |
name_and_aliases |
name, primary_domain (non-empty values only) |
sort_name |
name |
public |
false (access-controlled) |
(none — B2BOrg is a top-level entity)