Sign off the house way
Purpose
Every house has a legal-provenance contract for outside contributions, and it is
enforced by a bot before a human ever looks at the change. Get it wrong and the PR
lands with a red check and a canned rejection — you read as someone who didn't read
the rules, which is exactly the "noise" signal this whole repo tries to avoid. The
trap is assuming one house's contract is universal: a Signed-off-by trailer that
Eclipse requires is simply noise in an Apache PR, and skipping it on an Eclipse PR
blocks the merge outright. The contract is house-specific; learn it before the first
commit, because a DCO trailer is set at commit time and is painful to add later
(interactive rebase across every commit).
When to use
- Before the first commit on a repo you haven't contributed to before.
- When a PR comes back with a red legal/agreement check (ECA, CLA, DCO).
- When you're unsure whether to pass
-s to git commit.
When NOT to use
This covers the legal SIGN-OFF contract; for the build/format/generator gate the
house runs on your code, that's obey-the-houses-own-tooling.
The practice (checklist)
Rationalizations
| Shortcut |
Why it fails |
| "Sign-off is boilerplate, I'll add it if a bot complains." |
The DCO trailer is set at commit time; retrofitting it means rebasing every commit. Do it up front with -s, not after a red check. |
"One house wanted Signed-off-by, so I'll always add it." |
It's house-specific — required on Eclipse, not the convention on Apache. A stray trailer on an Apache PR reads as copy-paste from another project. |
| "The legal check is red but the code is fine, a reviewer will wave it through." |
Automated agreement gates don't get waved through; an unresolved ECA/CLA blocks merge regardless of code quality, and leaving it red is your unfinished move. |
RECEIPT
Eclipse / Jetty — ECA + per-commit DCO, verified via gh 2026-07-24. The
eclipsefdn/eca check gates every PR and passed on #15435, #15472, and #15473:
"The author(s) of the pull request is covered by necessary legal agreements in
order to proceed!"
and #15435 carries a Signed-off-by trailer on all 3 of its 3 commits (gh pr view 15435 --repo jetty/jetty.project --json commits).
Apache / Solr — CLA-on-merge, no per-commit DCO, verified via gh. Merged PR
#4632 carries zero Signed-off-by trailers — consistent with Apache's model
where the committer resolves the agreement on merge and no per-commit sign-off is
expected. Two houses contributed to in the same month, two different contracts.
Lifecycle
- Signals it worked: the legal check is green on first push; no rebase-to-add-
sign-off round-trip; no "please sign the ECA/CLA" comment from a bot or maintainer.
- What to log on a misfire: which house, which contract you got wrong (missing
trailer / stray trailer / email mismatch), and what the gate said. Record it in
LEDGER.md.
- Death criterion: retire for a house only if it drops its agreement gate
entirely; the contracts themselves change rarely.
- Relates to: a front-gate sibling of obey-the-houses-own-tooling — both are
"read this house's rules before you touch it", one for the legal sign-off, one for
the build/generator tooling.
1---2name: sign-off-the-house-way3description: Before opening a PR, know which contributor sign-off THAT house requires and make sure it's present — the contracts differ by house and a missing one is an instant, automated "didn't read the rules" bounce. Eclipse projects (e.g. Jetty) gate every PR on an ECA plus a DCO `Signed-off-by` trailer on each commit; Apache projects (Solr/Lucene) use a CLA with the committer resolving on merge and need no per-commit trailer; other houses need neither. Check the house's contract first, not after a bot rejects you. Use at front-gate, before the first commit. Trigger terms: DCO, ECA, CLA, Signed-off-by, sign-off, `git commit -s`, eca check, contributor agreement.4---56# Sign off the house way78## Purpose910Every house has a legal-provenance contract for outside contributions, and it is11enforced by a bot before a human ever looks at the change. Get it wrong and the PR12lands with a red check and a canned rejection — you read as someone who didn't read13the rules, which is exactly the "noise" signal this whole repo tries to avoid. The14trap is assuming one house's contract is universal: a `Signed-off-by` trailer that15Eclipse *requires* is simply noise in an Apache PR, and skipping it on an Eclipse PR16blocks the merge outright. The contract is house-specific; learn it before the first17commit, because a DCO trailer is set at commit time and is painful to add later18(interactive rebase across every commit).1920## When to use2122- Before the first commit on a repo you haven't contributed to before.23- When a PR comes back with a red legal/agreement check (ECA, CLA, DCO).24- When you're unsure whether to pass `-s` to `git commit`.2526## When NOT to use2728This covers the legal SIGN-OFF contract; for the build/format/generator gate the29house runs on your code, that's obey-the-houses-own-tooling.3031## The practice (checklist)3233- [ ] Identify the house's contract before committing: check CONTRIBUTING, the PR34 template, and the checks that ran on a recent merged PR (`gh pr checks <n>`).35- [ ] **Eclipse (Jetty):** sign the ECA once under the same email you commit with,36 and add a DCO trailer to *every* commit — `git commit -s` (or `-s` on rebase).37- [ ] **Apache (Solr/Lucene):** no per-commit trailer; the committer resolves the38 CLA/ICLA on merge. Don't add a `Signed-off-by` — it isn't the house convention.39- [ ] Make the commit email match the agreement you signed (a mismatch fails the ECA40 even when the agreement exists).41- [ ] If a legal check is red, fix it *before* pinging a human — it's your court.4243## Rationalizations4445| Shortcut | Why it fails |46|---|---|47| "Sign-off is boilerplate, I'll add it if a bot complains." | The DCO trailer is set at commit time; retrofitting it means rebasing every commit. Do it up front with `-s`, not after a red check. |48| "One house wanted `Signed-off-by`, so I'll always add it." | It's house-specific — required on Eclipse, not the convention on Apache. A stray trailer on an Apache PR reads as copy-paste from another project. |49| "The legal check is red but the code is fine, a reviewer will wave it through." | Automated agreement gates don't get waved through; an unresolved ECA/CLA blocks merge regardless of code quality, and leaving it red is your unfinished move. |5051## RECEIPT5253**Eclipse / Jetty — ECA + per-commit DCO, verified via `gh` 2026-07-24.** The54`eclipsefdn/eca` check gates every PR and passed on #15435, #15472, and #15473:5556> "The author(s) of the pull request is covered by necessary legal agreements in57> order to proceed!"5859and #15435 carries a `Signed-off-by` trailer on all 3 of its 3 commits (`gh pr view6015435 --repo jetty/jetty.project --json commits`).6162**Apache / Solr — CLA-on-merge, no per-commit DCO, verified via `gh`.** Merged PR63#4632 carries **zero** `Signed-off-by` trailers — consistent with Apache's model64where the committer resolves the agreement on merge and no per-commit sign-off is65expected. Two houses contributed to in the same month, two different contracts.6667## Lifecycle6869- **Signals it worked:** the legal check is green on first push; no rebase-to-add-70 sign-off round-trip; no "please sign the ECA/CLA" comment from a bot or maintainer.71- **What to log on a misfire:** which house, which contract you got wrong (missing72 trailer / stray trailer / email mismatch), and what the gate said. Record it in73 [`LEDGER.md`](../../LEDGER.md).74- **Death criterion:** retire for a house only if it drops its agreement gate75 entirely; the contracts themselves change rarely.76- **Relates to:** a front-gate sibling of obey-the-houses-own-tooling — both are77 "read this house's rules before you touch it", one for the legal sign-off, one for78 the build/generator tooling.