From db124dd1bdd763fa7d59fa32baf8011598b9e805 Mon Sep 17 00:00:00 2001 From: Richard Abrich Date: Thu, 27 Aug 2026 23:54:17 -0400 Subject: [PATCH 1/2] docs: stop claiming a pull request signs the CLA The CLA this file points at is published in openadapt-flow#420. Assent is by signature, never by implication, so drop the sentence that says opening a pull request agrees to it. Add the corporate CLA link and state what governs a contribution until the CLA check is enabled. Update the two known-dead-link entries in the GitHub link checker to describe the current state. Delete both once openadapt-flow#420 merges. Requires review by qualified legal counsel before it is relied upon. Co-Authored-By: Claude Opus 5 Signed-off-by: Richard Abrich --- CONTRIBUTING.md | 41 ++++++++++++++++++--------- scripts/check_github_link_anchors.mjs | 10 +++++-- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b603c72f..8df2e36e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,26 +5,39 @@ keep the company able to steward it. ## Licensing of your contributions -This repository's code is MIT-licensed. So that OpenAdapt (MLDSAI Inc.) can -continue to steward and, if ever necessary, relicense the combined work, every -contribution must be covered by BOTH of the following: +This repository's code is MIT-licensed, and your contribution goes in under the +MIT License. Two things cover it. -1. **Developer Certificate of Origin (DCO) sign-off (required now).** Add a - `Signed-off-by` line to every commit certifying you wrote the change or have - the right to submit it under the project license: +1. **Developer Certificate of Origin (required now).** Add a `Signed-off-by` + line to every commit, certifying you wrote the change or that you have the + right to submit it under the project license: ``` git commit -s -m "fix: ..." ``` - This produces `Signed-off-by: Your Name `. See - https://developercertificate.org for the full DCO text. - -2. **Contributor License Agreement (CLA).** By opening a pull request you agree - to the OpenAdapt Contributor License Agreement. The canonical CLA text lives - at [`openadapt-flow/CLA.md`](https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CLA.md). - When the CLA Assistant check is enabled on this repository, first-time - contributors sign it once by commenting on their PR. + This produces `Signed-off-by: Your Name `. The full text is + at https://developercertificate.org. + +2. **Contributor License Agreement (published, not yet enforced).** The + canonical text is + [`openadapt-flow/CLA.md`](https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CLA.md) + for individuals, and + [`openadapt-flow/CCLA.md`](https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CCLA.md) + for companies whose employees contribute on company time. It gives MLDSAI + Inc. an explicit copyright and patent license, which the MIT License alone + doesn't provide, and it keeps the option of relicensing the combined work + later. + + You don't agree to the CLA by opening a pull request. Nothing is implied. + You agree when you sign, either through the automated CLA check once that + check is turned on for this repository, or by email. Until the check is on, + the DCO sign-off and the MIT License are what govern your contribution. + +OpenAdapt is open-core. MLDSAI Inc. sells proprietary products built on this +code, including a hosted control plane, and your contribution may end up in +them. The MIT License already permits that. The CLA says it out loud so nobody +is surprised. ## Pull request guidelines diff --git a/scripts/check_github_link_anchors.mjs b/scripts/check_github_link_anchors.mjs index 24183aa9..58727360 100644 --- a/scripts/check_github_link_anchors.mjs +++ b/scripts/check_github_link_anchors.mjs @@ -30,9 +30,13 @@ const SKIP_REPOS = new Set(['openadapt-cloud']) const UNRESOLVED = new Map([ [ 'https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CLA.md', - 'CONTRIBUTING.md asserts a Contributor License Agreement, but no CLA.md ' + - 'exists in openadapt-flow and that repository contributes under the DCO ' + - 'alone. Publishing a CLA, or dropping the claim, is a licensing decision.', + 'The Individual CLA is written and under review in openadapt-flow, and is ' + + 'not on that repository main yet. Delete this entry once it is.', + ], + [ + 'https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CCLA.md', + 'The Corporate CLA is written and under review in openadapt-flow, and is ' + + 'not on that repository main yet. Delete this entry once it is.', ], ]) From 552f33d16ab9835b8b42d4a9a036ff8bd15102e2 Mon Sep 17 00:00:00 2001 From: Richard Abrich Date: Fri, 28 Aug 2026 12:06:22 -0400 Subject: [PATCH 2/2] chore(links): check the CLA links instead of excusing them CLA.md and CCLA.md are on openadapt-flow main, so the two exception entries no longer describe anything. Removing them puts both URLs back under the network check, which is what proves CONTRIBUTING.md links to a document that exists. Co-Authored-By: Claude Opus 5 --- scripts/check_github_link_anchors.mjs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/scripts/check_github_link_anchors.mjs b/scripts/check_github_link_anchors.mjs index 58727360..0c0f1984 100644 --- a/scripts/check_github_link_anchors.mjs +++ b/scripts/check_github_link_anchors.mjs @@ -27,18 +27,7 @@ const SKIP_REPOS = new Set(['openadapt-cloud']) // Each one is reported as a warning on every run and must not be removed // without either fixing the link or publishing the target. Delete the entry // when the target exists. -const UNRESOLVED = new Map([ - [ - 'https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CLA.md', - 'The Individual CLA is written and under review in openadapt-flow, and is ' + - 'not on that repository main yet. Delete this entry once it is.', - ], - [ - 'https://github.com/OpenAdaptAI/openadapt-flow/blob/main/CCLA.md', - 'The Corporate CLA is written and under review in openadapt-flow, and is ' + - 'not on that repository main yet. Delete this entry once it is.', - ], -]) +const UNRESOLVED = new Map() // Non-content GitHub paths that raw cannot serve. These are checked for shape // only; the network half has nothing to fetch.