TL;DR — be the kind of person you'd want to share a 3 AM debugging session with.
This project exists because real people, mostly QA engineers in real environments (kiosks, POS terminals, regulated industries, legacy apps that won't die), need automation that works on the screen they're actually looking at. We have one maintainer, one timezone, a day job. Every minute spent dealing with bad vibes is a minute not spent merging your fix.
So we keep this short.
If you catch yourself typing a sharp comment, close the tab for five minutes. The bug will still be there. Your reputation, edited.
Disagreements are about code, not people. "This approach has a race condition on line 42" is fine. "This approach is dumb" isn't — even if the race condition is real.
The bar for tone goes up when the topic gets harder. Especially on threading, native libraries, and Maven assembly.
If someone's bug report, comment, or commit helped, say so. Acknowledgements in commits, PR bodies, release notes. It costs nothing and it's the closest thing this project has to currency. (See: every closed issue with a "thanks @username for the surgical-grade repro" line.)
Most contributors here aren't full-time OSS maintainers. They're QA engineers who automated something at 11 PM for a Monday demo and hit a stack trace. They don't have the time to parse your sarcasm, your French (sorry), or your 12-paragraph rebuttal. Brevity is a courtesy.
- Personal attacks. Ever.
- Dismissing someone because they're new, junior, AI-assisted, or don't speak English natively. (See: native review issues for 21 locales.)
- Reopening closed arguments without new information.
- Litigating moderation decisions in public — DM the maintainer if you think a call was wrong.
- Anything illegal, harassing, or actively harmful (the obvious stuff).
- Punching up technical reports. ASCII art. Diamond-tier reproducers. RIP commit messages for retired bugs. (We have a soft spot for these — own it.)
- Asking the dumb question. The dumb question is usually the one that exposes the hidden assumption that broke everything.
- Pushing back when a maintainer reply misses the point. We're wrong sometimes. Saying so in the thread is welcome and will be taken seriously (cf. #163).
- Switching to French / German / Spanish / Mandarin in side conversations if it's easier — just keep the technical thread in English so everyone can follow.
This applies wherever the project lives: issues, PRs, discussions, commit messages, release notes, the wiki, GitHub Discussions, and any future Discord / Matrix / wherever-we-end-up.
It also applies to how we represent the project externally — LinkedIn posts about OculiX, talks, blog articles. Be the same person off-thread that you are on it.
Three escalation paths, pick the lowest one that fits:
- Push back in the thread. Most miscommunications dissolve at this level. "I read this as X — was that the intent?" almost always works.
- DM the maintainer. @julienmerconsulting on GitHub. For anything you'd rather not discuss in public — bias, harassment, a private grievance, a security thing that touches a person. Acknowledgement within 48h, response within 7 days.
- GitHub's report-content channel. If it's flagrant (slurs, threats, doxxing), use the "Report content" option directly on the offending comment. It goes to repo admins (us) AND escalates GitHub-side if needed.
We won't ask you to not go directly to GitHub if that's where you're comfortable starting. No retaliation for that or anything else.
The maintainer can:
- Edit or delete a comment that crosses the line.
- Lock a thread that's gone off the rails.
- Block a user temporarily or permanently for repeat offenses.
We'll explain the decision publicly when it's about thread-level content; private decisions stay private. Bans for harassment will be named in the closing comment so the pattern is visible to anyone walking into the thread later.
We try not to lock or ban. We've had to do it zero times so far. Long may that continue.
If a contributor disagrees with a moderation decision, the other maintainer (currently @RaiMan) is the appeal channel. Their call overrides mine on conduct matters. No backroom.
This document exists because GitHub's "Community Standards" page nagged us for one. It also exists because clear expectations save everyone time when something inevitably goes weird.
We didn't copy a Contributor Covenant boilerplate because that style doesn't match how this project actually communicates. The values are the same — explicit kindness, technical focus, credit where it's due. The phrasing is just us.
If you can read this and recognize the kind of community you want to be part of, welcome. If not, that's a totally valid signal too — there are many projects, and forcing fit serves nobody.
🦎
Adopted: v3.0.4 cycle. Last updated: see git log.