Skip to content

chore: narrow BSL Additional Use Grant and add CLA#408

Merged
Aureliolo merged 8 commits intomainfrom
chore/license-cla
Mar 14, 2026
Merged

chore: narrow BSL Additional Use Grant and add CLA#408
Aureliolo merged 8 commits intomainfrom
chore/license-cla

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • Rewrite BSL 1.1 Additional Use Grant — from blanket "all production use blocked" to a narrow, targeted grant: free production use for non-competing organizations with <500 employees. Large orgs and competing use require a commercial license (which may be granted at no cost)
  • Add Contributor License Agreement (CLA) — Apache ICLA-based, enables dual-licensing (BSL + commercial). Automated enforcement via contributor-assistant/github-action with signatures stored in-repo
  • Add docs/licensing.md — full rationale page: why BSL over AGPL/MIT, what's permitted, 500-employee threshold reasoning, automatic Apache 2.0 conversion, CLA explanation, FAQ, and invitation for feedback
  • Add License & Usage section to landing page — 3-column visual breakdown (Always Free / Free in Production / Commercial License) with links to discussions and licensing docs
  • Auto-roll BSL Change Date — Release Please workflow now updates the LICENSE Change Date to 3 years ahead inside each release PR (goes through normal review flow, no direct push to main)
  • Update all license references — README badge, CLAUDE.md, docs/index.md, CONTRIBUTING.md, CHANGELOG, landing page footer

What this does NOT change

  • SPDX identifier remains BUSL-1.1
  • Change License remains Apache 2.0
  • OCI image labels remain BUSL-1.1
  • No code changes whatsoever

Test plan

  • Verified LICENSE grant text matches issue chore: rewrite BSL Additional Use Grant (narrow to competing-use + employee threshold) + implement CLA #406 specification exactly
  • Verified no stale "production use blocked" language remains (grep across entire repo)
  • Validated all workflow YAML files parse correctly
  • All pre-commit hooks pass (trailing-whitespace, end-of-file, check-yaml, check-json, gitleaks, commitizen)
  • Verified actions/checkout SHA matches v6 (consistent with all other workflows)
  • Verified contributor-assistant/github-action added to GitHub Actions allowlist
  • CLA workflow correctly skips Dependabot PRs
  • Release workflow Change Date update only runs when RP PR exists, pushes to PR branch (not main)
  • CLA.md Section 2 grants sublicense rights (enables dual-licensing)
  • CLA.md Section 4 does not restrict outbound licensing

Review coverage

Pre-reviewed by 3 agents (docs-consistency, infra-reviewer, issue-resolution-verifier). 5 findings addressed:

  1. CLAUDE.md Documentation section: added docs/licensing.md entry
  2. CLAUDE.md CI section: added CLA workflow documentation
  3. actions/checkout v4 → v6 in cla.yml and release.yml
  4. Pinned locale (LC_TIME=C) in release.yml date computation
  5. Clarified Change Date wording in docs/licensing.md

Closes #406

Rewrite the BSL 1.1 Additional Use Grant to permit free production use
for non-competing organizations with fewer than 500 employees. Add a
Contributor License Agreement (CLA) with automated PR enforcement via
contributor-assistant/github-action to enable dual-licensing. Add a
docs/licensing.md page explaining the rationale, what's permitted, and
inviting feedback. Add a License & Usage section to the landing page.
Update the release workflow to auto-roll the BSL Change Date to 3 years
ahead inside each Release Please PR.

Closes #406
- Update actions/checkout from v4 to v6 in cla.yml and release.yml
  (consistency with rest of repo)
- Pin locale (LC_TIME=C) in release.yml date computation
- Add docs/licensing.md and CLA workflow to CLAUDE.md documentation
- Clarify Change Date wording in docs/licensing.md
Copilot AI review requested due to automatic review settings March 14, 2026 17:42
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 14, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
actions/actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd 🟢 5.9
Details
CheckScoreReason
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Packaging⚠️ -1packaging workflow not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
SAST🟢 8SAST tool detected but not run on all commits

Scanned Files

  • .github/workflows/release.yml

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces significant updates to the project's licensing strategy, aiming to balance open access with sustainable development. It refines the Business Source License (BSL) 1.1's 'Additional Use Grant' to be more permissive for smaller, non-competing organizations, while simultaneously implementing a Contributor License Agreement (CLA) to enable dual-licensing. These changes are supported by extensive new documentation and automated processes for managing license terms and contributor agreements.

Highlights

  • BSL Additional Use Grant: The BSL 1.1 Additional Use Grant has been narrowed to permit free production use for non-competing organizations with fewer than 500 employees. Larger organizations or competing uses now require a commercial license, which may be granted at no cost.
  • Contributor License Agreement (CLA): A new Apache ICLA-based Contributor License Agreement has been added, enabling dual-licensing (BSL + commercial). Automated enforcement is implemented via contributor-assistant/github-action, with signatures stored in-repo.
  • Licensing Documentation: A comprehensive docs/licensing.md page has been added, providing a full rationale for the BSL choice, detailing permitted uses, explaining the 500-employee threshold, automatic Apache 2.0 conversion, CLA explanation, and an FAQ.
  • Landing Page Updates: A new 'License & Usage' section has been added to the landing page, featuring a 3-column visual breakdown (Always Free / Free in Production / Commercial License) with links to discussions and the new licensing documentation.
  • Automated BSL Change Date: The Release Please workflow now automatically updates the LICENSE Change Date to three years ahead within each release PR, ensuring it goes through the normal review flow.
  • License Reference Updates: All existing license references across the README, CLAUDE.md, docs/index.md, CONTRIBUTING.md, and the landing page footer have been updated to reflect the new licensing terms.
Changelog
  • .github/CHANGELOG.md
    • Added a new 'License' section detailing the narrowed BSL grant, CLA addition, licensing documentation, and automated BSL Change Date updates.
  • .github/CONTRIBUTING.md
    • Updated the 'License' section to 'License & CLA' and added detailed instructions on signing the CLA.
  • .github/cla-signatures.json
    • Added an empty JSON file to store CLA signatures.
  • CLA.md
    • Added the full Contributor License Agreement document.
  • CLAUDE.md
    • Updated the license description to reflect the narrowed BSL grant and added a link to the new licensing documentation.
    • Added a description for the new CLA workflow.
  • LICENSE
    • Modified the 'Additional Use Grant' section to specify conditions for free production use (non-competing, <500 employees) and requirements for commercial licenses.
  • README.md
    • Updated the license badge to 'BSL 1.1 (source available)'.
    • Clarified the license description to include free production use conditions and a link to licensing details.
  • docs/index.md
    • Updated the license link description to reflect the narrowed BSL grant.
    • Added a new link to the detailed licensing documentation.
  • docs/licensing.md
    • Added a new comprehensive document explaining the BSL, its rationale, usage guidelines, CLA details, and FAQs.
  • mkdocs.yml
    • Added the new licensing.md page to the documentation navigation.
  • site/src/pages/index.astro
    • Updated 'Open Source' to 'Source Available' in the eyebrow text.
    • Added a new 'License & Usage' section with a visual breakdown of usage scenarios.
    • Modified footer license links to point to the new licensing documentation.
Ignored Files
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/cla.yml
    • .github/workflows/release.yml
Activity
  • The pull request underwent pre-review by three agents: docs-consistency, infra-reviewer, and issue-resolution-verifier.
  • Five findings were addressed, including updating CLAUDE.md for new documentation and CI, upgrading actions/checkout to v6, pinning locale in release.yml, and clarifying Change Date wording.
  • The CLA workflow has been configured to correctly skip Dependabot PRs.
  • The release workflow's Change Date update mechanism is designed to run only when a Release Please PR exists and pushes changes to that PR branch, not directly to main.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces significant updates to the project's licensing model, moving to a more permissive BSL grant and adding a CLA. The changes are well-documented and consistently applied across the repository, including updates to the README, contribution guidelines, and the project website. My review found only minor opportunities to improve the consistency of the license summary in public-facing documents to more accurately reflect the formal license terms.

README.md Outdated
## License

[Business Source License 1.1](LICENSE) — converts to Apache 2.0 on 2030-02-27.
[Business Source License 1.1](LICENSE) — free production use for non-competing organizations with fewer than 500 employees. Converts to Apache 2.0 on 2030-02-27. See [licensing details](https://synthorg.io/docs/licensing/) for the full rationale and what's permitted.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

For clarity and consistency with the LICENSE file, it would be better to mention contractors as well when defining the employee threshold. The official definition in the license includes "employees and individual contractors".

Suggested change
[Business Source License 1.1](LICENSE) — free production use for non-competing organizations with fewer than 500 employees. Converts to Apache 2.0 on 2030-02-27. See [licensing details](https://synthorg.io/docs/licensing/) for the full rationale and what's permitted.
[Business Source License 1.1](LICENSE) — free production use for non-competing organizations with fewer than 500 employees and contractors. Converts to Apache 2.0 on 2030-02-27. See [licensing details](https://synthorg.io/docs/licensing/) for the full rationale and what's permitted.

<div class="w-12 h-12 rounded-lg bg-teal-600/20 flex items-center justify-center text-teal-400 mb-4 text-xl">&#10003;</div>
<h3 class="text-xl font-semibold mb-3 text-teal-400">Free in Production</h3>
<ul class="text-gray-400 space-y-2 text-sm">
<li>Organizations with &lt;500 employees</li>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

To maintain consistency with the official license terms, I suggest including "and contractors" here. The LICENSE file specifies the threshold as "fewer than 500 employees and individual contractors". This makes the summary on the landing page more accurate.

            <li>Organizations with &lt;500 employees and contractors</li>

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 14, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1ba1160b-11f6-4bca-94c8-4ce2dcf24d47

📥 Commits

Reviewing files that changed from the base of the PR and between 9f3b733 and 8f53b02.

📒 Files selected for processing (7)
  • .github/workflows/cla.yml
  • .github/workflows/release.yml
  • .zizmor.yml
  • CLAUDE.md
  • README.md
  • docs/index.md
  • docs/licensing.md

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Free production use for non-competing organizations with <500 employees; each release converts to Apache 2.0 after three years
    • Contributor License Agreement (CLA) introduced with automated enforcement and signing flow
    • Release process now auto-updates the BSL change date on release
  • Documentation

    • Added comprehensive Licensing & Usage docs and FAQ explaining scenarios, commercial license guidance, CLA process
    • Updated site and README messaging to reflect source-available license model

Walkthrough

Narrowed the BSL 1.1 Additional Use Grant to permit free production use for non‑competing organizations with <500 employees/contractors; added a Contributor License Agreement (CLA) and enforcement workflow, docs/site updates, changelog entry, and a release step to auto-update the BSL Change Date.

Changes

Cohort / File(s) Summary
License & CLA
LICENSE, CLA.md
Rewrote BSL Additional Use Grant to allow production use when not competing and org size <500; added an individual + corporate CLA document with signing flow and storage at .github/cla-signatures.json.
Contributor Guidance & Changelog
.github/CONTRIBUTING.md, .github/CHANGELOG.md
Replaced "License" with "License & CLA"; added CLA signing requirement, exact sign text and signing guidance; added License subsection in changelog.
Workflows
.github/workflows/cla.yml, .github/workflows/release.yml
Added CLA enforcement GitHub Actions workflow (triggers on PR and issue_comment, runs contributor-assistant/github-action). Extended release workflow to checkout release PR branch and auto-update LICENSE Change Date to +3 years, then commit/push.
Docs & Site Content
docs/licensing.md, docs/index.md, CLAUDE.md, README.md, mkdocs.yml
Added detailed licensing guidance (usage matrix, rationale, FAQ), updated docs index and nav, README/license badge, CLA references, and mkdocs navigation entry.
Website UI
site/src/pages/index.astro
Replaced "Open Source" copy with "Source Available" / "License & Usage", added a three-card licensing grid and updated footer/legal links.
Tooling Config
.zizmor.yml
Added ignore rules for scanner warnings for the new workflow YAML files (cla.yml, release.yml).

Sequence Diagram(s)

sequenceDiagram
    actor Contributor
    participant GitHub as GitHub (PR)
    participant Workflow as CLA Workflow
    participant Assistant as CLA Assistant
    participant Repo as Repository

    Contributor->>GitHub: Open pull request
    GitHub->>Workflow: Trigger pull_request_target
    Workflow->>Assistant: Run with CLA.md & .github/cla-signatures.json
    Assistant->>Repo: Check `.github/cla-signatures.json` for signature

    alt Signature not found
        Assistant->>GitHub: Post signing instructions comment
        Contributor->>GitHub: Reply with exact CLA sign text
        GitHub->>Workflow: Trigger issue_comment
        Workflow->>Assistant: Run on comment match
        Assistant->>Repo: Record signature in `.github/cla-signatures.json`
        Assistant->>GitHub: Post success message
    else Signature found
        Assistant->>GitHub: Post success message
    end

    Workflow->>GitHub: Set CLA check status for PR
Loading
sequenceDiagram
    participant DevOps as Release Process
    participant Actions as GitHub Actions
    participant ReleaseBot as release-please
    participant Git as Git Repository
    participant License as LICENSE file

    DevOps->>Actions: Trigger release workflow
    Actions->>ReleaseBot: run release-please (id: release)
    ReleaseBot->>Git: Create/update release PR

    alt Release PR exists
        Actions->>Git: Checkout release PR branch
        Actions->>Actions: Compute new BSL Change Date (now + 3 years)
        Actions->>License: Update Change Date line in LICENSE
        Actions->>Git: Commit & push changes to release PR branch
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'chore: narrow BSL Additional Use Grant and add CLA' clearly and concisely summarizes the two primary changes in the changeset: narrowing the BSL Additional Use Grant and implementing a Contributor License Agreement.
Description check ✅ Passed The PR description is well-written, detailed, and comprehensively related to the changeset. It explains the key changes, what is not changing, testing performed, and review coverage—all directly relevant to the modifications.
Linked Issues check ✅ Passed The PR successfully addresses all primary coding and documentation requirements from issue #406: narrowed BSL Additional Use Grant text, CLA implementation with automated enforcement, documentation additions (CLA.md, docs/licensing.md), and updates across all referenced files.
Out of Scope Changes check ✅ Passed All changes in the PR are within scope of issue #406. File modifications (LICENSE, CONTRIBUTING.md, CLA.md, docs files, CHANGELOG, README, landing page, workflows) are all explicitly required by the issue. No unrelated or extraneous changes detected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/license-cla
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch chore/license-cla
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

- Add persist-credentials: false to CLA workflow checkout
- Suppress dangerous-triggers for CLA (pull_request_target required,
  mitigated by ref: main checkout)
- Suppress artipacked for release.yml (credentials needed to push
  Change Date commit to release PR branch)
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR updates SynthOrg’s licensing posture and contributor process by narrowing the BSL 1.1 Additional Use Grant, adding a CLA with automated enforcement, and expanding documentation/site copy to explain what’s permitted.

Changes:

  • Narrow BSL 1.1 Additional Use Grant to allow free production use for non-competing orgs under 500 employees, with clearer terms in LICENSE.
  • Add licensing documentation (docs/licensing.md) and wire it into MkDocs navigation and site/README links.
  • Introduce a CLA (CLA.md) plus a GitHub Actions workflow to enforce/record CLA signatures; update release automation to bump BSL Change Date.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
site/src/pages/index.astro Updates landing page licensing messaging, adds a License & Usage section, and adjusts legal link destinations.
README.md Updates license badge text and expands the license section summary with a docs link.
mkdocs.yml Adds the new Licensing page to the MkDocs nav.
LICENSE Replaces Additional Use Grant text with the new production-use criteria and thresholds.
docs/licensing.md Adds a detailed licensing rationale/FAQ and usage guidance page.
docs/index.md Updates license link text and adds a link to the new Licensing & Usage page.
CLAUDE.md Updates repo overview to reflect the licensing/CLA additions and release workflow behavior.
CLA.md Adds the Contributor License Agreement text and signing instructions.
.github/workflows/release.yml Adds a step to auto-update the BSL Change Date on release PR creation/update.
.github/workflows/cla.yml Adds automated CLA signature checking/recording via contributor-assistant.
.github/CONTRIBUTING.md Updates contributing docs to mention the CLA requirement and process.
.github/cla-signatures.json Adds the initial signatures store for CLA automation.
.github/CHANGELOG.md Documents licensing/CLA/release-automation changes in the changelog.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 15 to +16
<p class="text-sm tracking-widest text-violet-400 mb-6 font-mono">
Python 3.14+ &middot; BSL 1.1 &middot; Open Source
Python 3.14+ &middot; BSL 1.1 &middot; Source Available
Comment on lines +373 to +378
<a href="/docs/architecture/" class="text-teal-400 hover:underline">architecture docs</a>, and
<a href="/docs/roadmap/" class="text-teal-400 hover:underline">roadmap</a>.
Licensed under BSL 1.1, converting to Apache 2.0 on 2030-02-27.
Licensed under BSL 1.1, converting to Apache 2.0 automatically.
Comment on lines +335 to +338
<li>Organizations with &lt;500 employees</li>
<li>Internal tools and automation</li>
<li>Products where SynthOrg is not the core value</li>
<li>No separate license needed</li>
Comment on lines +11 to +15
| Production use by large org (500+ employees) | Contact us | Commercial license |
| Offering SynthOrg as a hosted/managed service | Contact us | Commercial license |
| Reselling or embedding SynthOrg as your core product | Contact us | Commercial license |
| Contributing to SynthOrg | Yes | Sign the [CLA](https://github.com/Aureliolo/synthorg/blob/main/CLA.md) |

runs-on: ubuntu-latest
if: |
(github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'dependabot[bot]') ||
(github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, 'I have read the CLA'))
@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Mar 14, 2026

Greptile Summary

This PR narrows the BSL 1.1 Additional Use Grant to a targeted free-use grant (non-competing organizations with <500 employees), adds an Apache ICLA-based CLA with automated bot enforcement, introduces a docs/licensing.md rationale page, updates the landing page and all license references, and wires the Release Please workflow to auto-roll the Change Date 3 years ahead on each release. There are no code changes; all changes are to license text, documentation, and CI workflows.

Key findings:

  • CLA bot will fire on Release Please PRs — the cla.yml job condition excludes only dependabot[bot]. Release Please opens PRs under RELEASE_PLEASE_TOKEN (a PAT or GitHub App token), so every release PR will trigger the CLA check and potentially generate a spurious "please sign" comment. The contributor-assistant/github-action provides an allowlist parameter for exactly this case; it should include at least github-actions[bot] and the repo owner.
  • LICENSE Change Date vs. "3 years per release" policy mismatch — all updated documentation states the Change Date is "3 years after each release," but the LICENSE still carries the old February 27, 2030 date (~4 years from now). The release.yml automation will correct this on the next release PR, but the current release ships with a visible inconsistency between the license file and its own documentation.
  • The pull_request_target security risk in cla.yml is properly mitigated (ref: main checkout, persist-credentials: false) and is correctly suppressed in .zizmor.yml with justification.
  • The sed guard (grep -q … || exit 1) in release.yml addresses the previously identified silent-false-positive concern.
  • CLA.md is well-structured; Section 2's sublicense grant and Section 4's outbound licensing clause correctly enable dual-licensing.

Confidence Score: 3/5

  • Safe to merge with one actionable fix — the missing bot allowlist in cla.yml will cause noise on every release PR until addressed.
  • No code changes and the legal/documentation content is well-crafted. The two issues — missing bot allowlist and the transient LICENSE date inconsistency — are both workflow/documentation concerns rather than correctness blockers, but the CLA bot firing on Release Please PRs is a real operational nuisance that will require a follow-up fix shortly after merge.
  • .github/workflows/cla.yml (missing allowlist for bots/owner) and LICENSE (Change Date predates the new 3-year policy).

Important Files Changed

Filename Overview
.github/workflows/cla.yml New CLA enforcement workflow using contributor-assistant/github-action v2.6.1. Uses pull_request_target with ref: main checkout (good mitigation), but lacks an allowlist for bots and the repo owner, which will cause spurious CLA prompts on every Release Please PR.
.github/workflows/release.yml Adds BSL Change Date auto-update step: computes 3 years ahead with GNU date, uses sed with a grep guard against silent no-match, commits and pushes to the Release Please branch. Functional but depends on a hardcoded branch name (already flagged in prior threads).
LICENSE Additional Use Grant rewritten to a narrow, two-condition free-use grant (non-competing AND <500 employees). Legal language is clear and internally consistent; however the existing Change Date (Feb 27, 2030, ~4 years out) does not yet reflect the new "3 years per release" policy.
CLA.md New Apache ICLA-based CLA. Sections 2 (copyright), 3 (patent), 4 (outbound licensing), 5 (representations), 6 (retention), 7 (attribution), and 8 (no obligation) are all present and well-formed. Enables dual-licensing cleanly.
docs/licensing.md New licensing rationale page. Comprehensive and accurate; correctly explains the BSL grant, 500-employee threshold, Apache 2.0 conversion, and CLA requirement. Minor: states "3 years after each release" while the current LICENSE has a 4-year date.
.zizmor.yml Adds two justified zizmor suppressions: dangerous-triggers for cla.yml (mitigated by ref: main checkout) and artipacked for release.yml (persist-credentials needed to push Change Date commit). Both have clear explanatory comments.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: .github/workflows/cla.yml
Line: 16

Comment:
**Missing bot/owner allowlist — CLA bot will fire on Release Please PRs**

The only excluded actor is `dependabot[bot]`, but Release Please also opens PRs to `main` — under `RELEASE_PLEASE_TOKEN`. If that token is a PAT, the CLA action will run against the PAT owner's GitHub account, prompting them (via bot comment) to sign the CLA on every release PR. If it is a GitHub App token, the action will attempt to check the app identity, which cannot sign.

`contributor-assistant/github-action` exposes an `allowlist` parameter for exactly this purpose. It accepts a comma-separated list of GitHub usernames (and supports wildcard `*bot*` patterns). Without it, every Release Please PR, plus any PR opened by the repo owner, generates an unnecessary CLA-unsigned comment.

```suggestion
    if: |
      (github.event_name == 'pull_request_target' &&
       github.event.pull_request.user.login != 'dependabot[bot]' &&
       !endsWith(github.event.pull_request.user.login, '[bot]')) ||
      (github.event_name == 'issue_comment' && github.event.issue.pull_request && github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA')
```

Or, preferably, pass an `allowlist` to the action itself so the logic lives in one place:
```yaml
        with:
          # …existing params…
          allowlist: Aureliolo,github-actions[bot],release-please[bot]
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: LICENSE
Line: 354

Comment:
**Change Date inconsistent with new "3 years per release" policy**

The current `Change Date: February 27, 2030` was set under the old policy and is roughly 4 years from the project's initial release date. The new policy (documented in `docs/licensing.md`, `README.md`, and `CLAUDE.md`) states the Change Date is "3 years after each release."

For `v0.1.4` (released 2026-03-14), a 3-year Change Date would be approximately **March 14, 2029**, not February 27, 2030. The `release.yml` automation will roll this date forward on the *next* Release Please PR, so the current release will ship with a license date that does not match the stated policy.

Consider triggering the date update as part of this PR itself (or noting explicitly in `docs/licensing.md` that the 3-year policy takes effect from the *next* release), so users reading the LICENSE today are not confused by the discrepancy between what the file says and what all the documentation promises.

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: 8f53b02

- Add "and contractors" to employee threshold in README, CHANGELOG,
  landing page, and licensing docs (matches LICENSE wording)
- Replace "Open Source" with "Source Available" in landing page hero
  and section heading (BSL is not OSI open-source)
- Tighten "Free in Production" bullets to match LICENSE qualifiers
  (affiliates, non-competing clause, link to full terms)
- Use "Conditional" instead of "Contact us" in licensing.md table
- Exact-match CLA sign comment in cla.yml (was substring match)
- Add grep guard after sed in release.yml to fail loudly if Change
  Date pattern doesn't match
- Add inline comment on hardcoded RP branch name in release.yml
The Source Available section repeated license info already covered by
License & Usage. Move GitHub star/fork buttons and docs link into the
License & Usage section and remove the duplicate.
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/cla-signatures.json:
- Around line 1-3: Remove the pre-created file .github/cla-signatures.json so
the contributor-assistant/github-action can manage CLA signatures itself; delete
the file from the repo (undo the added empty "signedContributors" array) and
rely on the action to create and update it automatically during CI.

In @.github/workflows/cla.yml:
- Around line 3-7: The checkout step using actions/checkout (the step that
checks out main under the pull_request_target workflow and runs with
permissions: contents: write) should explicitly set persist-credentials: false
to avoid persisting GITHUB_TOKEN credentials; update the checkout step (the
uses: actions/checkout@... step) to include persist-credentials: false so
credentials are not stored for subsequent steps when using contents: write.

In @.github/workflows/release.yml:
- Around line 28-33: The checkout step using actions/checkout (uses:
actions/checkout@de0fac2e450...) is persisting the PAT in the job git config;
update the step to avoid leaving credentials by adding persist-credentials:
false and then switch push operations to SSH (preferred) or configure an SSH key
via actions/checkout + ssh-agent so pushes use the SSH remote; alternatively, if
you must use the token for fetch, keep token: ${{ secrets.RELEASE_PLEASE_TOKEN
}} but set persist-credentials: false and ensure subsequent git push uses SSH
auth (configure ssh-agent/setup-ssh) rather than the persisted PAT.

In `@docs/licensing.md`:
- Line 29: Update the sentence that currently reads "**Every version
automatically converts to Apache 2.0** — on the Change Date or 4 years after
release, whichever comes first" to remove confusion by either (A) simplifying to
state only the 3-year Change Date (e.g., "on the Change Date, which for SynthOrg
is 3 years after release") or (B) explicitly stating that SynthOrg sets the
Change Date to 3 years so the BSL 1.1 four-year backstop will not apply; apply
the same clarification to the similar block referenced (lines 96-108).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: df262f87-d36f-4933-b684-6d951d03f830

📥 Commits

Reviewing files that changed from the base of the PR and between 5550fa1 and 3fdd487.

📒 Files selected for processing (13)
  • .github/CHANGELOG.md
  • .github/CONTRIBUTING.md
  • .github/cla-signatures.json
  • .github/workflows/cla.yml
  • .github/workflows/release.yml
  • CLA.md
  • CLAUDE.md
  • LICENSE
  • README.md
  • docs/index.md
  • docs/licensing.md
  • mkdocs.yml
  • site/src/pages/index.astro
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Agent
  • GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (2)
docs/**/*.md

📄 CodeRabbit inference engine (CLAUDE.md)

Documentation: Docs source in docs/ (Markdown, built with Zensical), design spec in docs/design/ (7 pages), architecture in docs/architecture/, roadmap in docs/roadmap/, security in docs/security.md, reference in docs/reference/, API reference in docs/rest-api.md, library reference in docs/api/ (auto-generated from docstrings), custom templates in docs/overrides/, config in mkdocs.yml at repo root

Files:

  • docs/index.md
  • docs/licensing.md
**/*.{yml,yaml}

📄 CodeRabbit inference engine (CLAUDE.md)

Config files: use YAML company config loading and validation, frozen Pydantic models for config. Load via src/ai_company/config/

Files:

  • mkdocs.yml
🧠 Learnings (3)
📚 Learning: 2026-03-14T17:38:27.391Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T17:38:27.391Z
Learning: Applies to docs/**/*.md : Documentation: Docs source in docs/ (Markdown, built with Zensical), design spec in docs/design/ (7 pages), architecture in docs/architecture/, roadmap in docs/roadmap/, security in docs/security.md, reference in docs/reference/, API reference in docs/rest-api.md, library reference in docs/api/ (auto-generated from docstrings), custom templates in docs/overrides/, config in mkdocs.yml at repo root

Applied to files:

  • site/src/pages/index.astro
  • mkdocs.yml
  • CLAUDE.md
📚 Learning: 2026-03-14T17:38:27.391Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T17:38:27.391Z
Learning: Applies to **/*.{yml,yaml} : Config files: use YAML company config loading and validation, frozen Pydantic models for config. Load via src/ai_company/config/

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-14T17:38:27.391Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T17:38:27.391Z
Learning: Pre-commit hooks: trailing-whitespace, end-of-file-fixer, check-yaml, check-toml, check-json, check-merge-conflict, check-added-large-files, no-commit-to-branch (main), ruff check+format, gitleaks, hadolint (Dockerfile linting)

Applied to files:

  • CLAUDE.md
🪛 GitHub Actions: Workflow Security
.github/cla-signatures.json

[error] 1-1: Process completed with exit code 14.

CLA.md

[error] 1-1: Process completed with exit code 14.

docs/index.md

[error] 1-1: Process completed with exit code 14.

README.md

[error] 1-1: Process completed with exit code 14.

site/src/pages/index.astro

[error] 1-1: Process completed with exit code 14.

.github/CHANGELOG.md

[error] 1-1: Process completed with exit code 14.

docs/licensing.md

[error] 1-1: Process completed with exit code 14.

.github/workflows/cla.yml

[error] 3-7: dangerous triggers: pull_request_target is almost always used insecurely.


[warning] 23-23: Actions checkout: persist-credentials not set to false.

.github/CONTRIBUTING.md

[error] 1-1: Process completed with exit code 14.

.github/workflows/release.yml

[warning] 28-28: Checkout Release PR branch: persist-credentials not set to false.

LICENSE

[error] 1-1: Process completed with exit code 14.

mkdocs.yml

[error] 1-1: Process completed with exit code 14.

CLAUDE.md

[error] 1-1: Process completed with exit code 14.

🪛 LanguageTool
CLA.md

[uncategorized] ~102-~102: The official name of this software platform is spelled with a capital “H”.
Context: ...gnature is stored in this repository at .github/cla-signatures.json. You only need to...

(GITHUB)

docs/licensing.md

[style] ~149-~149: This word has been used in one of the immediately preceding sentences. Using a synonym could make your text more interesting to read, unless the repetition is intentional.
Context: ...contractors and affiliates). No license needed. If your company has 500+ employees, c...

(EN_REPEATEDWORDS_NEED)

CLAUDE.md

[uncategorized] ~265-~265: The official name of this software platform is spelled with a capital “H”.
Context: ... Skips Dependabot. Signatures stored in .github/cla-signatures.json. - Release: `....

(GITHUB)


[uncategorized] ~266-~266: The official name of this software platform is spelled with a capital “H”.
Context: ...kflows (GITHUB_TOKEN cannot). Config in .github/release-please-config.json and `.githu...

(GITHUB)


[uncategorized] ~266-~266: The official name of this software platform is spelled with a capital “H”.
Context: ....github/release-please-config.jsonand.github/.release-please-manifest.json`. After c...

(GITHUB)

🔇 Additional comments (14)
README.md (1)

12-12: License messaging update is clear and consistent with the PR intent.

The badge update plus the explicit licensing summary and link improves discoverability for users evaluating usage terms.

Also applies to: 158-158

.github/CHANGELOG.md (1)

6-12: Good release-note coverage for licensing process changes.

This section cleanly captures grant narrowing, CLA rollout, docs addition, and release automation updates.

CLAUDE.md (1)

7-7: Operational documentation updates look correct.

The licensing reference, CLA workflow note, and release workflow note are well aligned with the implemented process.

Also applies to: 75-75, 265-266

mkdocs.yml (1)

125-125: Navigation update is correct.

Adding Licensing to the docs nav improves discoverability of the new policy page.

docs/index.md (1)

133-134: Docs landing-page links are well placed.

The license summary and dedicated “Licensing & Usage” pointer make policy navigation much clearer for contributors and users.

LICENSE (1)

8-32: Additional Use Grant rewrite is clear and well-scoped.

The updated terms precisely define qualifying production use, commercial-license cases, and non-production allowance while preserving the BSL framework.

site/src/pages/index.astro (3)

16-16: Terminology update is accurate.

Changing from "Open Source" to "Source Available" correctly reflects BSL 1.1's status as a source-available license rather than an OSI-approved open-source license.


306-366: License & Usage section is well-structured and accurate.

The three-tier breakdown (Always Free / Free in Production / Commercial License) clearly communicates the licensing terms. The content aligns with the Additional Use Grant specified in the PR objectives.

Minor note: The HTML entity &lt; on line 335 is correctly used for the less-than symbol in "Organizations with <500 employees".


378-378: License references consistently updated.

The license description and footer link now point to the dedicated licensing documentation page, which provides a better user experience than linking directly to the raw LICENSE file.

Also applies to: 484-484

.github/CONTRIBUTING.md (1)

143-153: CLA documentation is clear and actionable.

The updated section clearly explains the CLA requirement and signing process. The instructions align with the automated workflow and correctly reference the signature storage mechanism.

CLA.md (1)

1-119: CLA document is well-structured and enables the required dual-licensing.

The agreement follows the Apache ICLA template pattern and includes the necessary grants:

  • Section 2 & 3 provide copyright and patent licenses
  • Section 4 explicitly enables dual-licensing (BSL + commercial)
  • Section 6 preserves contributor ownership

The signing process (lines 98-105) and Corporate CLA guidance (lines 109-119) are clear and practical.

.github/workflows/cla.yml (2)

15-17: Dependabot skip condition looks correct.

The condition properly excludes Dependabot PRs from CLA checks and ensures issue comments only trigger when they contain the CLA acknowledgment phrase.


26-44: CLA action configuration is well-documented and user-friendly.

The custom messages provide clear signing instructions. The use-dco-flag: false explicitly disables DCO in favor of CLA, which aligns with the PR objectives.

docs/licensing.md (1)

1-171: Comprehensive licensing documentation.

This page thoroughly addresses the licensing model with clear explanations, practical examples, and a helpful FAQ. The Quick Summary table at the top is particularly useful for users who need a quick answer. The rationale sections (Why BSL 1.1, Why Not AGPL, 500-Employee Threshold) proactively address common concerns.

Comment on lines +28 to +33
- name: Checkout Release PR branch
if: steps.release.outputs.pr != ''
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
ref: release-please--branches--main
token: ${{ secrets.RELEASE_PLEASE_TOKEN }}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n "actions/checkout@|persist-credentials|RELEASE_PLEASE_TOKEN|git push" .github/workflows/release.yml

Repository: Aureliolo/synthorg

Length of output: 275


🏁 Script executed:

cat -n .github/workflows/release.yml | head -60

Repository: Aureliolo/synthorg

Length of output: 2090


🌐 Web query:

GitHub Actions persist-credentials false checkout token inline authentication best practice

💡 Result:

Best practice (vs “inline token in git URL”)

  • Prefer actions/checkout’s token: input (and/or ssh-key) instead of embedding a token in a remote URL. actions/checkout manages auth for you and removes it in post-job cleanup; you can opt out of persisting credentials with persist-credentials: false. [1]
  • Set persist-credentials: false unless later steps truly need to run authenticated git commands (push, fetch private submodules, etc.). Otherwise you’re intentionally making that credential available to subsequent steps in the job. [1]
  • Use least-privilege permissions for the job’s token (permissions:) to reduce blast radius if anything in the job is compromised. [2][3]
  • If you must access a different private repo, use a dedicated secret (PAT) via token: (or better, a GitHub App token), because github.token is scoped to the current repo. [1]

Example (safe default: no persisted git creds)

permissions:
  contents: read

steps:
  - uses: actions/checkout@v6
    with:
      persist-credentials: false
      fetch-depth: 0

Example (need to checkout another private repo)

permissions:
  contents: read

steps:
  - uses: actions/checkout@v6
    with:
      repository: my-org/my-private-tools
      token: ${{ secrets.GH_PAT }}
      persist-credentials: false

Why avoid “inline auth” (e.g., https://x-access-token:...@github.com/...): it’s easy to leak via logs, process listings, or persisted git config/remotes; using token: avoids having to place the credential in the URL at all. [1][2]


Avoid persisting PAT credentials during checkout.

The code checks out with a PAT without persist-credentials: false, leaving the token in git config for the job duration. However, the suggested approach of embedding the token directly in the git push URL is explicitly discouraged by GitHub Actions — credentials in URLs are easier to leak through logs or process listings.

Consider instead:

  • Use SSH keys for the checkout and git operations (preferred)
  • Or use token: with persist-credentials: false and pair it with SSH authentication for the push
🧰 Tools
🪛 GitHub Actions: Workflow Security

[warning] 28-28: Checkout Release PR branch: persist-credentials not set to false.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yml around lines 28 - 33, The checkout step using
actions/checkout (uses: actions/checkout@de0fac2e450...) is persisting the PAT
in the job git config; update the step to avoid leaving credentials by adding
persist-credentials: false and then switch push operations to SSH (preferred) or
configure an SSH key via actions/checkout + ssh-agent so pushes use the SSH
remote; alternatively, if you must use the token for fetch, keep token: ${{
secrets.RELEASE_PLEASE_TOKEN }} but set persist-credentials: false and ensure
subsequent git push uses SSH auth (configure ssh-agent/setup-ssh) rather than
the persisted PAT.

…meline

- Remove .github/cla-signatures.json — contributor-assistant/github-action
  auto-creates it on first signing
- Clarify 3-year vs 4-year conversion in docs/licensing.md — our Change
  Date (3 years) always applies before the BSL 4-year backstop

Skipped findings:
- cla.yml persist-credentials: already set to false
- release.yml persist-credentials: must remain true for git push to
  release PR branch (documented via zizmor suppression)
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 14, 2026 17:53 — with GitHub Actions Inactive
Inline zizmor comments only work on the line immediately before the
finding. Move dangerous-triggers (cla.yml) and artipacked (release.yml)
suppressions to the .zizmor.yml config file where they are reliably
applied.
Copilot AI review requested due to automatic review settings March 14, 2026 17:55
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 14, 2026 17:56 — with GitHub Actions Inactive
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR updates SynthOrg’s licensing posture and contributor workflow by clarifying BSL 1.1 “source-available” messaging across the site/docs, introducing a Contributor License Agreement (CLA) with automated enforcement, and adding release automation to keep the BSL Change Date current.

Changes:

  • Update website + docs + README to describe BSL 1.1 as “source available” and document permitted usage.
  • Add docs/licensing.md (rationale/FAQ) and CLA.md, plus a new cla.yml workflow to enforce CLA signatures.
  • Extend the release workflow to automatically update the BSL Change Date as part of release PRs (and adjust zizmor ignores accordingly).

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
site/src/pages/index.astro Updates homepage copy and adds a “License & Usage” section linking to the new licensing docs.
README.md Adjusts license messaging (badge + license section) and links to licensing docs.
mkdocs.yml Adds the new licensing page to the docs navigation.
LICENSE Updates the BSL Additional Use Grant terms to allow certain production usage under conditions.
docs/licensing.md New licensing rationale/FAQ page describing allowed usage and CLA rationale.
docs/index.md Adds links/summary for licensing and usage documentation.
CLAUDE.md Updates repo meta/docs index and notes CLA/release behaviors.
CLA.md New Contributor License Agreement document.
.zizmor.yml Suppresses specific zizmor findings for CLA and release workflows with rationale comments.
.github/workflows/release.yml Adds automation to update the BSL Change Date when release PRs are created/updated.
.github/workflows/cla.yml New CLA enforcement workflow using contributor-assistant/github-action.
.github/CONTRIBUTING.md Updates contributing guidelines to reflect license + CLA requirement.
.github/CHANGELOG.md Adds changelog notes describing licensing/CLA/release automation changes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +29 to +36
if: steps.release.outputs.pr != ''
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
ref: release-please--branches--main # must match the repo default branch name
token: ${{ secrets.RELEASE_PLEASE_TOKEN }}

- name: Update BSL Change Date (release + 3 years)
if: steps.release.outputs.pr != ''
README.md Outdated
## License

[Business Source License 1.1](LICENSE) — converts to Apache 2.0 on 2030-02-27.
[Business Source License 1.1](LICENSE) — free production use for non-competing organizations with fewer than 500 employees and contractors. Converts to Apache 2.0 on 2030-02-27. See [licensing details](https://synthorg.io/docs/licensing/) for the full rationale and what's permitted.
docs/index.md Outdated

- [GitHub Repository](https://github.com/Aureliolo/synthorg)
- [License](https://github.com/Aureliolo/synthorg/blob/main/LICENSE) (BSL 1.1 → Apache 2.0 on 2030-02-27)
- [License](https://github.com/Aureliolo/synthorg/blob/main/LICENSE) (BSL 1.1, source available — free production use for non-competing small orgs → Apache 2.0 on 2030-02-27)
CLAUDE.md Outdated
- **What**: Framework for building synthetic organizations — autonomous AI agents orchestrated as a virtual company
- **Python**: 3.14+ (PEP 649 native lazy annotations)
- **License**: BUSL-1.1 (converts to Apache 2.0 on 2030-02-27)
- **License**: BUSL-1.1 with narrowed Additional Use Grant (free production use for non-competing small orgs; converts to Apache 2.0 on 2030-02-27)
- **Source code is public** — you can read, fork, modify, and redistribute it
- **Non-production use is unrestricted** — learning, research, testing, evaluation, contributing
- **Production use is governed by the Additional Use Grant** — our grant is deliberately permissive (see below)
- **Every version automatically converts to Apache 2.0** — SynthOrg sets the Change Date to 3 years after each release (the BSL 1.1 terms also include a 4-year backstop, but our shorter Change Date always applies first)
The Change Date auto-updates with each release, so hardcoding
"2030-02-27" in README, CLAUDE.md, and docs/index.md would go stale.
Use "three years after release" instead.

Also: add GNU date comment in release.yml, clarify hackathon FAQ
in docs/licensing.md.
@Aureliolo Aureliolo merged commit 5ab15bd into main Mar 14, 2026
23 of 24 checks passed
@Aureliolo Aureliolo deleted the chore/license-cla branch March 14, 2026 18:02
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 14, 2026 18:02 — with GitHub Actions Inactive
name: CLA Signature Check
runs-on: ubuntu-latest
if: |
(github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'dependabot[bot]') ||
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Missing bot/owner allowlist — CLA bot will fire on Release Please PRs

The only excluded actor is dependabot[bot], but Release Please also opens PRs to main — under RELEASE_PLEASE_TOKEN. If that token is a PAT, the CLA action will run against the PAT owner's GitHub account, prompting them (via bot comment) to sign the CLA on every release PR. If it is a GitHub App token, the action will attempt to check the app identity, which cannot sign.

contributor-assistant/github-action exposes an allowlist parameter for exactly this purpose. It accepts a comma-separated list of GitHub usernames (and supports wildcard *bot* patterns). Without it, every Release Please PR, plus any PR opened by the repo owner, generates an unnecessary CLA-unsigned comment.

Suggested change
(github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'dependabot[bot]') ||
if: |
(github.event_name == 'pull_request_target' &&
github.event.pull_request.user.login != 'dependabot[bot]' &&
!endsWith(github.event.pull_request.user.login, '[bot]')) ||
(github.event_name == 'issue_comment' && github.event.issue.pull_request && github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA')

Or, preferably, pass an allowlist to the action itself so the logic lives in one place:

        with:
          # …existing params…
          allowlist: Aureliolo,github-actions[bot],release-please[bot]
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/cla.yml
Line: 16

Comment:
**Missing bot/owner allowlist — CLA bot will fire on Release Please PRs**

The only excluded actor is `dependabot[bot]`, but Release Please also opens PRs to `main` — under `RELEASE_PLEASE_TOKEN`. If that token is a PAT, the CLA action will run against the PAT owner's GitHub account, prompting them (via bot comment) to sign the CLA on every release PR. If it is a GitHub App token, the action will attempt to check the app identity, which cannot sign.

`contributor-assistant/github-action` exposes an `allowlist` parameter for exactly this purpose. It accepts a comma-separated list of GitHub usernames (and supports wildcard `*bot*` patterns). Without it, every Release Please PR, plus any PR opened by the repo owner, generates an unnecessary CLA-unsigned comment.

```suggestion
    if: |
      (github.event_name == 'pull_request_target' &&
       github.event.pull_request.user.login != 'dependabot[bot]' &&
       !endsWith(github.event.pull_request.user.login, '[bot]')) ||
      (github.event_name == 'issue_comment' && github.event.issue.pull_request && github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA')
```

Or, preferably, pass an `allowlist` to the action itself so the logic lives in one place:
```yaml
        with:
          # …existing params…
          allowlist: Aureliolo,github-actions[bot],release-please[bot]
```

How can I resolve this? If you propose a fix, please make it concise.

Aureliolo added a commit that referenced this pull request Mar 14, 2026
## Summary

Follow-up to #408. Fixes CLA enforcement failure (branch protection
blocked signature commits) and moves 3 files out of the repo root.

- **Fix CLA signature storage**: `branch: main` → `branch:
cla-signatures` (unprotected orphan branch, auto-created in this PR)
- **Move `CLA.md`** → `.github/CLA.md` (GitHub community files
convention)
- **Move `DESIGN_SPEC.md`** → `docs/DESIGN_SPEC.md` (it's a docs pointer
file)
- **Move `.zizmor.yml`** → `.github/.zizmor.yml` (CI config belongs in
.github)
- Update all references across workflows, CLAUDE.md, README,
CONTRIBUTING, licensing docs, getting_started, and 4 skill files

## Test plan

- [x] All pre-commit hooks pass
- [x] `cla-signatures` orphan branch created and pushed to remote
- [x] Docs-consistency agent: zero stale references found
- [x] Infra-reviewer agent: zizmor config path works, CLA branch
confirmed needed
- [x] CONTRIBUTING.md → CLA.md relative link verified (both in .github/)
- [x] Verified no remaining root-level references to moved files

## Review coverage

Pre-reviewed by 2 agents (docs-consistency, infra-reviewer). 1 finding
addressed (create orphan branch before merge).
Aureliolo added a commit that referenced this pull request Mar 15, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.0](v0.1.4...v0.2.0)
(2026-03-15)

##First probably usable release? Most likely not no and everything will break
### Features

* add /get/ installation page for CLI installer
([#413](#413))
([6a47e4a](6a47e4a))
* add cross-platform Go CLI for container lifecycle management
([#401](#401))
([0353d9e](0353d9e)),
closes [#392](#392)
* add explicit ScanOutcome signal to OutputScanResult
([#394](#394))
([be33414](be33414)),
closes [#284](#284)
* add meeting scheduler, event-triggered meetings, and Go CLI lint fixes
([#407](#407))
([5550fa1](5550fa1))
* wire MultiAgentCoordinator into runtime
([#396](#396))
([7a9e516](7a9e516))


### Bug Fixes

* CLA signatures branch + declutter repo root
([#409](#409))
([cabe953](cabe953))
* correct Release Please branch name in release workflow
([#410](#410))
([515d816](515d816))
* replace slsa-github-generator with attest-build-provenance, fix DAST
([#424](#424))
([eeaadff](eeaadff))
* resolve CodeQL path-injection alerts in Go CLI
([#412](#412))
([f41bf16](f41bf16))


### Refactoring

* rename package from ai_company to synthorg
([#422](#422))
([df27c6e](df27c6e)),
closes [#398](#398)


### Tests

* add fuzz and property-based testing across all layers
([#421](#421))
([115a742](115a742))


### CI/CD

* add SLSA L3 provenance for CLI binaries and container images
([#423](#423))
([d3dc75d](d3dc75d))
* bump the major group with 4 updates
([#405](#405))
([20c7a04](20c7a04))


### Maintenance

* bump github.com/spf13/cobra from 1.9.1 to 1.10.2 in /cli in the
minor-and-patch group
([#402](#402))
([e31edbb](e31edbb))
* narrow BSL Additional Use Grant and add CLA
([#408](#408))
([5ab15bd](5ab15bd)),
closes [#406](#406)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Mar 15, 2026
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.

chore: rewrite BSL Additional Use Grant (narrow to competing-use + employee threshold) + implement CLA

2 participants