Indexer Contract

May 27, 2026 · View on GitHub

This document is the authoritative reference for all data the committee 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.


Resource Types


Committee

Object type: committee

NATS subject: lfx.index.committee

Source struct: internal/domain/model/committee_base.goCommitteeBase

Indexed on: create, update, delete of a committee.

Data Schema

These fields are indexed and queryable via filters or cel_filter in the query service.

FieldTypeDescription
uidstringCommittee unique identifier
project_uidstringUID of the owning project
project_namestring (optional)Name of the owning project
project_slugstring (optional)Slug of the owning project
namestringCommittee name
display_namestring (optional)Display name (may differ from name)
categorystringCommittee category (e.g., Board, TSC)
descriptionstring (optional)Committee description
websitestring (optional)Committee website URL
mailing_liststring (optional)Mailing list address
chat_channelstring (optional)Chat channel identifier
enable_votingboolWhether voting is enabled
sso_group_enabledboolWhether SSO group is enabled
sso_group_namestring (optional)SSO group name
requires_reviewboolWhether membership requires review
publicboolWhether the committee is publicly visible
join_modestring (optional)How members can join
calendar.publicbool (optional)Whether the committee calendar is public; omitted when the calendar object is empty
parent_uidstring (optional)UID of the parent committee (if nested)
total_membersintCurrent total member count
total_voting_reposintCurrent total voting repos count
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}061a110a-7c38-4cd3-bfcf-fc8511a37f35Direct lookup by UID
committee_uid:{uid}committee_uid:061a110a-7c38-4cd3-bfcf-fc8511a37f35Namespaced lookup by UID
project_uid:{value}project_uid:cbef1ed5-17dc-4a50-84e2-6cddd70f6878Find committees for a project
project_slug:{value}project_slug:test-project-slug-1Find committees by project slug
parent_uid:{value}parent_uid:9493eae5-cd73-4c4a-b28f-3b8ec5280f6cFind child committees of a parent
category:{value}category:BoardFind committees by category

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{uid}
access_check_relationviewer
history_check_objectcommittee:{uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextname, display_name, description
name_and_aliasesname, display_name (deduplicated)
sort_namename
publicset from committee.public

Parent References

RefCondition
project:{project_uid}Always set
committee:{parent_uid}Only when parent_uid is set

Committee Settings

Object type: committee_settings

NATS subject: lfx.index.committee_settings

Source struct: internal/domain/model/committee_settings.goCommitteeSettings

Indexed on: create, update, delete of committee settings. Settings share the same UID as their parent committee.

Data Schema

FieldTypeDescription
uidstringCommittee UID (same as the parent committee)
business_email_requiredboolWhether a business email is required to join
show_meeting_attendeesboolWhether meeting attendees are visible
member_visibilitystringWho can see members
last_reviewed_atstring (optional)RFC3339 timestamp of the last membership review
last_reviewed_bystring (optional)UID of who performed the last review
writers[]objectUsers with write access. Each object has avatar (string), email (string), name (string), username (string — holds the user ID / sub value), and optionally invite (object — see Invite Object) when the user has no LFID yet
auditors[]objectUsers with audit access. Each object has avatar (string), email (string), name (string), username (string — holds the user ID / sub value), and optionally invite (object — see Invite Object) when the user has no LFID yet
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

Invite Object

When a user in writers or auditors has no LFID yet (their username is empty), a pending invite is tracked in a nested invite object. The invite is cleared and username is populated when the user accepts the invite.

FieldTypeDescription
uidstringInvite UID returned by the invite service
emailstringEmail address the invite was delivered to
expires_attimestamp (optional)Invite expiry time (RFC3339); absent if the invite service did not return an expiry

Tags

Same tag set as the parent Committee.

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee_settings:{uid}
access_check_relationauditor
history_check_objectcommittee_settings:{uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltext(none)
name_and_aliases(none)
sort_name(none)
publicvalue of parent committee's public field

Parent References

(none)


Committee Member

Object type: committee_member

NATS subject: lfx.index.committee_member

Source struct: internal/domain/model/committee_member.goCommitteeMember

Indexed on: create, update, delete of a committee member.

Data Schema

FieldTypeDescription
uidstringMember unique identifier
committee_uidstringUID of the committee this member belongs to
committee_namestringName of the committee
committee_categorystringCategory of the committee
project_uidstring (optional)UID of the owning project
project_slugstring (optional)Slug of the owning project
usernamestringMember's username
emailstringMember's email address
first_namestringMember's first name
last_namestringMember's last name
job_titlestring (optional)Member's job title
linkedin_profilestring (optional)Member's LinkedIn profile URL
appointed_bystringWho appointed this member
statusstringMembership status
role.namestringRole name within the committee
role.start_datestring (optional)Role start date
role.end_datestring (optional)Role end date
voting.statusstringVoting status (e.g., Voting Rep, Non-Voting)
voting.start_datestring (optional)Voting eligibility start date
voting.end_datestring (optional)Voting eligibility end date
organization.idstring (optional)Member's organization ID
organization.namestringMember's organization name
organization.websitestring (optional)Member's organization website
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}c53dc2b0-b7ed-483f-9296-b7d904e8d168Direct lookup by UID
committee_member_uid:{uid}committee_member_uid:c53dc2b0-b7ed-483f-9296-b7d904e8d168Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-7c38-4cd3-bfcf-fc8511a37f35Find members of a committee
committee_category:{value}committee_category:BoardFind members by committee category
username:{value}username:govofficial4Find members by username
email:{value}email:gac010@example.comFind members by email
voting_status:{value}voting_status:Voting RepFind members by voting status
organization_id:{value}organization_id:org-789Find members by organization ID
organization_name:{value}organization_name:The Linux FoundationFind members by organization name
organization_website:{value}organization_website:linuxfoundation.orgFind members by organization website
project_uid:{value}project_uid:cbef1ed5-17dc-4a50-84e2-6cddd70f6878Find members by project UID
project_slug:{value}project_slug:test-projectFind members by project slug

Tags for username, email, voting_status, organization_id, organization_name, organization_website, project_uid, and project_slug are only emitted when the value is non-empty.

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextfirst_name, last_name, email, organization.name
name_and_aliasescommittee_name, first_name, last_name, username (non-empty values only)
sort_namefirst_name
publicinherits from parent committee

Parent References

RefCondition
committee:{committee_uid}Always set

Committee Invite

Object type: committee_invite

NATS subject: lfx.index.committee_invite

Source struct: internal/domain/model/committee_invite.goCommitteeInvite

Indexed on: create, update, delete of a committee invite.

Data Schema

FieldTypeDescription
uidstringInvite unique identifier
committee_uidstringUID of the committee this invite belongs to
invitee_emailstringEmail address of the invitee
rolestringRole the invitee is being invited to
statusstringInvite status (e.g., Pending, Accepted, Declined)
created_attimestampCreation time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}c53dc2b0-...Direct lookup by UID
committee_invite_uid:{uid}committee_invite_uid:c53dc2b0-...Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-...Find invites for a committee
invitee_email:{value}invitee_email:user@example.comFind invites by invitee email
status:{value}status:PendingFind invites by status

Tags for invitee_email and status are only emitted when the value is non-empty.

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextinvitee_email
name_and_aliasesinvitee_email
sort_nameinvitee_email
publicfalse (always)

Parent References

RefCondition
committee:{committee_uid}Always set

Committee Application

Object type: committee_application

NATS subject: lfx.index.committee_application

Source struct: internal/domain/model/committee_application.goCommitteeApplication

Indexed on: create, update, delete of a committee application.

Data Schema

FieldTypeDescription
uidstringApplication unique identifier
committee_uidstringUID of the committee this application belongs to
applicant_emailstringEmail address of the applicant
messagestringApplication message from the applicant
statusstringApplication status (e.g., Pending, Approved, Rejected)
reviewer_notesstringNotes left by the reviewer
created_attimestampCreation time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}a1b2c3d4-...Direct lookup by UID
committee_application_uid:{uid}committee_application_uid:a1b2c3d4-...Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-...Find applications for a committee
applicant_email:{value}applicant_email:user@example.comFind applications by applicant email
status:{value}status:PendingFind applications by status

Tags for applicant_email and status are only emitted when the value is non-empty.

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextmessage
name_and_aliases(none)
sort_name(none)
publicfalse (always)

Parent References

RefCondition
committee:{committee_uid}Always set

Object type: committee_link

NATS subject: lfx.index.committee_link

Source struct: internal/domain/model/committee_link.goCommitteeLink

Indexed on: create, update, delete of a committee link.

Data Schema

FieldTypeDescription
uidstringLink unique identifier
committee_uidstringUID of the owning committee
folder_uidstring (optional)UID of the folder this link belongs to
namestringLink display name
urlstringLink URL
descriptionstring (optional)Link description
created_by_uidstring (optional)UID of the user who created the link
created_by_namestring (optional)Name of the user who created the link
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}a1b2c3d4-...Direct lookup by UID
committee_link_uid:{uid}committee_link_uid:a1b2c3d4-...Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-...Find links belonging to a committee
folder_uid:{value}folder_uid:f0a1b2c3-...Find links within a folder

folder_uid tag is only emitted when folder_uid is set.

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextname, description, url
name_and_aliasesname
sort_namename
publicinherits from parent committee

Parent References

RefCondition
committee:{committee_uid}Always set
committee_link_folder:{folder_uid}Only when folder_uid is set

Object type: committee_link_folder

NATS subject: lfx.index.committee_link_folder

Source struct: internal/domain/model/committee_link.goCommitteeLinkFolder

Indexed on: create, update, delete of a committee link folder.

Data Schema

FieldTypeDescription
uidstringFolder unique identifier
committee_uidstringUID of the owning committee
namestringFolder name
created_by_uidstring (optional)UID of the user who created the folder
created_by_namestring (optional)Name of the user who created the folder
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

Tags

Tag FormatExamplePurpose
{uid}f0a1b2c3-...Direct lookup by UID
committee_link_folder_uid:{uid}committee_link_folder_uid:f0a1b2c3-...Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-...Find folders belonging to a committee

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextname
name_and_aliasesname
sort_namename
publicinherits from parent committee

Parent References

RefCondition
committee:{committee_uid}Always set

Group Weekly Brief

Object type: group_weekly_brief

NATS subject: lfx.index.group_weekly_brief

Source struct: internal/domain/model/group_weekly_brief.goGroupWeeklyBrief (introduced in the entity-read-path PR; this contract entry lands first)

Indexed on: create, update, delete of a group weekly brief draft.

Published briefs will be a future separate entity; this entry covers the draft only.

Data Schema

FieldTypeDescription
uidstringBrief unique identifier
committee_uidstringUID of the committee this brief belongs to
window_starttimestampStart of the brief's reporting window (RFC3339)
window_endtimestampEnd of the brief's reporting window (RFC3339)
statestringDraft state (e.g., empty, generating, generated, edited, approved, error)
brief_textstringGenerated brief body; included in the indexed data payload
source_refs[]objectReferences to the source artifacts the brief was generated from. Each object has kind (string — source category, e.g. meeting, mailing-list, doc), id (string — source-system identifier, a URL or UID), and optionally title (string — short human label) and excerpt (string — the snippet the generator consumed). kind and id are always present; title and excerpt are omitted when empty
prompt_versionstringVersion identifier of the prompt used to generate the brief
modelstringIdentifier of the model used to generate the brief
regeneration_countintNumber of times the brief has been regenerated
private_source_presentboolWhether any source artifact used was private
created_attimestampCreation time (RFC3339)
updated_attimestampLast update time (RFC3339)

State lifecycle. A brief is created in generating when a generate is requested — the request is accepted (202) and the source gather + LLM run asynchronously. On success the brief moves to generated; a manual edit moves it to edited, and approved marks it ready. error is the terminal failure state (no activity in the window, or an AI/generation failure). Typical flow: generating → generated → (edited) → approved, with error reachable from generating. (empty is a reserved enum value; the current generate flow does not create briefs in the empty state.)

Tags

Tag FormatExamplePurpose
{uid}c53dc2b0-b7ed-483f-9296-b7d904e8d168Direct lookup by UID
group_weekly_brief_uid:{uid}group_weekly_brief_uid:c53dc2b0-b7ed-483f-9296-b7d904e8d168Namespaced lookup by UID
committee_uid:{value}committee_uid:061a110a-7c38-4cd3-bfcf-fc8511a37f35Find weekly briefs for a committee
state:{value}state:generatedFind briefs by state

Access Control (IndexingConfig)

FieldValue
access_check_objectcommittee:{committee_uid}
access_check_relationviewer
history_check_objectcommittee:{committee_uid}
history_check_relationauditor

Search Behavior

FieldValue
fulltextbrief_text
name_and_aliases(none)
sort_name(none)
publicfalse (always — intentional; even for public committees, brief drafts are never indexed as public)

Parent References

RefCondition
committee:{committee_uid}Always set