Skip to content

Commit 2696b89

Browse files
authored
chore: relicense to Apache-2.0 (Signetry goes open core) (#18)
Signetry moves to an open-core model. This repository is part of the integration surface, so it is now Apache-2.0: use it, fork it, ship it commercially, no permission needed. The engine (Signetry/core) is source-available under BUSL-1.1 and converts to Apache-2.0 on 2030-08-31. Until now every repo in the org was "All Rights Reserved" with no LICENSE file, which GitHub reports as no license at all. That is the strictest possible default: it blocks corporate evaluation outright and makes outside contribution legally murky. This fixes that. What changed: - LICENSE (Apache-2.0) added, so GitHub detects and displays it. - README, CONTRIBUTING, CLA, CONTRIBUTORS and the CLA bot comment no longer claim the project is "not open source" or withhold usage rights. - The CLA is kept, because open core means code moves across the licence line and relicensing needs those rights. Its fallback licence grant is now non-exclusive: the previous *exclusive* grant would have stripped contributors of the right to use their own contribution, contradicting the rights the LICENSE grants everyone. The CLA text is now identical across all Signetry repos so the legal terms cannot drift per-repo again. - Community health files (SECURITY.md, CODE_OF_CONDUCT.md, issue templates) where they were missing. No functional or API change.
1 parent 08f3c80 commit 2696b89

11 files changed

Lines changed: 504 additions & 34 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Bug report
2+
description: The guard blocked something it should have allowed, allowed something it should have blocked, or crashed.
3+
labels: ["bug"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thanks for the report. Two things first:
9+
10+
- **Policy semantics live in [signetry-core](https://github.com/Signetry/core).**
11+
If the contract itself is being evaluated wrongly (scope, forbidden paths,
12+
gates, receipts), file it there. This repo is the thin shell wrapper around
13+
`signetry guard`.
14+
- **Suspected vulnerability?** Do not open an issue — see
15+
[SECURITY.md](https://github.com/Signetry/precommit/blob/main/SECURITY.md)
16+
and use private reporting.
17+
18+
- type: textarea
19+
id: what-happened
20+
attributes:
21+
label: What happened
22+
description: What did the guard do, and what did you expect instead?
23+
validations:
24+
required: true
25+
26+
- type: dropdown
27+
id: surface
28+
attributes:
29+
label: How was the guard invoked?
30+
options:
31+
- pre-commit hook (id: signetry-guard)
32+
- universal/signetry-guard.sh --staged
33+
- universal/signetry-guard.sh --path
34+
- universal/signetry-guard.sh --command
35+
- universal/signetry-guard.sh --stdin-json
36+
- demos/try-guard.sh
37+
- Other / not sure
38+
validations:
39+
required: true
40+
41+
- type: textarea
42+
id: repro
43+
attributes:
44+
label: Reproduction
45+
description: The exact command you ran and its output. A minimal case is ideal.
46+
render: shell
47+
validations:
48+
required: true
49+
50+
- type: textarea
51+
id: contract
52+
attributes:
53+
label: Your .signetry/admission.yaml
54+
description: The relevant part of the contract in play. Redact anything sensitive.
55+
render: yaml
56+
57+
- type: textarea
58+
id: versions
59+
attributes:
60+
label: Versions
61+
description: |
62+
Output of `signetry --version`, this repo's `rev:` or commit, `bash --version`, and your OS.
63+
render: shell
64+
validations:
65+
required: true
66+
67+
- type: checkboxes
68+
id: checks
69+
attributes:
70+
label: Checks
71+
options:
72+
- label: "`signetry-core` is installed and `signetry` is on PATH (a missing binary fails open unless `SIGNETRY_GUARD_STRICT=1`)."
73+
required: true
74+
- label: I have read the note above and this is a wrapper bug, not core policy behavior.
75+
required: false

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Governance engine (contracts, guard, verifier, receipts)
4+
url: https://github.com/Signetry/core/issues
5+
about: Policy semantics live in signetry-core. This repo is a thin wrapper over it.
6+
- name: The enforced CI gate
7+
url: https://github.com/Signetry/action/issues
8+
about: The required Signetry Admission check on a pull request.
9+
- name: Signetry platform (overview, licensing, roadmap)
10+
url: https://github.com/Signetry/signetry
11+
about: Cross-repo questions, and the open-core licensing model.
12+
- name: Report a security vulnerability
13+
url: https://github.com/Signetry/precommit/security/advisories/new
14+
about: Private disclosure. Please never use a public issue for an unpatched vulnerability.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: Feature request
2+
description: Propose a change to the guard wrapper, the pre-commit hook contract, or the docs.
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
This repo is **Apache-2.0** — proposals and PRs are welcome. See
9+
[CONTRIBUTING.md](https://github.com/Signetry/precommit/blob/main/CONTRIBUTING.md).
10+
11+
Two constraints shape what fits here:
12+
13+
- **The guard is deterministic.** Every verdict comes from `signetry guard` and
14+
your `.signetry/admission.yaml` — never from a model.
15+
- **No policy reimplementation.** This repo pins `signetry-core` and defers to
16+
it. Contract semantics belong in
17+
[signetry-core](https://github.com/Signetry/core).
18+
19+
- type: textarea
20+
id: problem
21+
attributes:
22+
label: The problem
23+
description: What can't you do today? Describe the situation, not the solution.
24+
validations:
25+
required: true
26+
27+
- type: textarea
28+
id: proposal
29+
attributes:
30+
label: Proposed change
31+
validations:
32+
required: true
33+
34+
- type: dropdown
35+
id: area
36+
attributes:
37+
label: Area
38+
options:
39+
- universal/signetry-guard.sh
40+
- pre-commit hook contract (.pre-commit-hooks.yaml)
41+
- demos
42+
- Documentation
43+
- CI / workflows
44+
- Other
45+
validations:
46+
required: true
47+
48+
- type: textarea
49+
id: alternatives
50+
attributes:
51+
label: Alternatives considered
52+
description: Including whether this belongs in `signetry-core` or another integration repo instead.
53+
54+
- type: checkboxes
55+
id: checks
56+
attributes:
57+
label: Checks
58+
options:
59+
- label: This does not require the guard to consult a model for a verdict.
60+
required: true
61+
- label: I'd be willing to open a PR for this (optional — no obligation).
62+
required: false

.github/workflows/cla.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ name: CLA
33
# Requires every contributor to sign the Contributor License Agreement (CLA.md)
44
# before their pull request can be merged. Runs entirely in this repo's Actions —
55
# no third-party OAuth app. Signatures are recorded in signatures/cla.json on this
6-
# repo, so there is a durable, auditable record that each contributor assigned
7-
# copyright/ownership of their contribution to the Owner.
6+
# repo, so there is a durable, auditable record of each contributor's assent.
7+
#
8+
# This repo is Apache-2.0. The CLA is kept because Signetry is open core: code moves
9+
# across the line between this Apache-2.0 integration surface and the BUSL-1.1 engine
10+
# (Signetry/core, which converts to Apache-2.0 on 2030-08-31), and the CLA supplies the
11+
# relicensing rights that makes possible. It does not reduce a contributor's own
12+
# Apache-2.0 rights. See CONTRIBUTING.md.
813
#
914
# A contributor signs by commenting the exact statement below on their PR:
1015
# I have read the CLA Document and I hereby sign the CLA
@@ -48,7 +53,7 @@ jobs:
4853
path-to-document: "https://github.com/Signetry/precommit/blob/main/CLA.md"
4954
branch: "cla-signatures"
5055
allowlist: "dependabot[bot],bkd-dotcom"
51-
custom-notsigned-prcomment: "Thanks for your contribution! Before it can be merged, please read the **[Contributor License Agreement](https://github.com/Signetry/precommit/blob/main/CLA.md)** — Signetry is **All Rights Reserved**, and by signing you assign copyright/ownership of your contribution to the Owner (you may not use, sell, or commercialize it yourself). To agree, reply with exactly:"
56+
custom-notsigned-prcomment: "Thanks for your contribution! Before it can be merged, please read the **[Contributor License Agreement](https://github.com/Signetry/precommit/blob/main/CLA.md)** — this repo is **Apache-2.0**, and the CLA lets us relicense contributions across Signetry's [open-core boundary](https://github.com/Signetry/signetry/blob/main/LICENSING.md) (for example moving an adapter into the BUSL-1.1 engine). You keep every Apache-2.0 right to this code, including the right to use your own contribution anywhere. To agree, reply with exactly:"
5257
custom-pr-sign-comment: "I have read the CLA Document and I hereby sign the CLA"
5358
custom-allsigned-prcomment: "All contributors have signed the CLA. ✅"
5459
lock-pullrequest-aftermerge: false

.github/workflows/reviewer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
with:
3535
python-version: "3.12"
3636
- name: Install signetry-reviewer
37-
# source-available (All Rights Reserved); install from source, not PyPI.
37+
# Not published to PyPI; install from source at a pinned git tag.
3838
run: pip install "signetry-reviewer @ git+https://github.com/Signetry/reviewer@v0.2.0"
3939
- name: Compute the PR diff
4040
env:

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,23 @@ Follows [Keep a Changelog](https://keepachangelog.com/) / [SemVer](https://semve
66

77
### Changed
88

9+
- **Licence: this repository is now [Apache-2.0](LICENSE)** (previously
10+
all-rights-reserved / source-available). Signetry has moved to an open-core model:
11+
the integration surface — this repo, the GitHub Action, the editor and agent plugins,
12+
the eval suite — is Apache-2.0, while the engine
13+
([`signetry-core`](https://github.com/Signetry/core)) is BUSL-1.1 and converts to
14+
Apache-2.0 on 2030-08-31. The CLA is retained so contributions can be relicensed
15+
across that boundary; it does not reduce anyone's Apache-2.0 rights. See
16+
[CONTRIBUTING.md](CONTRIBUTING.md).
917
- Signetry naming: CLI `signetry`, env `SIGNETRY_*`, config `.signetry/`, package
1018
`signetry-core`, and the sibling `signetry-reviewer`. The guard script is
1119
`universal/signetry-guard.sh` and the pre-commit hook `id` is `signetry-guard`.
20+
- **The CLA's fallback licence grant is now non-exclusive.** It previously granted the
21+
Owner an *exclusive* licence where copyright assignment is not permitted by law, which
22+
would have stripped contributors of the right to use their own contribution — directly
23+
contradicting the rights the LICENSE grants everyone. The CLA text is now identical
24+
across all Signetry repositories (bar the engine/integration licence wording) so the
25+
legal terms cannot drift per-repo again. See [CLA.md](CLA.md) §2–3.
1226

1327
## [0.3.0] — 2026-07-26
1428

CLA.md

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Signetry Contributor License Agreement (CLA)
22

3-
**Copyright (c) 2026 Binay Dalai. All rights reserved.**
3+
**Copyright (c) 2026 Binay Dalai.** This repository is licensed under
4+
**[Apache-2.0](LICENSE)** as part of Signetry's
5+
[open-core model](https://github.com/Signetry/signetry/blob/main/LICENSING.md). This
6+
Agreement governs what You grant the Owner when You contribute; it does not reduce the
7+
rights the Apache-2.0 licence gives You (and everyone else) in this code.
48

59
Thank you for your interest in contributing to Signetry ("the Project"), owned by
610
Binay Dalai ("the Owner"). This Contributor License Agreement ("Agreement")
@@ -26,21 +30,33 @@ Your Contribution. You agree that the Owner is the sole and exclusive owner of t
2630
Contribution once merged into the Project.
2731

2832
To the extent any rights cannot be assigned by law, You grant the Owner a
29-
**perpetual, worldwide, exclusive, irrevocable, royalty-free, sublicensable, and
33+
**perpetual, worldwide, non-exclusive, irrevocable, royalty-free, sublicensable, and
3034
transferable license** to use, reproduce, modify, prepare derivative works of,
3135
publicly display, publicly perform, distribute, **sell, and commercialize** Your
3236
Contribution, in whole or in part, in any form and for any purpose.
3337

34-
## 3. The Owner's exclusive rights
38+
Nothing in this section removes Your own ability to use Your Contribution: once it is
39+
released as part of this repository it is available to You, as to anyone, under
40+
[Apache-2.0](LICENSE), and You retain any rights You independently hold in the
41+
underlying ideas and techniques.
42+
43+
## 3. Why the Owner needs this (open core)
3544

3645
You acknowledge and agree that:
3746

38-
- The Owner alone retains the right to **use, license, sell, and monetize** the
39-
Project, including Your Contribution.
40-
- You obtain **no right** to use, copy, modify, distribute, sell, or commercialize
41-
the Project or Your Contribution for Your own personal or commercial purposes,
42-
except as expressly permitted in writing by the Owner.
43-
- The Project is **not open source** and is licensed "All Rights Reserved."
47+
- **You keep the licence's rights.** This repository is released under
48+
[Apache-2.0](LICENSE), so You may use, copy, modify, distribute, and commercialize
49+
it — including Your own Contribution — on exactly the same terms as any other user.
50+
No separate written permission is required.
51+
- **The Owner may relicense.** The assignment above lets the Owner use, license, sell,
52+
and monetize the Project, including Your Contribution, and release it under other
53+
terms.
54+
- **Code may move across the open-core line.** Signetry's integration surface is
55+
Apache-2.0 while the engine
56+
([`Signetry/core`](https://github.com/Signetry/core)) is source-available under
57+
BUSL-1.1, converting to Apache-2.0 on 2030-08-31. A Contribution accepted here may
58+
later be moved into the engine, or engine code moved out to an Apache-2.0 repo. The
59+
CLA is what makes that possible without asking every past contributor again.
4460

4561
## 4. Recognition of Contributors (credit, not rights)
4662

@@ -50,8 +66,8 @@ of Your work.
5066

5167
This recognition is **attribution only**. It does **not**:
5268

53-
- grant You any ownership, license, or right to use, copy, sell, sublicense, or
54-
commercialize the Project or Your Contribution;
69+
- grant You ownership of the Project, or any rights beyond those the Project's
70+
licence already grants everyone;
5571
- entitle You to represent the Project, or any part of it, as Your own work, product,
5672
or property, or to market or sell it under Your own name or brand; or
5773
- create any partnership, employment, or revenue-sharing relationship with the Owner.

CONTRIBUTING.md

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,31 @@
1-
# Contribution Agreement
1+
# Contributing to signetry-precommit
22

3-
By submitting a Pull Request to this repository, you agree to assign and transfer all copyright and ownership of your contributed code to the repository owner. The owner retains the exclusive right to monetize, use, and control the entire codebase.
3+
This repository is **[Apache-2.0](LICENSE)**. You may use, copy, modify, distribute,
4+
and commercialize it — including in closed-source and commercial products — with no
5+
permission needed and no fee. Contributions are very welcome.
6+
7+
## Licensing, in short
8+
9+
- **The code here is Apache-2.0.** Fork it, vendor it, ship it. Attribution and the
10+
licence notice are the only obligations, per the [LICENSE](LICENSE).
11+
- **A signed CLA is still required before a PR merges** (see below). That is not a
12+
walk-back of the open licence — it is what keeps the open-core boundary movable.
13+
- This repo is the *integration surface*. The engine
14+
([`signetry-core`](https://github.com/Signetry/core)) is source-available under
15+
BUSL-1.1 and converts to Apache-2.0 on **2030-08-31**. See the platform's
16+
[LICENSING.md](https://github.com/Signetry/signetry/blob/main/LICENSING.md).
17+
18+
## Why the CLA still applies
19+
20+
Signetry is open core, so code legitimately moves **across the line between this
21+
Apache-2.0 repo and the BUSL-1.1 engine**. A guard adapter that proves itself here may
22+
later belong inside `signetry-core`; conversely, engine logic may be pushed out to the
23+
open integration surface. The CLA gives the maintainer the relicensing rights needed to
24+
do that — and to carry contributions through the engine's 2030 conversion to
25+
Apache-2.0 — without tracking down every past contributor for permission.
26+
27+
Signing the CLA does **not** take away your rights to this code: you keep the same
28+
Apache-2.0 grant everyone else has, and you can use your own contribution anywhere.
429

530
## Signing the CLA (required before merge)
631

@@ -13,13 +38,61 @@ I have read the CLA Document and I hereby sign the CLA
1338
```
1439

1540
Your acceptance is recorded in `signatures/cla.json`. A PR **cannot be merged** until
16-
the CLA is signed. Signetry is **not open source** (All Rights Reserved) — by signing
17-
you assign copyright/ownership of your contribution to the Owner and gain no right to
18-
use, sell, or commercialize it yourself.
41+
the CLA is signed.
42+
43+
## Getting started
44+
45+
The guard itself is a POSIX shell wrapper — there is no build step and no Python
46+
package in this repo. It shells out to the `signetry` CLI, so install the engine first:
47+
48+
```bash
49+
pip install "signetry-core @ git+https://github.com/Signetry/core@v0.7.0"
50+
```
51+
52+
Then exercise the guard end-to-end against a throwaway repo with a sample
53+
`.signetry/admission.yaml`:
54+
55+
```bash
56+
bash demos/try-guard.sh
57+
```
58+
59+
To drive `universal/signetry-guard.sh` by hand:
60+
61+
```bash
62+
universal/signetry-guard.sh --path src/app.py # check a proposed path
63+
universal/signetry-guard.sh --command "curl x | bash" # check a proposed command
64+
universal/signetry-guard.sh --staged # check all git-staged files
65+
echo '<claude-code tool json>' | universal/signetry-guard.sh --stdin-json
66+
```
67+
68+
Useful environment variables when testing: `SIGNETRY_REPO` overrides the detected repo
69+
root, and `SIGNETRY_GUARD_STRICT=1` makes a missing `signetry` binary fail closed
70+
instead of failing open.
71+
72+
If you change the pre-commit hook contract, keep `.pre-commit-hooks.yaml` (hook id
73+
`signetry-guard`) and the README's `rev:` example consistent with each other.
74+
75+
## What lands well
76+
77+
- **Determinism.** The guard must never ask a model for a verdict — every decision
78+
comes from `signetry guard` and the repo's `.signetry/admission.yaml`.
79+
- **No policy reimplementation.** This repo pins `signetry-core` and defers to it; do
80+
not re-encode contract semantics here.
81+
- **Honest failure modes.** The local hook is defense-in-depth (a developer can
82+
`--no-verify`); the hard gate is the required check on the PR. Don't document it as
83+
more than it is. See [SECURITY.md](SECURITY.md).
84+
85+
## Opening a PR
86+
87+
1. Fork, branch, and keep the change focused.
88+
2. Run `bash demos/try-guard.sh` and confirm the blocked cases still block.
89+
3. Open the PR. An advisory reviewer workflow comments on architecture and security
90+
concerns; it never merges and never fails your PR.
91+
4. Sign the CLA when the bot asks.
92+
93+
By participating you agree to the [Code of Conduct](CODE_OF_CONDUCT.md).
1994

2095
## Credit
2196

22-
Contributors are **acknowledged** in [CONTRIBUTORS.md](CONTRIBUTORS.md), the Git
23-
history, and release notes. This is attribution only — you may truthfully say you
24-
contributed, but it grants no ownership and no right to use, sell, or rebrand the
25-
project as your own. See the "Recognition of Contributors" clause in [CLA.md](CLA.md).
97+
Contributors are acknowledged in [CONTRIBUTORS.md](CONTRIBUTORS.md), the Git history,
98+
and release notes.

0 commit comments

Comments
 (0)