Supplemental guidance for AI coding assistants (Claude Code, Copilot, Cursor, Gemini, Codex, Aider, and similar tools) working in this repository. Keep this file short — it is a router. The detail lives in the human-facing docs linked below; read the one that fits your task rather than pulling everything into context up front.
Apache Pulsar is a distributed pub-sub messaging and streaming platform. The codebase is performance-critical, heavily asynchronous, and concurrency-sensitive. Prioritize correctness, thread safety, performance, maintainability, and backward compatibility.
Apache Pulsar is licensed under the Apache License 2.0, and all contributions must meet the ASF's Generative Tooling guidance:
.java file).Assisted-by: <tool/version> commit trailer (the default, since a human still does the final review); Generated-by: <tool/version> is for minimally-modified generated output.| Doc | Use for |
|---|---|
CONTRIBUTING.md | Local dev workflow: building (prerequisites, build/lint commands), running tests & test groups, integration tests, Personal CI, PR conventions, security reporting. |
ARCHITECTURE.md | Big-picture module map, the Gradle build infrastructure and how to change build files (convention plugins, version catalog, the module-name-vs-directory gotcha), the concurrency model and backpressure, and the pip/ proposals. |
CODING.md | Coding conventions: style, async/CompletableFuture, concurrency, logging (slog), dependencies, backward compatibility, testing, and the review checklist. |
SECURITY.md | Reporting a vulnerability, disclosure hygiene, and checking exposure to an already-public CVE. |
The authoritative project documentation is at https://pulsar.apache.org, whose source lives in the apache/pulsar-site repository (where documentation changes are contributed). The files above and the website remain the source of truth — this guide just layers AI-specific pointers on top.
A few rules matter specifically when an AI tool makes the change, on top of the canonical docs above:
CODING.md.CODING.md.CompletableFuture must not throw synchronously. See CODING.md.@CustomLog; default new logs to TRACE/DEBUG, not INFO.--tests; no reflection into private state (use a @VisibleForTesting package-private accessor); release buffers and resources.[type][scope] title; describe motivation and modifications; do not rebase once the PR is open in apache/pulsar — merge upstream master instead.SECURITY.md.dev@pulsar.apache.org first. See CONTRIBUTING.md.