Skip to content

Commit f563255

Browse files
lane711claude
andauthored
docs: add governance, LICENSE, and CODEOWNERS for co-maintainer model (#799)
* chore: suppress naming-convention lint error for JSON body destructuring The shortcodes create endpoint accepts both snake_case and camelCase keys from the JSON body for backwards compatibility. The snake_case destructuring triggered the naming-convention rule, blocking commits via the pre-commit hook. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs: add governance, license, and code owners for co-maintainer model Formalize project governance as a BDFL model with a co-maintainer. Adds the missing LICENSE file, defines review requirements via CODEOWNERS, updates FUNDING.yml to support both maintainers, and documents the DCO sign-off expectation for contributors. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 7385916 commit f563255

6 files changed

Lines changed: 167 additions & 1 deletion

File tree

.github/CODEOWNERS

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# SonicJS Code Owners
2+
#
3+
# This file defines who must review changes to specific parts of the codebase.
4+
# Order matters — the last matching pattern wins.
5+
#
6+
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
7+
8+
# Default owners for everything in the repo
9+
* @lane711 @mmcintosh
10+
11+
# Core package — both maintainers must approve
12+
/packages/core/ @lane711 @mmcintosh
13+
14+
# Governance, licensing, and contribution docs — project lead sign-off required
15+
/LICENSE @lane711
16+
/GOVERNANCE.md @lane711
17+
/CONTRIBUTING.md @lane711
18+
/.github/CODEOWNERS @lane711
19+
/.github/FUNDING.yml @lane711
20+
21+
# Release and publishing workflows — project lead sign-off required
22+
/PUBLISHING.md @lane711
23+
/.github/workflows/ @lane711
24+
/scripts/ @lane711 @mmcintosh
25+
26+
# Website and marketing site
27+
/www/ @lane711
28+
29+
# Example app
30+
/my-sonicjs-app/ @lane711 @mmcintosh

.github/FUNDING.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
github: lane711
1+
# GitHub Sponsors profiles for SonicJS maintainers.
2+
# Both maintainers are listed so sponsors can support whichever maintainer they choose.
3+
github: [lane711, mmcintosh]

CONTRIBUTING.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Thank you for your interest in contributing to SonicJS!
55
## Quick Links
66

77
- **[Full Contributing Guide](https://sonicjs.com/contributing)** - Detailed guide on how to contribute
8+
- **[Project Governance](./GOVERNANCE.md)** - How decisions are made and who the maintainers are
89
- **[Good First Issues](https://github.com/lane711/sonicjs/labels/good%20first%20issue)** - Great starting points for new contributors
910
- **[Help Wanted](https://github.com/lane711/sonicjs/labels/help%20wanted)** - Issues where we need community help
1011

@@ -68,6 +69,19 @@ Before submitting a PR:
6869
- [ ] Changes are documented if needed
6970
- [ ] PR description explains the changes
7071
- [ ] Related issue is referenced
72+
- [ ] Commits are signed off (see DCO below)
73+
74+
## Developer Certificate of Origin (DCO)
75+
76+
By contributing to SonicJS, you certify that you wrote the code (or otherwise have the right to submit it) and agree to release it under the project's MIT license. This is formalized by the [Developer Certificate of Origin](https://developercertificate.org/).
77+
78+
To signal your agreement, add a `Signed-off-by` line to each commit:
79+
80+
```bash
81+
git commit -s -m "your commit message"
82+
```
83+
84+
This appends a line like `Signed-off-by: Your Name <your.email@example.com>` to the commit message using your configured `user.name` and `user.email`.
7185

7286
## Questions?
7387

GOVERNANCE.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# SonicJS Governance
2+
3+
This document describes how decisions are made in the SonicJS project.
4+
5+
## Governance Model
6+
7+
SonicJS follows a **Benevolent Dictator for Life (BDFL)** model with trusted co-maintainers. The project lead has final authority on project direction, but day-to-day development is a shared responsibility among maintainers.
8+
9+
This model is intentionally lightweight. As the project and contributor base grow, we may adopt more formal structures (e.g., a Technical Steering Committee).
10+
11+
## Roles
12+
13+
### Project Lead (BDFL)
14+
15+
- **Current:** [@lane711](https://github.com/lane711) (Lane Campbell)
16+
- Has final authority on all project decisions
17+
- Owns the GitHub organization and related infrastructure
18+
- Sets the project roadmap and long-term vision
19+
- Can grant or revoke maintainer access
20+
21+
### Maintainers
22+
23+
- **Current:** [@lane711](https://github.com/lane711), [@mmcintosh](https://github.com/mmcintosh)
24+
- Hold the GitHub "Maintain" role on the repository
25+
- Can review, approve, and merge pull requests
26+
- Triage issues and respond to community questions
27+
- Help cut releases and maintain the changelog
28+
- Expected to follow the decision-making process below
29+
30+
### Contributors
31+
32+
- Anyone who submits a pull request, opens an issue, or participates in discussions
33+
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for how to get involved
34+
35+
## Decision-Making Process
36+
37+
### What Maintainers Can Merge Independently
38+
39+
Maintainers may merge PRs without explicit sign-off from the project lead when the change is:
40+
41+
- A bug fix aligned with existing behavior
42+
- A documentation improvement
43+
- A test addition or improvement
44+
- A dependency update (patch or minor version)
45+
- A feature already discussed and approved in an issue or discussion
46+
- A refactor that does not change public APIs
47+
48+
### What Requires Project Lead Sign-Off
49+
50+
The following changes require explicit approval from the project lead:
51+
52+
- **Breaking changes** to public APIs or plugin interfaces
53+
- **New major features** not previously discussed
54+
- **Licensing or governance changes** (this file, LICENSE, CONTRIBUTING.md)
55+
- **Dependency additions** that introduce significant new surface area
56+
- **Security-sensitive changes** (auth, permissions, secrets handling)
57+
- **Release versioning decisions** (especially major version bumps)
58+
- **Changes to the project's scope or direction**
59+
60+
### Disagreements
61+
62+
If maintainers disagree on a change:
63+
64+
1. Discuss it openly in the PR or a GitHub discussion
65+
2. If consensus is not reached, the project lead has final say
66+
3. The project lead may delegate decisions on specific areas to maintainers over time
67+
68+
## Becoming a Maintainer
69+
70+
Maintainers are invited by the project lead after sustained, high-quality contribution to the project. There is no formal application process.
71+
72+
Signals that someone is ready for maintainer status:
73+
74+
- Consistent, meaningful contributions over a period of months
75+
- High-quality code review on others' PRs
76+
- Good judgment on what fits the project's direction
77+
- Responsiveness and helpfulness in issues and discussions
78+
- Trust established with the existing maintainer team
79+
80+
## Inactivity
81+
82+
Maintainers who are inactive for **6+ months** without prior notice may have their maintainer role moved to "emeritus" status. This is not punitive — it reflects the reality that priorities change. Emeritus maintainers can rejoin active status at any time by resuming meaningful contributions.
83+
84+
## Funding and Financial Matters
85+
86+
SonicJS accepts funding through [GitHub Sponsors](https://github.com/sponsors/lane711) and other channels listed in [.github/FUNDING.yml](./.github/FUNDING.yml).
87+
88+
Financial arrangements between maintainers (e.g., sponsorship revenue sharing, commercial licensing revenue) are handled privately between the parties involved and are not part of this public governance document.
89+
90+
The project lead retains ownership of the GitHub organization and associated trademarks/brand assets.
91+
92+
## Changes to This Document
93+
94+
Changes to this governance document require approval from the project lead and should be discussed openly with the maintainer team before being merged.
95+
96+
## Questions
97+
98+
For questions about governance, open a [GitHub Discussion](https://github.com/lane711/sonicjs/discussions) or reach out to the project lead.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Lane Campbell and SonicJS contributors
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

packages/core/src/plugins/core-plugins/shortcodes-plugin/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ apiRoutes.get('/:id', async (c: any) => {
150150
apiRoutes.post('/', async (c: any) => {
151151
try {
152152
const db = c.env.DB
153+
// eslint-disable-next-line @typescript-eslint/naming-convention -- snake_case keys accepted from JSON body for backwards compatibility
153154
const { name, display_name, displayName, description, handler_key, handlerKey, default_params, defaultParams, example_usage, exampleUsage, category } = await c.req.json()
154155
const scName = name
155156
const scHandlerKey = handler_key || handlerKey

0 commit comments

Comments
 (0)