This document is for core maintainers and frequent contributors. Read it together with Contributing and Contribution workflow. The goal is to welcome contributions while reducing large, hard-to-control changes that destabilize main and fork ecosystems.
- Small, reviewable, revertible steps: Prefer several focused PRs over one huge, hard-to-review batch.
- Intent before code: For behavior or data-contract changes, align scope in an Issue or Discussion before opening the PR.
- Protect core paths: Data layer, routing, global config, and build/export pipelines affect the whole project—PRs should explain motivation, risk, and how they were verified.
- No unrelated refactors mixed in: Do not bundle wide renames, mass formatting, or major dependency bumps with unrelated fixes or features; split PRs when needed.
- Dependencies and toolchain: Major framework or lockfile-policy upgrades need rationale, breaking-change notes, and regression checks (build, critical-path tests).
| Kind | Suggested approach |
|---|---|
| Bugfix | Minimal fix + tests or clear repro notes |
| Small feature / theme-local | Keep within theme or a single module boundary; avoid drive-by shared-layer edits |
| Cross-theme / shared API | Agree API and defaults in an Issue first; keep migrations documented |
| Breaking changes | Document version/config migration; split into phases if it helps reviewers |
Changes here tend to affect all sites or many themes—PR descriptions and verification notes should be stronger (whether two-person review is required is up to owners and maintainers):
lib/db/(includingSiteDataApi, Notion fetch and caching)pages/SSG/ISR, i18n, and build-lifecycle logicnext.config.jsand export/build scripts- Global config (
blog.config.js,lib/config.js, and similar defaults) - Security-sensitive areas: auth, secrets, third-party callbacks, CSP, etc.
- Prefer opt-in or configurable behavior for niche site assumptions; avoid baking them into global defaults.
- Theme isolation: Keep theme-specific logic under
themes/<name>/; avoid encoding one theme’s UI or routing in shared layers. - Docs in lockstep: When user-visible behavior or config keys change, update docs (EN/ZH as applicable) in the same or a follow-up PR.
Repository owners (personal repo owner, or org owners) can invite trusted maintainers (for example @qianzhu18) as collaborators with Write, Maintain, or Admin, depending on how much repo administration you want to delegate.
If branch protection or third-party checks (e.g. deploy authorization) often block merges, either add trusted actors under bypass in Settings → Branches, or agree explicitly when owners merge on behalf of maintainers.
Exact GitHub UI labels change over time; governance (who may merge, when bypass is acceptable) should be agreed in writing among maintainers, not only implied by defaults.
Revise this document as the project evolves; for major edits, leave a short note in an Issue or Discussion so future readers understand the rationale.