This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/master by this push:
new 987b748e8 docs: add a contributing guide, issue and pull request
templates (#4381)
987b748e8 is described below
commit 987b748e8f4f421c5cd3c4c4e51a064cc7e59f18
Author: lizhimins <[email protected]>
AuthorDate: Wed Sep 16 20:47:52 2026 +0800
docs: add a contributing guide, issue and pull request templates (#4381)
Document the contribution workflow (issue first, pull requests target
master, squash merge), the local build and test setup including the MySQL
schema the integration tests need, and the project code standards. Add
issue templates for bug, feature, enhancement and doc reports so the
queue stays triageable, plus a pull request template that asks how the
change was tested. Note the trunk branch in both READMEs.
---
.github/ISSUE_TEMPLATE/bug_report.yml | 141 +++++++++++++++++++
.github/ISSUE_TEMPLATE/config.yml | 25 ++++
.github/ISSUE_TEMPLATE/doc.yml | 70 ++++++++++
.github/ISSUE_TEMPLATE/enhancement_request.yml | 91 +++++++++++++
.github/ISSUE_TEMPLATE/feature_request.yml | 82 +++++++++++
.github/PULL_REQUEST_TEMPLATE.md | 29 ++++
CONTRIBUTING.md | 180 +++++++++++++++++++++++++
README.md | 1 +
README_zh.md | 1 +
9 files changed, 620 insertions(+)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml
b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000..b21f3719d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,141 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Bug Report
+title: "[Bug] "
+description: Report a defect in RocketMQ Studio (backend, frontend, deployment
or CLI).
+labels: [ "bug" ]
+body:
+ - type: checkboxes
+ attributes:
+ label: Before Creating the Bug Report
+ options:
+ - label: >
+ I have searched the [open
issues](https://github.com/apache/rocketmq-dashboard/issues)
+ of this repository and believe that this is not a duplicate.
+ required: true
+ - label: >
+ This is a defect in RocketMQ Studio, not a usage question and not
a defect in
+ another Apache RocketMQ repository.
+ required: true
+ - label: >
+ I can reproduce this on the current `master` branch, or I have
stated the exact
+ version I am running below.
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Studio Version
+ description: Which RocketMQ Studio build shows the problem.
+ placeholder: >
+ branch: (e.g. master)
+ git commit id: (e.g. e5ac52440f1a2b3c4d5e6f708192a3b4c5d6e7f8)
+ deployed as: (docker compose | deploy.sh | Kubernetes | built from
source)
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Runtime Environment
+ description: Where Studio runs, and what it talks to.
+ placeholder: >
+ OS: (e.g. "Ubuntu 22.04", "Alibaba Cloud Linux 3")
+ MySQL: (e.g. "8.0.36, container from deploy/docker-compose.yml")
+ browser (for UI issues): (e.g. "Chrome 141 on macOS 26")
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Connected RocketMQ Cluster
+ description: The cluster(s) the failing operation targets.
+ placeholder: >
+ RocketMQ version: (e.g. "5.5.1", "4.9.7")
+ access mode: (Proxy gRPC | Proxy remoting | Direct to
NameServer/Broker)
+ deployment: (e.g. "docker compose from deploy/rocketmq", "self-managed
cluster")
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Build Toolchain
+ description: Only needed when the problem is a build or startup failure.
+ placeholder: >
+ JDK: (e.g. "Dragonwell 21.0.4")
+ Maven: (e.g. "3.9.9")
+ Node.js: (e.g. "20.19.0")
+ validations:
+ required: false
+
+ - type: textarea
+ attributes:
+ label: Describe the Bug
+ description: What happened.
+ placeholder: >
+ A clear and concise description of the defect.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Steps to Reproduce
+ description: How a maintainer can see the same behaviour.
+ placeholder: >
+ 1. Start Studio with ...
+ 2. Open the ... page / call the ... API with ...
+ 3. Observe ...
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: What Did You Expect to See?
+ placeholder: >
+ A clear and concise description of the expected behaviour.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: What Did You See Instead?
+ placeholder: >
+ A clear and concise description of the actual behaviour.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Additional Context
+ description: Logs, screenshots and anything else that helps.
+ placeholder: >
+ Backend logs (docker logs rocketmq-server), browser console output,
HTTP response
+ bodies, screenshots. Do not paste credentials, access keys or customer
data.
+ validations:
+ required: false
+
+ - type: checkboxes
+ attributes:
+ label: Are You Willing to Submit a Pull Request?
+ description: >
+ Not required, but welcome. Read CONTRIBUTING.md first: pull requests
target the
+ `master` branch and need tests for non-trivial changes.
+ options:
+ - label: Yes, I am willing to submit a pull request.
+
+ - type: markdown
+ attributes:
+ value: Thanks for completing our form!
diff --git a/.github/ISSUE_TEMPLATE/config.yml
b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..9029243d7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,25 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+blank_issues_enabled: false
+contact_links:
+ - name: RocketMQ Dev Mailing List
+ url: https://rocketmq.apache.org/about/contact/
+ about: Cross-project discussion and questions about Apache RocketMQ itself.
+ - name: RocketMQ GitHub Discussions
+ url: https://github.com/apache/rocketmq/discussions
+ about: Usage questions about Apache RocketMQ (this repository does not use
Discussions).
diff --git a/.github/ISSUE_TEMPLATE/doc.yml b/.github/ISSUE_TEMPLATE/doc.yml
new file mode 100644
index 000000000..d077a6bae
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/doc.yml
@@ -0,0 +1,70 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Doc Report
+title: "[Doc] "
+description: Report a problem in the documentation, or propose new
documentation.
+labels: [ "documentation" ]
+body:
+ - type: checkboxes
+ attributes:
+ label: Before Creating the Doc Report
+ options:
+ - label: >
+ I have searched the [open
issues](https://github.com/apache/rocketmq-dashboard/issues)
+ and found no similar issue.
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Which Documentation
+ description: Point at the file or page.
+ placeholder: >
+ e.g. README.md#quick-start, docs/api-spec.md, deploy/README.md, the
in-app help text
+ on the Consumer Group page, or "missing: how to configure the LLM
datasource".
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: What Is Wrong
+ placeholder: >
+ Typo, outdated instruction, wrong command, missing step, missing
translation, or a
+ statement that no longer matches the code.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Suggested Change
+ placeholder: >
+ The corrected text, or an outline of the section that should be added.
+ validations:
+ required: false
+
+ - type: checkboxes
+ attributes:
+ label: Are You Willing to Submit a Pull Request?
+ description: >
+ Not required, but doc pull requests are usually merged quickly. Base
the branch on
+ `master`, and keep README.md and README_zh.md in sync when you change
either one.
+ options:
+ - label: Yes, I am willing to submit a pull request.
+
+ - type: markdown
+ attributes:
+ value: Thanks for completing our form!
diff --git a/.github/ISSUE_TEMPLATE/enhancement_request.yml
b/.github/ISSUE_TEMPLATE/enhancement_request.yml
new file mode 100644
index 000000000..a40466cdd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/enhancement_request.yml
@@ -0,0 +1,91 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Enhancement Request
+title: "[Enhancement] "
+description: Improve an existing capability without adding a new feature or
fixing a defect.
+labels: [ "enhancement" ]
+body:
+ - type: checkboxes
+ attributes:
+ label: Before Creating the Enhancement Request
+ description: >
+ Most issues are either a bug or a feature request. Use this template
only when the
+ proposal improves existing functionality or user experience — for
example usability,
+ performance, observability or error messaging.
+ options:
+ - label: >
+ I have confirmed this is an enhancement rather than a bug or a new
feature.
+ required: true
+ - label: >
+ I have searched the [open
issues](https://github.com/apache/rocketmq-dashboard/issues)
+ and believe this is not a duplicate.
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Summary
+ placeholder: >
+ A clear and concise description of the enhancement.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Motivation
+ placeholder: >
+ Why this is needed, which use cases it serves, and what it costs today
(extra clicks,
+ slow page, misleading message, wasted resources).
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Describe the Solution You'd Like
+ placeholder: >
+ The proposed change and the implementation steps. List separate
options separately if
+ you have more than one.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Describe Alternatives You've Considered
+ placeholder: >
+ Other ways to reach the same outcome, and why they are worse.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Additional Context
+ placeholder: >
+ Screenshots, measurements, related issues or pull requests.
+ validations:
+ required: false
+
+ - type: checkboxes
+ attributes:
+ label: Are You Willing to Submit a Pull Request?
+ description: >
+ Not required. Pull requests target the `master` branch; see
CONTRIBUTING.md.
+ options:
+ - label: Yes, I am willing to submit a pull request.
+
+ - type: markdown
+ attributes:
+ value: Thanks for completing our form!
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml
b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 000000000..b3a2eae2b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Feature Request
+title: "[Feature] "
+description: Propose a new capability for RocketMQ Studio.
+labels: [ "enhancement" ]
+body:
+ - type: checkboxes
+ attributes:
+ label: Before Creating the Feature Request
+ options:
+ - label: >
+ I have searched the [open
issues](https://github.com/apache/rocketmq-dashboard/issues)
+ and believe this is not a duplicate.
+ required: true
+ - label: >
+ I understand that a non-trivial feature is agreed in this issue
first: the design
+ is discussed here before a pull request is sent, as described in
CONTRIBUTING.md.
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Is Your Feature Request Related to a Problem?
+ placeholder: >
+ A clear and concise description of the problem, and who hits it
(operator, developer,
+ end user of a shared Studio deployment).
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Describe the Solution You'd Like
+ description: Sketch the design, not just the outcome.
+ placeholder: >
+ Which module the change belongs to (backend domain / adapter, frontend
page, MCP tool,
+ rmqctl command), what the API or UI looks like, and how it behaves on
error paths.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Describe Alternatives You've Considered
+ placeholder: >
+ Other designs you considered, why you rejected them, and any
workaround in use today.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Additional Context
+ placeholder: >
+ Mockups, related issues or pull requests, references to how other
consoles solve this.
+ validations:
+ required: false
+
+ - type: checkboxes
+ attributes:
+ label: Are You Willing to Implement It?
+ description: >
+ Not required. If you plan to implement it, the pull request must
target `master`,
+ keep the hexagonal architecture constraints green and add tests.
+ options:
+ - label: Yes, I am willing to submit a pull request once the design is
agreed.
+
+ - type: markdown
+ attributes:
+ value: Thanks for completing our form!
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..24db4d52b
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,29 @@
+<!-- Make sure the base branch is `master`: that is the RocketMQ Studio trunk.
-->
+
+### Which Issue(s) This PR Fixes
+
+<!-- Link the issue with a keyword so it closes on merge. Trivial fixes need
no issue.
+
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
-->
+
+- Fixes #<issue-id>
+
+### Brief Description
+
+<!-- What changes and why. Keep it short — the diff already shows how. -->
+
+### How Did You Test This Change?
+
+<!-- Paste the commands you ran and what they printed. Typical verification:
+ backend `cd server && mvn -B -ntp test` (integration tests need MySQL
8, see CONTRIBUTING.md)
+ frontend `cd web && npm test && npm run lint && npm run build`
+ A pull request with no verification will not be merged. -->
+
+### Checklist
+
+- [ ] One coherent change; unrelated modifications are not bundled in
+- [ ] Commit subject follows Conventional Commits (`feat:` / `fix:` /
`refactor:` / `chore:` / `docs:` / `perf:`)
+- [ ] Tests added or updated for non-trivial changes, test methods named
`...Test`
+- [ ] New UI text has both Chinese and English entries under `web/src/i18n/`
+- [ ] Architecture constraints stay green (`mvn test` runs the ArchUnit checks)
+- [ ] New source files carry the ASF license header
+- [ ] Documentation touched where behaviour changed (README / `docs/` / in-app
help)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..f4e7cf54a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,180 @@
+# Contributing to RocketMQ Studio
+
+Thanks for your interest in RocketMQ Studio. This document explains how to set
up a
+development environment, how changes are reviewed and merged, and what we
expect from a
+pull request.
+
+RocketMQ Studio is developed in this repository (`apache/rocketmq-dashboard`)
on the
+**`master`** branch, which is also the repository default branch. All pull
requests must
+target `master`.
+
+| Branch | Role |
+|--------|------|
+| `master` | RocketMQ Studio trunk — base your branches and pull requests on
it |
+| `master_archive` | Archive of the legacy rocketmq-dashboard code that lived
on `master` before. Read-only history, not for development |
+
+Recommended background reading:
+
+- [Apache Contributors Tech Guide](http://www.apache.org/dev/contributors)
+- [Get involved!](http://www.apache.org/foundation/getinvolved.html)
+- [README](README.md) for the feature list and architecture overview
+
+## Development environment
+
+| Component | Version |
+|-----------|---------|
+| JDK | 21 (Dragonwell or Temurin) |
+| Maven | 3.9+ |
+| Node.js | >= 20.19.0 (npm, `package-lock.json` is committed) |
+| Docker + Docker Compose | latest, for MySQL and the local RocketMQ topology |
+
+### Run the full stack
+
+```bash
+cd deploy/rocketmq && docker compose up -d # RocketMQ topology + network
+cd .. && docker compose up -d --build # MySQL + Studio backend +
frontend
+```
+
+Studio is then available at <http://127.0.0.1:6789> (frontend) and
<http://127.0.0.1:8888>
+(backend). See [`deploy/README.md`](deploy/README.md) for the configuration
options.
+
+### Run the backend only
+
+```bash
+cd server
+mvn -B -ntp spring-boot:run # or: mvn -B -ntp package -DskipTests
+```
+
+### Run the frontend only
+
+```bash
+cd web
+npm ci
+npm run dev # Vite dev server with hot reload
+```
+
+## Tests
+
+```bash
+# Backend unit + integration tests (also runs the ArchUnit architecture checks)
+cd server && mvn -B -ntp test
+
+# Frontend tests (vitest), lint and production build
+cd web && npm test && npm run lint && npm run build
+```
+
+The backend integration tests (`@SpringBootTest`) talk to a real datasource,
so they need a
+MySQL 8 instance reachable at `localhost:3306` with the Studio schema loaded.
The easiest way
+is to start the bundled one, which loads
`server/src/main/resources/db/schema.sql`
+automatically:
+
+```bash
+cd deploy && docker compose up -d mysql
+```
+
+Non-trivial changes need tests. Name test methods `somethingHappensTest`
(suffix `Test`),
+keep frontend and backend tests next to the code they cover, and add both
Chinese and
+English strings to `web/src/i18n/` whenever you add UI text.
+
+## Contribution workflow
+
+1. **Search first.** Look through the [open
issues](https://github.com/apache/rocketmq-dashboard/issues)
+ to see whether the problem or idea is already tracked.
+2. **Open an issue before you write code**, using one of the issue templates
(Bug Report,
+ Feature Request, Enhancement Request, Doc). Trivial fixes such as typos do
not need an
+ issue.
+3. **Discuss non-trivial designs in the issue and wait for maintainer
feedback.** Apache
+ projects decide by consensus: a new feature, a new API or a large refactor
should be
+ agreed on in the issue before the implementation lands. This saves you from
having a
+ finished pull request rejected on design grounds.
+4. **Fork, branch, commit.** Create your branch from `master`:
+
+ ```bash
+ git clone [email protected]:<your-username>/rocketmq-dashboard.git
+ git remote add upstream https://github.com/apache/rocketmq-dashboard.git
+ git fetch upstream master
+ git checkout -b <your-topic> upstream/master
+ ```
+
+5. **Open a pull request against `master`** and link the issue with `Fixes
#<issue-id>` so
+ it closes automatically on merge.
+6. **Keep it current.** Rebase onto `upstream/master` when the branch moves;
force-push
+ your own fork branch as needed.
+
+Pull requests are merged with **squash merge only**, so the merged commit
message becomes
+`type: description (#N)`. Write commit subjects in the Conventional Commits
style
+(`feat:` / `fix:` / `refactor:` / `chore:` / `docs:` / `perf:`).
+
+## What we expect from a pull request
+
+- **One coherent change per pull request.** Do not split a single fix into a
series of
+ one-line pull requests, and do not bundle unrelated changes together.
+- **It builds and the tests pass.** CI runs the backend build, the backend
test suite, the
+ frontend build and the frontend image build. A pull request that does not
compile will be
+ closed.
+- **It is reviewed code, not just generated code.** Using AI assistance is
fine, but you are
+ responsible for the result: read the diff, understand it, and verify it with
tests. Bulk
+ submissions of unverified changes are closed without review.
+- **No unrequested rewrites.** Large refactors, dependency upgrades and
formatting sweeps
+ need an issue and maintainer agreement first.
+- **License headers on new source files**, as required by the ASF
+ ([policy](https://www.apache.org/legal/src-headers.html)).
+
+## Code standards
+
+The rules below are enforced by review or by the build; details and rationale
live in
+[README](README.md#development-guidelines) and [`docs/`](docs).
+
+- **Package root** `org.apache.rocketmq.studio`, sources under `server/src/`.
+- **Hexagonal architecture** (domain / application / adapter) is asserted by
ArchUnit tests
+ that run as part of `mvn test` — a violation fails the build.
+- **Lombok** everywhere: `@Data` / `@Builder` / `@NoArgsConstructor` /
`@AllArgsConstructor`
+ on POJOs, `@RequiredArgsConstructor` for constructor injection, `@Slf4j` for
logging.
+- **REST layer**: write operations take a DTO with Jakarta validation and
return a VO; every
+ response is wrapped in `Result<T>`; errors are raised as
`BusinessException(400, msg)`.
+- **RocketMQ clients are long-lived and pooled.** Use the existing factories
and pools
+ (`MqAdminExtFactory`, `MqClientPool`) instead of creating, starting and
shutting down a
+ client per request.
+- **Query failures are graded.** RPC-level failures (connect / timeout /
broker unreachable)
+ surface as errors; an empty business result (for example "consumer group not
online",
+ "route not found") returns `200` with empty data instead of an error.
+- **Dependencies**: `org.apache.rocketmq:*` must be Apache open-source
releases only — no
+ internal or vendor-specific builds, and no
`com.aliyun.openservices:ons-client`. Cloud
+ control-plane access goes through the official OpenAPI SDKs.
+- **Frontend**: minimum font size 14px; tables must not need a horizontal
scrollbar at
+ normal widths (use `tableScrollX(columns)`); page-level neutral notes use
the shared
+ `InfoBanner` component.
+
+## Review, merge and the stale bot
+
+Maintainers review pull requests in the order they arrive. Expect a `Request
changes` review
+when something needs rework — push the fixes to the same branch and the review
continues.
+
+This repository runs a **stale bot that closes issues and pull requests after
7 days without
+activity** (`.github/workflows/stale.yml`). If your pull request is waiting on
you, respond
+within that window; if it is waiting on a maintainer, leave a comment to reset
the timer or
+ask for the `pinned` label. A closed pull request can be reopened as long as
its branch still
+exists.
+
+## Apache contributor license
+
+For substantial contributions the ASF asks for a signed
+[Individual Contributor License Agreement
(ICLA)](https://www.apache.org/licenses/contributor-agreements.html).
+Corporate contributions may need a
+[CCLA](https://www.apache.org/licenses/#clas). You keep the copyright to your
work; the
+license only grants the ASF the right to distribute it under the Apache
License 2.0.
+
+## Where to talk
+
+- **Issues in this repository** — bugs, features and design discussion for
RocketMQ Studio.
+- **[[email protected]](https://rocketmq.apache.org/about/contact/)** —
the RocketMQ
+ project mailing list, for cross-project topics and release discussions.
+- **[RocketMQ Discussions](https://github.com/apache/rocketmq/discussions)** —
usage
+ questions about Apache RocketMQ itself.
+
+## Becoming a committer
+
+We are always interested in adding new committers. What we look for is a
sustained record of
+useful contributions, good judgement in review and ongoing interest in the
project. If you
+would like to become a committer, talk to one of the existing committers and
they will walk
+you through the process.
diff --git a/README.md b/README.md
index 64bf29078..f59d38f08 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,7 @@ development.
## Development Guidelines
+- **Branches** — `master` is the development trunk: base your branches and
pull requests on it. `master_archive` keeps the legacy dashboard history and is
not used for development. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full
workflow
- **Code Style** — ESLint + Prettier for frontend, Husky pre-commit hook for
auto-check
- **Commit Format** — Conventional Commits (`feat:` / `fix:` / `refactor:` /
`chore:` / `docs:` / `perf:`)
- **Architecture Tests** — `mvn test` runs ArchUnit hexagonal architecture
constraint checks
diff --git a/README_zh.md b/README_zh.md
index 2049a1b6c..3b6a35ec8 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -70,6 +70,7 @@ cd .. && docker compose up -d --build
## 开发规范
+- **分支说明** — `master` 是开发主干,请基于它切分支、提 PR;`master_archive` 是原 dashboard
的历史归档,不用于开发;完整流程见 [CONTRIBUTING.md](CONTRIBUTING.md)
- **代码风格** — 前端通过 ESLint + Prettier 统一格式,Husky pre-commit hook 自动检查
- **Commit 格式** — 遵循 Conventional Commits(`feat:` / `fix:` / `refactor:` /
`chore:` / `docs:` / `perf:`)
- **架构测试** — 后端 `mvn test` 自动运行 ArchUnit 六边形架构约束检查