docs: require DCO signoff on every commit (fixes #6 from adversarial review)
All checks were successful
All checks were successful
Every commit MUST be signed off (git commit -s). Preserves the copyright-holder's option to dual-license later — without a DCO/CLA instrument, every external contribution erodes that option (ADR-0004). Particularly load-bearing under multi-agent parallel authorship, where multiple sessions commit in parallel and the DCO is the only per-commit aggregation instrument. Adds DCO.md with the full Linux-Foundation DCO text + the agents-sign-off- with-the-human's-identity rule. AGENTS.md Git workflow gains the DCO bullet.
This commit is contained in:
@@ -250,6 +250,15 @@ and "why isn't X here?" questions. Consult it before adding anything.
|
|||||||
each land as separate commits when practical. Don't bundle unrelated work.
|
each land as separate commits when practical. Don't bundle unrelated work.
|
||||||
- **Never commit secrets.** The `.gitignore` already covers `.env*`, `*.pem`, `*.key`. If
|
- **Never commit secrets.** The `.gitignore` already covers `.env*`, `*.pem`, `*.key`. If
|
||||||
a new secret pattern appears, extend `.gitignore` in the same commit.
|
a new secret pattern appears, extend `.gitignore` in the same commit.
|
||||||
|
- **Developer Certificate of Origin (DCO) — REQUIRED on every commit.** Every commit
|
||||||
|
MUST be signed off (`git commit -s` or `git commit --signoff`) to attest the author
|
||||||
|
has the right to contribute the code under the project's license (GPL-3.0-or-later,
|
||||||
|
ADR-0004). This preserves the copyright-holder's option to dual-license later —
|
||||||
|
without a DCO/CLA instrument, every external contribution erodes that option. See
|
||||||
|
[`DCO.md`](DCO.md) for the full text. The signoff line (`Signed-off-by: Name <email>`)
|
||||||
|
is the canonical attestation; CI (planned) will reject unsigned commits. Agents
|
||||||
|
committing on behalf of a human MUST sign off with the human's name + email, not
|
||||||
|
their own identity.
|
||||||
- **PR description template** (for non-trivial PRs):
|
- **PR description template** (for non-trivial PRs):
|
||||||
```
|
```
|
||||||
## What lands
|
## What lands
|
||||||
|
|||||||
82
DCO.md
Normal file
82
DCO.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Developer Certificate of Origin (DCO)
|
||||||
|
|
||||||
|
Version 1.1
|
||||||
|
|
||||||
|
Copyright (C) 2004, 2006 The Linux Foundation. All rights reserved.
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this
|
||||||
|
license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
By making a contribution to this project, I certify that:
|
||||||
|
|
||||||
|
(a) The contribution was created in whole or in part by me and I
|
||||||
|
have the right to submit it under the open source license
|
||||||
|
indicated in the file; or
|
||||||
|
|
||||||
|
(b) The contribution is based upon previous work that, to the best
|
||||||
|
of my knowledge, is covered under an appropriate open source
|
||||||
|
license and I have the right under that license to submit that
|
||||||
|
work with modifications, whether created in whole or in part
|
||||||
|
by me, under the same open source license (unless I am
|
||||||
|
permitted to submit under a different license), as indicated
|
||||||
|
in the file; or
|
||||||
|
|
||||||
|
(c) The contribution was provided directly to me by some other
|
||||||
|
person who certified (a), (b) or (c) and I have not modified
|
||||||
|
it.
|
||||||
|
|
||||||
|
(d) I understand and agree that this project and the contribution
|
||||||
|
are public and that a record of the contribution (including all
|
||||||
|
personal information I submit with it, including my sign-off) is
|
||||||
|
maintained indefinitely and may be redistributed consistent with
|
||||||
|
this project or the open source license(s) involved.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to sign off
|
||||||
|
|
||||||
|
Every commit MUST be signed off. Use `git commit -s` (or `git commit --signoff`)
|
||||||
|
to add the attestation line automatically:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git commit -s -m "feat: add barge-in reflex"
|
||||||
|
|
||||||
|
commit 0123456789abcdef...
|
||||||
|
Author: A.D. Lee <alee@example.com>
|
||||||
|
Date: Wed Jul 2 10:00:00 2026 +0000
|
||||||
|
|
||||||
|
feat: add barge-in reflex
|
||||||
|
|
||||||
|
Signed-off-by: A.D. Lee <alee@example.com>
|
||||||
|
```
|
||||||
|
|
||||||
|
The `Signed-off-by: Name <email>` line is the canonical DCO attestation. The
|
||||||
|
name and email MUST match the git author identity.
|
||||||
|
|
||||||
|
## Why DCO (not a CLA)
|
||||||
|
|
||||||
|
The DCO is a per-commit attestation (lightweight, no registration), not a
|
||||||
|
Contributor License Agreement (which would require a one-time grant + tracking).
|
||||||
|
The DCO preserves the copyright-holder's option to dual-license the project
|
||||||
|
later — every contributor retains their own copyright but attests they have the
|
||||||
|
right to contribute under GPL-3.0-or-later (the project's license, ADR-0004).
|
||||||
|
See [ADR-0004](docs/adr/0004-license.md) for the license decision and the
|
||||||
|
dual-license rationale.
|
||||||
|
|
||||||
|
## For agents committing on behalf of a human
|
||||||
|
|
||||||
|
An AI agent that commits code on behalf of a human operator MUST sign off with
|
||||||
|
the **human's** name + email, not the agent's own identity. The human is the
|
||||||
|
contributor of record; the agent is the instrument. The DCO attestation
|
||||||
|
certifies the human's right to contribute, not the agent's.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Correct — the human (alee) is the contributor of record
|
||||||
|
Signed-off-by: A.D. Lee <alee@example.com>
|
||||||
|
|
||||||
|
# WRONG — the agent is not a legal entity that can hold copyright
|
||||||
|
Signed-off-by: opencode-agent <agent@example.com>
|
||||||
|
```
|
||||||
|
|
||||||
|
CI (planned) will reject commits missing a valid `Signed-off-by` line matching
|
||||||
|
the author identity.
|
||||||
Reference in New Issue
Block a user