|
| 1 | +# Project governance |
| 2 | + |
| 3 | +ReRouted is an independent personal project maintained by [@gitcommit90](https://github.com/gitcommit90). This document defines how the public repository is run so every change is reviewable, tested, versioned, and released the same way. |
| 4 | + |
| 5 | +## Authority |
| 6 | + |
| 7 | +| Role | Who | Authority | |
| 8 | +| --- | --- | --- | |
| 9 | +| Maintainer | Repository owner (`gitcommit90`) | Merge to `main`, publish releases, change policy, close issues/PRs | |
| 10 | +| Agent / automation | Local maintainers and CI | May open branches, run tests, draft PRs; may not publish a release without following [release-checklist.md](./release-checklist.md) | |
| 11 | +| External contributors | Anyone else | Issues and sanitized reports only until external PRs are explicitly enabled in [CONTRIBUTING.md](../CONTRIBUTING.md) | |
| 12 | + |
| 13 | +There is no separate legal entity, community board, or multi-maintainer vote. Policy lives in this repository. Host-local packaging credentials and machine aliases stay outside git (see maintainer handoff on the build hosts, not in this repo). |
| 14 | + |
| 15 | +## Source of truth |
| 16 | + |
| 17 | +| Artifact | Canonical location | |
| 18 | +| --- | --- | |
| 19 | +| Product code | `main` on `https://github.com/gitcommit90/rerouted` | |
| 20 | +| Public site | `https://rerouted.dev` (deployed from a versioned snapshot of `main`, never a dirty worktree) | |
| 21 | +| Version number | `package.json` `version` field | |
| 22 | +| User-facing history | `CHANGELOG.md` plus the GitHub Release body for that tag | |
| 23 | +| Ship procedure | [release-checklist.md](./release-checklist.md) and [release-lifecycle.md](./release-lifecycle.md) | |
| 24 | +| Architecture | [architecture.md](./architecture.md) | |
| 25 | +| Security contact | [SECURITY.md](../SECURITY.md) | |
| 26 | + |
| 27 | +## Branch model |
| 28 | + |
| 29 | +- **Default branch:** `main` only. There is no long-lived `develop`. |
| 30 | +- **Work branches:** short-lived, named for intent: |
| 31 | + - `feat/<slug>` — user-visible capability |
| 32 | + - `fix/<slug>` — defect |
| 33 | + - `docs/<slug>` — documentation only |
| 34 | + - `chore/<slug>` — tooling, governance, CI, repo hygiene |
| 35 | + - `refactor/<slug>` — internal structure without intended behavior change |
| 36 | + - `release/<version>` — optional packaging-only branch (usually unnecessary) |
| 37 | +- **Merge method:** squash merge preferred for feature work so `main` stays linear and each PR becomes one reviewable commit. Merge commits are allowed when preserving multi-commit history is intentional. |
| 38 | +- **Delete on merge:** remote head branches are deleted after merge. |
| 39 | +- **No direct force-push to `main`.** History rewrites of published tags or releases require an explicit maintainer decision. |
| 40 | + |
| 41 | +## Required quality bar (every change) |
| 42 | + |
| 43 | +No change lands on `main` without: |
| 44 | + |
| 45 | +1. A focused description of the user-visible problem and outcome (PR body or commit body for direct maintainer merges). |
| 46 | +2. Tests for behavioral changes (`tests/*.test.js`) or an explicit justification when the change is docs/governance only. |
| 47 | +3. `npm test` green on the branch (local and GitHub Actions). |
| 48 | +4. `git diff --check` clean. |
| 49 | +5. No secrets, private prompts, real OAuth material, generated DMGs/ZIPs, or host-only files (`AGENTS.md` and similar). |
| 50 | + |
| 51 | +UI changes should include current captures when the control plane layout changes in a way users would notice. |
| 52 | + |
| 53 | +## Versioning and releases |
| 54 | + |
| 55 | +- Semantic versioning on `package.json`: **MAJOR** for breaking local API or data migrations users must handle; **MINOR** for backward-compatible features; **PATCH** for fixes and small safe improvements. |
| 56 | +- Every shipped macOS/Linux build has a **unique** version. Never rebuild and republish the same version number with different bits. |
| 57 | +- A release is **not** “done” when code merges. It is done only when [release-checklist.md](./release-checklist.md) is complete: signed notarized macOS DMG + updater ZIP, Linux CLI tarball, published GitHub Release, update-feed check, and install verification. |
| 58 | +- Draft and prerelease GitHub Releases are not update channels for the stable app. |
| 59 | + |
| 60 | +## Communication surfaces |
| 61 | + |
| 62 | +| Surface | Use for | |
| 63 | +| --- | --- | |
| 64 | +| GitHub Issues | Bugs, feature requests, questions (sanitized) | |
| 65 | +| GitHub Security Advisories | Vulnerabilities only | |
| 66 | +| GitHub Releases + `CHANGELOG.md` | What shipped | |
| 67 | +| https://rerouted.dev | Product marketing and download entry | |
| 68 | +| Pull requests | Maintainer (and future external) code review | |
| 69 | + |
| 70 | +## Repository settings (expected) |
| 71 | + |
| 72 | +Maintainers should keep these GitHub settings true: |
| 73 | + |
| 74 | +- Default branch `main` |
| 75 | +- Delete head branches on merge: **on** |
| 76 | +- Squash merge: **on** (preferred) |
| 77 | +- Merge commit / rebase: optional |
| 78 | +- Wiki: **off** (docs live in-repo) |
| 79 | +- Issues: **on** |
| 80 | +- Secret scanning + push protection: **on** |
| 81 | +- Actions: run tests on `push` to `main` and on pull requests |
| 82 | +- Branch protection on `main`: require status check **Tests / test** when the plan allows required checks; disallow force-push |
| 83 | + |
| 84 | +## Local clone naming |
| 85 | + |
| 86 | +- GitHub repository name: `rerouted` (lowercase). |
| 87 | +- Canonical maintainer clone path on ProxUI: `/root/rerouted`. |
| 88 | +- Product display name: **ReRouted**. |
| 89 | +- npm package name: `@gitcommit90/rerouted`. |
| 90 | +- macOS app bundle / DMG product name: `ReRouted`. |
| 91 | + |
| 92 | +Do not invent alternate public product names. Side folders such as release worktrees, site snapshots, or historical sandboxes are not the product root. |
| 93 | + |
| 94 | +## Policy changes |
| 95 | + |
| 96 | +Governance changes land through the same branch + test + merge path as code (docs-only PRs still use the PR template). Material policy shifts (accepting external PRs, changing license, moving ownership) require an explicit maintainer commit message and a `CHANGELOG.md` entry under the next release. |
0 commit comments