Skip to content

Finalize Conveyal CLA v1.0 for EBP US Inc. with individual, organization-wide coverage - #1

Merged
trevorgerhardt merged 16 commits into
mainfrom
cla-v1.0
Nov 9, 2026
Merged

trevorgerhardt merged 16 commits into
mainfrom
cla-v1.0

Conversation

@trevorgerhardt

@trevorgerhardt trevorgerhardt commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

Summary

- Unsigned provisional CLA v0.1; legal review pending
+ Completed CLA v1.0; canonical file and CURRENT synchronized
- Conveyal LLC as contracting party and license recipient
+ EBP US Inc. (EBP); authorized Conveyal maintainers accept on its behalf
- Ambiguous covered-project/program enrollment language
+ "Covered project" = any public repository in the github.com Conveyal
+ organization; one accepted signature per CLA version covers all of them
- Individual signatures and corporate authorization records
+ Individual signatures only
- Patent license terminates for "an entity that institutes patent litigation"
+ Apache/CSA termination: only the litigating entity's licenses terminate;
+ EBP may sublicense the patent license to recipients of the covered project
- Signature records embed the complete agreement
+ Records link to the agreement and state the SHA-256 hash of its exact file
  • Rename the canonical agreement to versions/CLA-v1.0.md, synchronize CLA.md, and remove obsolete v0.1 references and provisional labels. No signature records require migration in this ledger.
  • Update grants, notification obligations, acceptance language, configuration, and documentation for EBP US Inc. Preserve Conveyal branding, GitHub URLs, the existing copyright notice, and CC BY 4.0 attribution.
  • Define covered projects as public repositories in the Conveyal organization, including future additions. Exclude unrelated EBP projects outside the organization. The signature record wording matches: "for public repositories in the Conveyal GitHub organization."
  • Remove corporate authorization: "You" is the individual contributor only; §6 and §7 no longer describe corporate records. sign.ts drops --individual, --corporate, --organization, and --authorized-id; coverage ignores and validation rejects corporate/ paths. Record paths stay signatures/<version>/individual/<id>.md.
  • Identify the signed agreement by link and hash (Sign the CLA by link and hash #5). Validators reject a wrong hash or embedded text, and anyone can check a record with shasum -a 256 versions/CLA-<version>.md. The PR comment tells contributors to read the agreement before opening their signing link.
  • Consolidate documentation: README, GOVERNANCE, PROJECTS, FAQ, SETUP_PROJECT, and signatures/README.md link to CLA section 7 instead of restating scope.
  • Separate legal coverage from workflow installation and automatic refresh enrollment. Remove R5 from the agreement and keep specific R5 examples and rollout history in docs.
  • Maintain one bot-owned signature-validation comment: update failures in place, resolve it after successful validation or when no signature records change, migrate legacy failure comments, and remove duplicate bot reports. Recheck the PR revision before posting a result.

Evidence

  • Before: Agreement and fixtures used v0.1 and Conveyal LLC.
    After: pnpm typecheck and all 113 tests pass, including single-signature coverage across two consumer repositories without refresh enrollment and rejection of altered signature scope.
  • Before: sign.ts --corporate generated corporate snapshots that supplied coverage.
    After: --corporate and --individual fail with Unknown option; a PR adding signatures/v1.0/corporate/acme/0001.md fails validation.
  • Before: The signing URL was about 5,170 characters against a 5,300-character budget, which limited the agreement's length.
    After: About 660 characters, whatever the agreement's length. A generated record's hash equals shasum -a 256 versions/CLA-v1.0.md.
  • Before: Signature failures posted new comments that remained after successful reruns.
    After: Regression tests cover failure updates, success resolution, legacy cleanup, bot ownership, no unsolicited success comments, and stale-run protection.
  • git diff --check passes; CLA.md and versions/CLA-v1.0.md are byte-identical.

Merge Danger

Door: Two-way until signatures are accepted; one-way afterward.

This revises the unsigned pre-release agreement in place. Once v1.0 is signed, freeze its text and use a new agreement version for material changes. EBP must authorize the maintainers who accept records; GitHub merge permission alone is not EBP's authorization.

The agreement has not had counsel review. Open questions: whether a record that links to the terms, with "have read" and a hash, is enough evidence of assent, since contributors no longer see the terms in the GitHub editor as they commit; and whether §6 should say that a record identifies the agreement by hash. #4 proposes restoring further CSA protections and is still open.

Blast Radius: Organization-wide

Changes affect future Conveyal CLA signatures and contributor checks. The record format and the sign.ts CLI changed, so consumers must use a compatible reviewed tooling release before rollout; this PR does not publish a tooling release or update external consumers. Contributors from companies sign individually and represent employer authorization under §4. Repository workflows and required-check settings still need individual deployment. The browser test has not been run on the new record format; EDITOR_PROTOTYPE.md requires repeating it before rollout.

Coverage checks read the base branch, so this PR passes against v0.1 on main. After merge, main requires v1.0 and no v1.0 records exist, so every human author's PR fails Conveyal CLA until they sign, including maintainers. The main ruleset requires no status checks today, so those failures will not block merges there.

Signature-comment maintenance takes effect after this PR merges because signature workflows execute trusted base-branch code. Comment API failures are logged and do not change the validation verdict.

@github-actions

Copy link
Copy Markdown

CLA signature validation failed:

  • .github/CODEOWNERS: signature pull requests may change only signature or authorization records
  • .github/scripts/cla.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/signature_record.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/test_cla.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/validate_signatures.ts: signature pull requests may change only signature or authorization records
  • CHANGELOG.md: signature pull requests may change only signature or authorization records
  • CLA.md: signature pull requests may change only signature or authorization records
  • EDITOR_PROTOTYPE.md: signature pull requests may change only signature or authorization records
  • FAQ.md: signature pull requests may change only signature or authorization records
  • GOVERNANCE.md: signature pull requests may change only signature or authorization records
  • PRIVACY.md: signature pull requests may change only signature or authorization records
  • PROJECTS.md: signature pull requests may change only signature or authorization records
  • README.md: signature pull requests may change only signature or authorization records
  • RELEASING.md: signature pull requests may change only signature or authorization records
  • SETUP_PROJECT.md: signature pull requests may change only signature or authorization records
  • STANDARD-LICENSE.md: signature pull requests may change only signature or authorization records
  • cla/config.json: signature pull requests may change only signature or authorization records
  • sign.ts: signature pull requests may change only signature or authorization records
  • versions/CLA-v1.0.md: signature pull requests may change only signature or authorization records
  • versions/CURRENT: signature pull requests may change only signature or authorization records
  • signatures/README.md: records are append-only; modification, deletion, and renaming are forbidden

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

All human commit authors are covered by Conveyal CLA v0.1.

@github-actions

Copy link
Copy Markdown

CLA signature validation failed:

  • .github/CODEOWNERS: signature pull requests may change only signature or authorization records
  • .github/scripts/cla.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/signature_record.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/test_cla.ts: signature pull requests may change only signature or authorization records
  • .github/scripts/validate_signatures.ts: signature pull requests may change only signature or authorization records
  • CHANGELOG.md: signature pull requests may change only signature or authorization records
  • CLA.md: signature pull requests may change only signature or authorization records
  • EDITOR_PROTOTYPE.md: signature pull requests may change only signature or authorization records
  • FAQ.md: signature pull requests may change only signature or authorization records
  • GOVERNANCE.md: signature pull requests may change only signature or authorization records
  • PRIVACY.md: signature pull requests may change only signature or authorization records
  • PROJECTS.md: signature pull requests may change only signature or authorization records
  • README.md: signature pull requests may change only signature or authorization records
  • RELEASING.md: signature pull requests may change only signature or authorization records
  • SETUP_PROJECT.md: signature pull requests may change only signature or authorization records
  • STANDARD-LICENSE.md: signature pull requests may change only signature or authorization records
  • cla/config.json: signature pull requests may change only signature or authorization records
  • sign.ts: signature pull requests may change only signature or authorization records
  • versions/CLA-v1.0.md: signature pull requests may change only signature or authorization records
  • versions/CURRENT: signature pull requests may change only signature or authorization records
  • signatures/README.md: records are append-only; modification, deletion, and renaming are forbidden

trevorgerhardt added a commit that referenced this pull request Oct 27, 2026
## Summary

Allow ordinary documentation and version-change PRs to edit
`signatures/README.md` without being classified as signature
submissions.

```diff
 signature paths
- every file under signatures/
+ every file under signatures/ except its top-level README.md
```

Both current and previous paths remain checked. Renaming a record to the
README still fails, and nested README files remain subject to record
validation. This applies to root and nested ledger configurations.

Unblocks the documentation change in #1 once this fix is merged to main
and its checks are triggered again.

## Evidence

- **Before:** Both root and nested README regression cases fail
validation.
**After:** All 101 tests pass, including rename protection cases; `pnpm
typecheck` passes.

## Merge Danger

**Door:** two-way

**Blast Radius:** validation

Only the exact ledger documentation path is excluded. Actual signature
records retain append-only validation.
@conveyal conveyal deleted a comment from github-actions Bot Oct 27, 2026
Comment thread versions/CLA-v1.0.md Outdated
Comment on lines +9 to +10
"Covered project" means any open-source repository in the Conveyal GitHub
organization (`conveyal`), including future additions.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"Covered project" means any open-source repository in the Conveyal GitHub
organization (`conveyal`), including future additions.
"Covered project" means any public repository in the github.com Conveyal
organization (`conveyal`), including future additions.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorporated this change in b15d56b

Comment thread PROJECTS.md Outdated
Comment on lines +6 to +7
are not covered. One accepted signature per CLA version covers all Conveyal
open-source repositories, including future additions. For example, R5 can

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of this text is repeated in GOVERNANCE.md, SETUP_PROJECT.md, signatures/README.md, README.md...

To make future changes easier, it might be worth reducing/consolidating some of the documentation, especially where things are clear in the CLA itself.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took a pass at consolidation here: f102cbf

Comment thread CLA.md Outdated
Comment on lines +9 to +10
"Covered project" means any open-source repository in the Conveyal GitHub
organization (`conveyal`), including future additions.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"Covered project" means any open-source repository in the Conveyal GitHub
organization (`conveyal`), including future additions.
"Covered project" means any public repository in the github.com Conveyal
organization (`conveyal`), including future additions.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorporated this change in b15d56b

Comment thread CLA.md Outdated
Comment on lines 13 to 14
enters this Agreement, or an authorized representative signing a corporate
authorization on behalf of an organization. "Contribution" means any original

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
enters this Agreement, or an authorized representative signing a corporate
authorization on behalf of an organization. "Contribution" means any original
enters this Agreement. "Contribution" means any original

Comment thread CLA.md Outdated
Comment on lines 39 to 41

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems different than the CSA example:

If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that Your Contribution, or the Work to which You have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed.

https://github.com/CloudSecurityAlliance/CLA-Ledger/blob/main/security-controls-catalog/versions/CLA-v1.0.md#3-grant-of-patent-license

As re-written, it seems like this would allow contributors to revoke a patent license they themselves granted (by alleging infringement of any patent).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewrote it back to the CSA example here: 8264940

Comment thread FAQ.md Outdated
Comment on lines 15 to 16
required. A corporate representative may authorize a
set of GitHub account IDs through a corporate record.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
required. A corporate representative may authorize a
set of GitHub account IDs through a corporate record.
required.

Comment thread versions/CLA-v1.0.md Outdated
Comment on lines +68 to +71
Corporate authorization records additionally identify the organization,
authorized representative account, and covered contributor account IDs. A
corporate record is effective when Conveyal merges it.
corporate record is effective when authorized Conveyal maintainers merge it
on behalf of EBP.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we removing the concept of corporate authorization?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I forgot to do that part. Made those changes here: bb14de9

Point README, GOVERNANCE, PROJECTS, FAQ, SETUP_PROJECT, and the signature
README at CLA section 7 instead of restating coverage terms.
Limit "You" to the individual contributor and drop corporate records from
sections 6 and 7, following review suggestions. Remove corporate generation,
coverage, and validation; validation now rejects corporate record paths.
Update documentation, the PR template, and tests.
Replace "open-source repository" with "public repository in the github.com
Conveyal organization", following review suggestions, and match the signature
record wording.
Terminate patent licenses only for an entity that sues over the Contribution
or project, matching the CSA source, and let EBP sublicense the patent license
to recipients of the covered project.
@trevorgerhardt trevorgerhardt changed the title Finalize Conveyal CLA v1.0 for EBP US Inc. and organization-wide coverage Finalize Conveyal CLA v1.0 for EBP US Inc. with individual, organization-wide coverage Oct 29, 2026
@ansoncfit

Copy link
Copy Markdown
Member

Thanks for the updates. Thinking through #1 (comment) more generally, a diff between our CLA and the CSA example, with an explanation of the intention behind any changes, might facilitate others' review.

@kschroeck

Copy link
Copy Markdown

I think we still need to clean up section 7. It's not clear what "that organization" means in the below.

This Agreement does not cover unrelated EBP projects outside that organization.

Also, I don't think we any longer expect to replace this version with a counsel-reviewed material version, right? Should we just use Massachusetts as we do for most of our other contracts?

Records link to the agreement and state the SHA-256 hash of its exact file instead of embedding its text. Signing links stay short at any agreement length, and the hash proves which frozen text was accepted.
Restore the Submitted definition, licensed-rights limit, trademark exclusion,
moral rights waiver, warranty disclaimer, offer withdrawal and decline, signer
representations, and entire-agreement clause. Move the legal-advice note to the
README.
Replace the note that no governing-law clause is included with CSA's
governing-law and venue clause, using Massachusetts instead of Nevada, as
suggested in review. Place it before the entire-agreement clause, as in CSA.
Add cla/exempt.json, read from the trusted base branch, listing GitHub account
IDs that need no signature record. The check treats listed authors as covered
and still fails for other uncovered or unmapped authors. A malformed list
fails the check closed. Seed the list with current EBP US Inc. employees and
document who maintains it.
@trevorgerhardt
trevorgerhardt merged commit c9974a2 into main Nov 9, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants