Skip to content

Commit bada76a

Browse files
committed
chore: formalize governance and release lifecycle
Define maintainer authority, branch model, quality bar, and the idea-to-install release contract. Add Keep a Changelog history, tighter PR template with release-note fields, CODEOWNERS, GitHub release note categories, and CI checks for governance artifacts. Repository hygiene: delete-branch-on-merge, stale merged branches removed, main branch protection requiring the test check.
1 parent b8eb9bc commit bada76a

10 files changed

Lines changed: 424 additions & 15 deletions

File tree

.github/CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Default owner for all paths. Adjust when collaborators are added.
2+
* @gitcommit90

.github/pull_request_template.md

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,51 @@
1-
## External contributions are not yet accepted
1+
## External contributions
22

3-
ReRouted is licensed under the MIT License, but its external contribution process is still being finalized. Please read [CONTRIBUTING.md](../CONTRIBUTING.md) before opening a pull request. External code and documentation contributions may be closed without review until that process is published.
3+
ReRouted is MIT licensed. **External pull requests are not accepted yet.** Read [CONTRIBUTING.md](../CONTRIBUTING.md). External code or docs PRs may be closed without review until that policy changes.
44

55
Never include real API keys, gateway keys, OAuth tokens or codes, callback URLs, cookies, account identifiers, email addresses, private prompts, provider responses, or unreviewed logs.
66

7-
## Maintainer change
7+
## Summary
88

9-
Describe the user-visible problem and the resulting behavior.
9+
<!-- User-visible problem and resulting behavior. One concern per PR. -->
10+
11+
## Type of change
12+
13+
- [ ] Fix
14+
- [ ] Feature
15+
- [ ] Docs / governance
16+
- [ ] Refactor (no intended behavior change)
17+
- [ ] Chore / CI
18+
19+
## Release notes (required for user-visible changes)
20+
21+
Paste the bullets that should land in `CHANGELOG.md` under Unreleased / the next version:
22+
23+
```markdown
24+
### Fixed
25+
-
26+
27+
### Added
28+
-
29+
```
30+
31+
- [ ] `CHANGELOG.md` updated (or N/A: internal-only with no user impact)
32+
33+
## Version
34+
35+
- [ ] No release this PR (docs/governance/chore only)
36+
- [ ] Version bump included (`package.json`) — unique, not previously tagged
1037

1138
## Verification
1239

13-
- [ ] Focused validation passes.
14-
- [ ] `npm test` passes.
15-
- [ ] `git diff --check` passes.
16-
- [ ] UI changes include current captures where applicable.
17-
- [ ] No credentials, private user data, or generated release artifacts are included.
18-
- [ ] Release/version work is left to the maintainer release process.
40+
- [ ] Focused validation for the changed area
41+
- [ ] `npm test` passes
42+
- [ ] `git diff --check` passes
43+
- [ ] UI changes inspected or captured where applicable
44+
- [ ] No credentials, private user data, or generated release artifacts committed
45+
- [ ] Packaging/signing left to [docs/release-checklist.md](../docs/release-checklist.md)
46+
47+
## Post-merge (maintainers)
48+
49+
- [ ] Head branch deleted
50+
- [ ] CI green on `main`
51+
- [ ] If shipping: follow [docs/release-lifecycle.md](../docs/release-lifecycle.md) end-to-end

.github/release.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# GitHub-generated release notes categories (Settings → Releases uses this file).
2+
changelog:
3+
exclude:
4+
labels:
5+
- skip-changelog
6+
- duplicate
7+
- invalid
8+
categories:
9+
- title: Breaking changes
10+
labels:
11+
- breaking
12+
- title: Features
13+
labels:
14+
- enhancement
15+
- feature
16+
- title: Fixes
17+
labels:
18+
- bug
19+
- fix
20+
- title: Documentation
21+
labels:
22+
- documentation
23+
- title: Maintenance
24+
labels:
25+
- chore
26+
- ci
27+
- dependencies
28+
- title: Other
29+
labels:
30+
- "*"

.github/workflows/test.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ on:
99
permissions:
1010
contents: read
1111

12+
concurrency:
13+
group: tests-${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
15+
1216
jobs:
1317
test:
18+
name: test
1419
runs-on: ubuntu-latest
1520
timeout-minutes: 15
1621
steps:
@@ -23,5 +28,15 @@ jobs:
2328
cache: npm
2429
- name: Install dependencies
2530
run: npm ci
31+
- name: Diff whitespace check
32+
run: git diff --check
2633
- name: Run tests
2734
run: npm test
35+
- name: Package metadata sanity
36+
run: |
37+
node -e "const p=require('./package.json'); if(!p.version) process.exit(1); if(p.license!=='MIT') process.exit(1); console.log('version', p.version)"
38+
test -f LICENSE
39+
test -f CHANGELOG.md
40+
test -f docs/release-checklist.md
41+
test -f docs/release-lifecycle.md
42+
test -f docs/GOVERNANCE.md

CHANGELOG.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Changelog
2+
3+
All notable changes to ReRouted are documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
Release tags use the form `vX.Y.Z` and match `package.json`. GitHub Releases carry the installable artifacts; this file is the durable narrative for humans and agents.
9+
10+
## [Unreleased]
11+
12+
### Changed
13+
14+
- Formalized project governance, release lifecycle, PR/release note expectations, and repository hygiene (branch cleanup, merge defaults, maintainer docs).
15+
16+
## [0.5.4] - 2026-07-18
17+
18+
### Fixed
19+
20+
- Classify thrown context failures so they do not poison OAuth account pools.
21+
22+
## [0.5.3] - 2026-07-18
23+
24+
### Fixed
25+
26+
- Pre-output stream inspection pass-through and related streaming edge cases.
27+
28+
## [0.5.2] - 2026-07-18
29+
30+
### Fixed
31+
32+
- Bound pre-output stream inspection so inspection cannot hang the request path.
33+
34+
## [0.5.1] - 2026-07-18
35+
36+
### Fixed
37+
38+
- Route exhaust / fallback until a usable upstream response is obtained.
39+
40+
## [0.5.0] - 2026-07-18
41+
42+
### Added
43+
44+
- Headless Linux CLI and local web dashboard (`rerouted`, `/dashboard/`).
45+
- Linux npm-compatible release tarball on stable GitHub Releases.
46+
47+
### Changed
48+
49+
- Product positioning covers macOS menu bar and Linux headless control plane.
50+
51+
## [0.4.18] - 2026-07-18
52+
53+
### Added
54+
55+
- Anthropic Messages compatibility (`/v1/messages`, token count, Claude Code path quirks).
56+
- Explicit adaptive thinking support for Claude adaptive requests.
57+
58+
### Fixed
59+
60+
- Tool-use cycles and provider translation edge cases for Claude Code workflows.
61+
62+
## Earlier 0.4.x
63+
64+
See [GitHub Releases](https://github.com/gitcommit90/rerouted/releases) for artifact digests and notes prior to the Keep a Changelog narrative. Notable themes in late 0.4.x included signed/notarized distribution, in-app updates, named routes, OAuth account pools, OpenAI chat completions and Responses routing, and launch hardening.
65+
66+
[Unreleased]: https://github.com/gitcommit90/rerouted/compare/v0.5.4...HEAD
67+
[0.5.4]: https://github.com/gitcommit90/rerouted/releases/tag/v0.5.4
68+
[0.5.3]: https://github.com/gitcommit90/rerouted/releases/tag/v0.5.3
69+
[0.5.2]: https://github.com/gitcommit90/rerouted/releases/tag/v0.5.2
70+
[0.5.1]: https://github.com/gitcommit90/rerouted/releases/tag/v0.5.1
71+
[0.5.0]: https://github.com/gitcommit90/rerouted/releases/tag/v0.5.0
72+
[0.4.18]: https://github.com/gitcommit90/rerouted/releases/tag/v0.4.18

CONTRIBUTING.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,34 @@ Thank you for helping improve ReRouted.
44

55
## Current contribution status
66

7-
ReRouted is open source under the [MIT License](./LICENSE). External code contributions are not currently accepted while the maintainer finalizes a contribution review process.
7+
ReRouted is open source under the [MIT License](./LICENSE). **External code and documentation pull requests are not accepted** while the maintainer finalizes a review process.
88

9-
Please do not open a pull request with code or documentation changes yet. It may be closed without review. Focused issues, feature requests, compatibility reports, and sanitized reproduction cases are welcome.
9+
Do not open a pull request with code or documentation changes yet. It may be closed without review. Focused issues, feature requests, compatibility reports, and sanitized reproduction cases are welcome.
10+
11+
When external PRs open, this file will describe CLA/DCO (if any), coding standards, and the review SLA. Until then, assume maintainer-only merges.
12+
13+
## Project governance (maintainers)
14+
15+
Authoritative policy:
16+
17+
| Doc | Purpose |
18+
| --- | --- |
19+
| [docs/GOVERNANCE.md](./docs/GOVERNANCE.md) | Authority, branch model, quality bar, repo settings |
20+
| [docs/release-lifecycle.md](./docs/release-lifecycle.md) | Idea → branch → PR → release process |
21+
| [docs/release-checklist.md](./docs/release-checklist.md) | Packaging, notarization, publish, install verification |
22+
| [CHANGELOG.md](./CHANGELOG.md) | User-facing history (Keep a Changelog) |
23+
| [docs/architecture.md](./docs/architecture.md) | Runtime and data flow |
24+
25+
**Every product change that ships must:**
26+
27+
1. Live on a short-lived branch off current `origin/main`.
28+
2. Include tests for behavior changes.
29+
3. Pass `npm test` and `git diff --check`.
30+
4. Update `CHANGELOG.md` under Unreleased when users will notice the change.
31+
5. Use a unique `package.json` version for each published build.
32+
6. Complete the release checklist before anyone calls the work “done.”
33+
34+
Preferred merge method: **squash merge**, with **delete branch on merge**.
1035

1136
## Before opening an issue
1237

@@ -42,6 +67,8 @@ git diff --check
4267

4368
Node.js 22.13 or newer is required. The headless runtime is supported on Linux. The packaged desktop application targets Apple Silicon and macOS 12 Monterey or newer.
4469

70+
Canonical clone directory name matches the GitHub repo: `rerouted` (for example `/root/rerouted` on the maintainer Linux host). The product display name is **ReRouted**.
71+
4572
Maintainers handle package version changes, signing, notarization, release publication, and installation verification. Reproduction branches should not include generated release artifacts or real provider credentials.
4673

4774
## Security reports

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ See [Privacy](./PRIVACY.md) for the local files ReRouted keeps, the network serv
238238
- For questions, reproducible bugs, and feature requests, use [GitHub Issues](https://github.com/gitcommit90/rerouted/issues).
239239
- For a suspected vulnerability, follow [the security policy](./SECURITY.md) and do not post credentials or sensitive details in a public issue.
240240
- Before sharing diagnostics, remove API keys, gateway keys, OAuth callback URLs or codes, account identifiers, email addresses, and any provider response that may contain private data.
241+
- What shipped: [CHANGELOG.md](./CHANGELOG.md) and [GitHub Releases](https://github.com/gitcommit90/rerouted/releases).
242+
- How this repo is run: [Governance](./docs/GOVERNANCE.md), [Release lifecycle](./docs/release-lifecycle.md), and the packaging [release checklist](./docs/release-checklist.md).
241243

242244
ReRouted is open source under the [MIT License](./LICENSE). External code contributions are not currently accepted while the contribution process is finalized; focused issues and sanitized reproduction reports are welcome. See [Contributing](./CONTRIBUTING.md) for the current policy.
243245

docs/GOVERNANCE.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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.

docs/release-checklist.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
# Release checklist
22

3-
This is the required finish line for every ReRouted change, including fixes, features, refactors, UI adjustments, and documentation iterations. Releases that include the headless runtime must verify both the macOS artifacts and Linux CLI package.
3+
This is the required finish line for every **shipped** ReRouted product build (macOS app and/or Linux CLI). Process and policy live in [release-lifecycle.md](./release-lifecycle.md) and [GOVERNANCE.md](./GOVERNANCE.md). User-facing narrative belongs in [CHANGELOG.md](../CHANGELOG.md) before you package.
44

5-
**Do not say "done" until every check has passed.**
5+
Docs-only or governance-only merges may land without a new binary, but they still use a branch, tests when applicable, and changelog Unreleased notes when users will notice.
6+
7+
**Do not say "done" for a product release until every check below has passed.**
68

79
## 1. Prepare the change
810

9-
Start from the current remote `main`, create a branch, and give the app a new version so the installed build is unambiguous.
11+
Start from the current remote `main`, create a branch, implement with tests, and update `CHANGELOG.md` under Unreleased. Give the app a new version so the installed build is unambiguous before packaging.
1012

1113
```bash
1214
git fetch origin
1315
git switch main
1416
git pull --ff-only origin main
1517
git switch -c <branch-name>
1618

19+
# After implementation and tests, when this branch will ship:
1720
npm version patch --no-git-tag-version
21+
# Move Unreleased notes into ## [x.y.z] - YYYY-MM-DD in CHANGELOG.md
1822
```
1923

2024
Use a minor or major bump when the scope warrants it. Do not reuse an already-installed version for a new iteration.

0 commit comments

Comments
 (0)