Communication Channels and Building Consensus
OpenSearch has no private decision-making channel. There is no dev@ list where the "real"
discussion happens, no JIRA, no committee email thread you need to be cc'd on. The project's
nervous system is a small set of public channels, and consensus is something you can
watch being built in the open. This chapter is the operational map: which channel does what,
when to use which, and how to drive a proposal from idea to merged change without burning
goodwill.
If you have read Design via GitHub from the contributor side, this is the maintainer- and process-side view of the same machinery.
The Channels at a Glance
| Channel | URL / location | Purpose | Latency | Authoritative? |
|---|---|---|---|---|
| GitHub Issues | github.com/opensearch-project/OpenSearch/issues | Bugs, enhancements, RFCs, meta/tracking, release readiness | hours–days | Yes — the system of record |
| GitHub Pull Requests | same repo, /pulls | Code review and the merge decision | hours–days | Yes |
| Community forum | forum.opensearch.org | Usage questions, broad discussion, announcements, "is this a bug?" triage | hours–days | No (but searchable, durable) |
| Public Slack | opensearch.org/slack | Real-time chat, quick questions, coordinating, finding a maintainer | seconds–minutes | No — ephemeral; decisions must land on GitHub |
| Community meetings | recurring, public, recorded | TSC updates, project demos, roadmap, open discussion | biweekly/monthly | No — but minutes/recordings are durable |
| Announce / mailing presence | project announce list & blog | Release announcements, security advisories, governance changes | per-event | One-way |
There is exactly one bright line to memorize: a decision is not real until it is written down in a GitHub issue or PR. Slack threads and hallway conversations at a community meeting are where alignment forms; the issue is where it is recorded. If you negotiate a design in Slack, your last act is to post the summary back on the issue. Maintainers will ask you to do this if you don't.
Warning: Never treat a Slack +1 or a verbal nod in a community meeting as approval to merge. The approval that counts is a maintainer's review on the PR. Anything else is just momentum.
What Each Channel Is For — and Not For
GitHub Issues
The issue is the unit of work. Every bug, every feature, every design lives here first. Issues carry labels that route and stage them:
| Label | Meaning |
|---|---|
untriaged | Not yet looked at by a maintainer; the default for new issues |
bug / enhancement | Triaged category |
RFC / proposal / meta | A design or cross-cutting discussion, not a single change |
good first issue / help wanted | Open for new contributors |
flaky-test | A non-deterministic test failure |
v3.1.0, v2.18.0 (version labels) | Targeted release |
backport 2.x, backport 1.x | Drives the backport bot on the associated PR |
A maintainer triaging an issue moves it from untriaged to a real category, may ask for a
reproduction, and may attach it to a release version. You can accelerate this: a clean,
reproducible bug report with a curl repro against localhost:9200 and the exact version
gets triaged faster than a vague one. See
GitHub Issues and PR Review for the triage-to-merge flow.
The Forum (forum.opensearch.org)
The forum is for discussion that isn't yet a unit of work: "Is this expected behavior?", "How do others solve X?", "We're thinking about a feature in this area — has anyone tried?" It is durable and searchable, which makes it better than Slack for anything you want to reference later. If a forum thread converges on "this is a bug" or "this is worth building," the outcome is to open a GitHub issue and link the thread.
Slack (opensearch.org/slack)
Slack is for speed and for humans: unblocking a quick question, finding which maintainer owns an area, coordinating who takes which piece, sanity-checking before you write a long issue. It is ephemeral — old messages scroll away and aren't a record. Use it to move fast, then write the outcome down.
Community Meetings
Recorded, public, recurring meetings cover TSC updates, roadmap, project demos, and open discussion. As a contributor you mostly consume these (watch a recording to understand direction). As an aspiring maintainer you eventually present in them — demoing a feature or walking an RFC. Because they are recorded and minuted, they are a legitimate way to surface a proposal to a wide audience, but the binding artifact is still the linked issue.
How Consensus Is Actually Built
OpenSearch consensus is lazy consensus plus maintainer approval, scaled by blast radius. The bigger the change, the wider the circle that must align.
flowchart TD
A[Idea / problem] --> B{Scope?}
B -->|Bug or small change| C[Open issue: bug/enhancement]
B -->|New feature / design| D[Open RFC issue: label RFC/proposal]
B -->|Cross-cutting / multi-repo| E[RFC + community meeting + TSC]
C --> F[Discussion on the issue]
D --> F
E --> F
F --> G{Maintainer alignment?}
G -->|No objection / +1s| H[Open PR implementing it]
G -->|Objection| I[Iterate on issue: revise scope/design]
I --> F
H --> J[Review-then-merge: maintainer approvals + green CI]
J --> K[Merged + CHANGELOG entry]
K --> L{Needs older line?}
L -->|Yes| M[backport label -> bot opens backport PR]
L -->|No| N[Ships in next release of main]
The three circles, by blast radius:
- Discussion on the issue / RFC. For a contained change, this is the whole game. You describe the problem, a maintainer agrees on the approach, you implement it. "Lazy consensus" means silence after a clear proposal, given reasonable time, is assent — but only a maintainer's actual review approves the PR.
- Maintainer alignment. For anything touching a public surface — REST API, wire format, index format, a setting's default — the maintainers who own that area must agree before you write much code. Getting this alignment on the issue is the single highest-leverage thing you can do; it is far cheaper to change a paragraph than a 2,000-line PR. See How Maintainers Think About Compatibility for what they weigh.
- The TSC for cross-cutting concerns. Changes that span repos, set project-wide policy, add a whole subsystem, or affect the experience across the bundle escalate to the Technical Steering Committee. You usually don't go straight to the TSC; a maintainer or the discussion routes it there when it's warranted.
When to Use Which Channel
| Situation | Start here | Then |
|---|---|---|
| "I think I found a bug" | Forum or issue search (avoid duplicates) | Open a bug issue with a repro |
| "I want to build feature X" | RFC/proposal issue | Align with maintainers, then PR |
| "Quick question, am I blocked?" | Slack | If it's a real decision, record on the issue |
| "Is this the expected behavior?" | Forum | Open an issue if it's a bug |
| "Who owns the allocation code?" | MAINTAINERS.md + Slack | Tag them on the issue/PR |
| "This is a security problem" | Do not post publicly | Use the security disclosure process (SECURITY.md) |
| "Cross-repo / project-wide change" | RFC issue + community meeting | TSC if it needs project policy |
Warning: Security vulnerabilities are the one thing that does not go in a public channel. Follow the coordinated disclosure process documented in
SECURITY.md(a private report path), never a public issue, forum post, or Slack message.
Driving a Proposal — The Playbook
To take an idea to a merged change without stalling:
- Search first. Check existing issues, the forum, and
MAINTAINERS.md. Half of all "new" proposals already have a thread; join it instead of forking the discussion. - Write the problem, not the solution, first. A good RFC issue leads with the problem, the constraints, and why now, then proposes an approach and lists alternatives you rejected. Maintainers evaluate problems; they distrust solutions that arrive without one.
- Label it correctly.
RFC/proposalfor design,enhancementfor a concrete change,metafor a multi-PR tracking effort. Mislabeling buries your issue. - Tag the right owners. Use
MAINTAINERS.mdto find who owns the area and @-mention them — but tag, don't spam. One thoughtful ping beats five. - Get alignment before you build. Do not open a large PR before the design has a maintainer's blessing on the issue. A PR is a commitment; an issue is a conversation. Pay for the conversation first.
- Implement in a focused PR that links the issue (
Closes #NNNN), adds aCHANGELOG.mdentry, and is small enough to review. See GitHub Issues and PR Review. - Summarize decisions back onto the issue. If alignment happened in Slack or a meeting, post the conclusion on the issue so the record is complete.
Etiquette
The norms that make you easy to work with — and that maintainers remember:
- Be concise and reproducible. A maintainer's scarcest resource is attention. A three-line repro saves them twenty minutes and earns you review bandwidth.
- Don't cross-post the same question to three channels. Pick the right one; escalate only if it goes stale, and link the prior thread when you do.
- Assume good faith and respond to the strongest version of the objection. Maintainers block changes for reasons (usually compatibility or maintenance cost), not to gatekeep.
- Follow the Code of Conduct. It is not decorative.
- Be patient and persistent, not loud. Reviewers are volunteers and employees with finite time. A polite "friendly ping" after several days is fine; daily nagging is not.
- Leave the channel better than you found it. Update the issue when you learn something; close your own stale threads; link duplicates.
These manners are not soft skills — they are how you accumulate the trust that turns into review bandwidth and eventually maintainership.
Prove You Understand This
- Where is the authoritative record of a design decision, and where is it merely formed?
- You discussed and agreed an approach with a maintainer in Slack. What is your last step before writing code?
- You believe you found a remotely exploitable bug. Which channel do you use, and which do you explicitly avoid?
- A new feature you want spans the core repo and two plugin repos. Sketch the path from idea to merged change, naming the channels and the point at which the TSC gets involved.
- What does the
untriagedlabel mean, and what would make a maintainer remove it from your issue quickly?
The next chapter — GitHub Issues and PR Review — turns from forming consensus to executing it: how a PR actually gets reviewed and merged.