Skip to content

Change license from Apache 2.0 to AGPL v3#80

Merged
cmeans merged 4 commits into
mainfrom
license/agpl-v3
Mar 28, 2026
Merged

Change license from Apache 2.0 to AGPL v3#80
cmeans merged 4 commits into
mainfrom
license/agpl-v3

Conversation

@cmeans
Copy link
Copy Markdown
Owner

@cmeans cmeans commented Mar 28, 2026

Summary

  • License changed from Apache 2.0 to AGPL v3 to protect against proprietary cloud hosting. Dual-licensing path preserved for future commercial license.
  • AGPL headers added to all source files per FSF best practice: .py, .yml workflows, Dockerfile, alembic.ini
  • NOTICE file documents the change, prior license, rationale, and copyright registration
  • CONTRIBUTING.md establishes CLA requirement for future contributors
  • benchmarks/semantic_search_bench.py now tracked (semantic search latency benchmarks)
  • README badge and license section updated with prior-license note

No code behavior changes — purely legal/metadata.

QA

This is a legal/metadata-only PR. No functional changes to verify.

Prerequisites

  • None — no code behavior changes

Verification checks

    • LICENSE contains AGPL v3 full text (661 lines, starts with "GNU AFFERO GENERAL PUBLIC LICENSE")
    • pyproject.toml shows license = "AGPL-3.0-or-later"
    • README badge reads "AGPL-3.0" (not "Apache 2.0")
    • README license section mentions prior Apache 2.0 versions (references v0.14.0)
    • NOTICE file exists with license change documentation (references v0.14.0)
    • CONTRIBUTING.md exists with CLA requirement
    • All 33 .py files project-wide have AGPL header
    • All 3 workflow .yml files in this PR have AGPL header
    • Dockerfile and alembic.ini have AGPL header
    • No stale v0.13.0 references anywhere in the repo
    • ruff check src/ tests/ passes
    • mypy src/mcp_awareness/ passes
    • CI green (pytest 381/381, ruff, mypy, codecov)

🤖 Generated with Claude Code

@cmeans cmeans added the Ready for QA Dev work complete — QA can begin review label Mar 28, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 28, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cmeans cmeans added the merge-order: 1 Merge first in the current batch label Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

QA Review — PR #80: Change license from Apache 2.0 to AGPL v3

Checklist Verification

# Check Result
1 LICENSE contains AGPL v3 full text (661 lines, starts with "GNU AFFERO GENERAL PUBLIC LICENSE") ✅ 661 lines + trailing newline, correct AGPL v3 text, no leftover Apache 2.0 notice
2 pyproject.toml shows license = "AGPL-3.0-or-later"
3 README badge reads "AGPL-3.0" license-AGPL--3.0-blue
4 README license section mentions prior Apache 2.0 versions ✅ "Versions prior to v0.13.0 were released under the Apache License 2.0."
5 NOTICE file exists with license change documentation ✅ Copyright, rationale, prior license, registration reference
6 CONTRIBUTING.md exists with CLA requirement ✅ 3 CLA references, dual-licensing explained
7 All 14 src/mcp_awareness/*.py files have AGPL header ✅ All 14 confirmed
8 benchmarks/semantic_search_bench.py has AGPL header ✅ (after shebang line, correct for executable scripts)
9 ruff check src/ tests/ passes ✅ All checks passed
10 mypy src/mcp_awareness/ passes ✅ No issues in 14 source files
11 CI green (pytest, ruff, mypy) ✅ 381/381 passed, lint clean, typecheck clean

Observations (non-blocking)

  1. Test files, examples, alembic migrations, and seed_demo.py lack AGPL headers. The PR intentionally scoped headers to src/ and benchmarks/ — FSF recommends all source files, but this is a common pragmatic choice. Could be addressed in a follow-up if desired.

  2. NOTICE references v0.13.0 but pyproject.toml is still at 0.12.0. This is correct — the license change lands in the next release. Just confirming the version bump will happen at release time.

  3. CHANGELOG uses correct Keep a Changelog categories (Changed, Added) — no issues.

Verdict

Zero findings. All 11 checklist items pass. No code behavior changes to test functionally. License text is standard AGPL v3 with no modifications. Legal metadata is consistent across all files.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge and removed Ready for QA Dev work complete — QA can begin review labels Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Adding Ready for QA Signoff — all 11 checklist items verified, 381/381 tests pass, CI fully green including codecov/patch, zero findings. Removing Ready for QA.

cmeans added a commit that referenced this pull request Mar 28, 2026
Extends license headers to all copyrightable source files, not just
src/. Flagged by QA review of PR #80.

- tests/ (9 files): conftest, __init__, 7 test modules
- alembic/ (6 files): env.py + 5 migration scripts
- examples/ (2 files): simulate_edge.py, test_new_tools.py
- seed_demo.py

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@cmeans cmeans added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Added AGPL headers to 18 missed files (tests, alembic, examples, seed_demo.py). Flagged by QA. Resetting to Awaiting CI — previous QA signoff invalidated by new commit.

@cmeans cmeans added Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

CI green after adding headers to tests/alembic/examples/seed_demo. Ready for QA re-review.

@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

QA Finding — Blocker

Observation #1 upgraded to blocker: AGPL headers are missing from .py files outside src/mcp_awareness/ and benchmarks/. FSF best practice is to add license headers to all source files in the project.

Missing headers in:

  • tests/test_collator.py
  • tests/test_store.py
  • tests/conftest.py
  • seed_demo.py
  • examples/test_new_tools.py
  • examples/simulate_edge.py
  • alembic/env.py
  • alembic/versions/*.py (4 migration files)

Total: 10 files need AGPL headers added.

Removing Ready for QA Signoff, applying QA Failed. Will re-review once headers are added to all .py files.

@cmeans cmeans added the QA Failed QA found issues — needs dev attention label Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Removing Ready for QA Signoff, adding QA Failed — 10 .py files outside src/ and benchmarks/ are missing AGPL headers (blocker).

@cmeans cmeans removed the QA Failed QA found issues — needs dev attention label Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

QA Re-review — PR #80 (round 2)

Previous blocker resolved: AGPL headers now present on all 33 .py files project-wide (was 15, now includes tests/9, alembic/6, examples/2, seed_demo.py).

Re-verification

# Check Result
1 LICENSE — AGPL v3, 661 lines
2 pyproject.toml — AGPL-3.0-or-later
3 README badge — AGPL-3.0
4 README — prior Apache 2.0 note
5 NOTICE file
6 CONTRIBUTING.md with CLA
7 All 33 .py files have AGPL header ✅ (expanded from 15 — 0 missing)
8 ruff check
9 mypy
10 CI + codecov ✅ All green

Verdict

Zero findings. Previous blocker resolved. 381/381 tests pass. Ready for signoff.

@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Adding Ready for QA Signoff — re-review complete, previous blocker resolved (all 33 .py files now have AGPL headers), 381/381 tests pass, CI fully green. Removing Ready for QA.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge and removed Ready for QA Dev work complete — QA can begin review labels Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

Pointed out obvious problems...mostly 0.13.0 instead of what we agreed it should be: 0.14.0. Please scan all changes to make sure this typo doesn't make it through.

Comment thread NOTICE Outdated

License change notice
---------------------
Effective with version 0.13.0, this project is licensed under the
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Should be v0.14.0 per our chat.

Comment thread NOTICE Outdated
Effective with version 0.13.0, this project is licensed under the
GNU Affero General Public License v3 (AGPL-3.0-or-later).

All versions prior to 0.13.0 were released under the Apache License 2.0.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Same here.

Comment thread pyproject.toml
Comment thread README.md Outdated
Apache 2.0 — see [LICENSE](LICENSE) for details.
AGPL-3.0-or-later — see [LICENSE](LICENSE) for details.

Versions prior to v0.13.0 were released under the Apache License 2.0.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

v0.14.0

@cmeans cmeans added QA Failed QA found issues — needs dev attention and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Fixed: NOTICE and README now reference v0.14.0 (not v0.13.0). Re: pyproject.toml version — correct, stays at 0.12.0 per release process. Version bump happens in a separate release PR after feature PRs merge.

@cmeans cmeans added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA and removed QA Failed QA found issues — needs dev attention labels Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

QA Re-review — PR #80 (round 3)

Maintainer feedback addressed: all v0.13.0 references updated to v0.14.0.

Verification

# Check Result
1 LICENSE — AGPL v3, 661 lines
2 pyproject.toml — AGPL-3.0-or-later
3 README badge — AGPL-3.0
4 README — prior Apache 2.0 note, references v0.14.0
5 NOTICE — references v0.14.0 (2 occurrences)
6 CONTRIBUTING.md with CLA
7 All 33 .py files have AGPL header
8 Zero v0.13.0 references remaining in repo ✅ (grep confirms)
9 ruff check
10 mypy
11 CI + codecov ✅ All green, 381/381 tests

Verdict

Zero findings. Version references corrected. Ready for signoff.

@cmeans cmeans removed the Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA label Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

CI green. Ready for QA re-review — 5 additional files now have AGPL headers (workflow YAMLs, Dockerfile, alembic.ini).

Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

QA Re-review — PR #80 (round 4)

New commit adds AGPL headers to workflow files, Dockerfile, and alembic.ini.

Verification

# Check Result
1 LICENSE — AGPL v3, 661 lines
2 pyproject.toml — AGPL-3.0-or-later
3 README badge — AGPL-3.0
4 README — prior Apache 2.0, references v0.14.0
5 NOTICE — references v0.14.0
6 CONTRIBUTING.md with CLA
7 All 33 .py files have AGPL header
8 All 3 workflow .yml files have AGPL header
9 Dockerfile and alembic.ini have AGPL header
10 Zero v0.13.0 references
11 ruff check
12 mypy
13 CI + codecov ✅ 381/381, all green

Observation (non-blocking)

7 GitHub config .yml files lack headers: dependabot.yml, FUNDING.yml, 5 issue templates. These are declarative config/metadata — not copyrightable source with logic — so headers are typically unnecessary. The 3 workflow files that contain script logic all have headers.

Verdict

Zero findings. Headers now cover all source files across all file types. Ready for signoff.

@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Adding Ready for QA Signoff — round 4 complete, headers verified on all source files (.py, workflows, Dockerfile, alembic.ini), zero v0.13.0 references, 381/381 tests pass, CI green. Removing Ready for QA.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge and removed Ready for QA Dev work complete — QA can begin review labels Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

LGTM

@cmeans cmeans added QA Approved Manual QA testing completed and passed and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Mar 28, 2026
cmeans and others added 4 commits March 28, 2026 10:11
Protect against proprietary cloud hosting of the codebase while
preserving the dual-licensing path for future commercial license.
Chris Means is sole author and copyright holder (Case 1-15127131181).

- LICENSE: replaced with AGPL v3 full text
- pyproject.toml: license field updated
- README.md: badge and license section updated
- NOTICE: documents license change, prior license, rationale
- CONTRIBUTING.md: CLA requirement for future contributors
- All .py source files: AGPL header added per FSF recommendation
- benchmarks/semantic_search_bench.py: now tracked (with AGPL header)
- CHANGELOG.md: entries under [Unreleased]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extends license headers to all copyrightable source files, not just
src/. Flagged by QA review of PR #80.

- tests/ (9 files): conftest, __init__, 7 test modules
- alembic/ (6 files): env.py + 5 migration scripts
- examples/ (2 files): simulate_edge.py, test_new_tools.py
- seed_demo.py

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
We're skipping v0.13.0. Updated NOTICE and README to reference
v0.14.0 as the first AGPL release.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extends license headers to all remaining copyrightable files:
- .github/workflows/ci.yml, docker-publish.yml, qa-gate.yml
- Dockerfile
- alembic.ini

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA and removed QA Approved Manual QA testing completed and passed labels Mar 28, 2026
@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

CI green after rebase. Promoting manually — on-ci-pass can't resolve PR after force push (known workflow_run limitation). Ready for QA re-review.

@cmeans cmeans added Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Mar 28, 2026
Copy link
Copy Markdown
Owner Author

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

QA Re-review — PR #80 (round 5, post-rebase)

Fresh review after rebase onto main (which now includes PR #82 automation).

Verification

# Check Result
1 LICENSE — AGPL v3, 661 lines
2 pyproject.toml — AGPL-3.0-or-later
3 README badge — AGPL-3.0
4 README — v0.14.0 prior license note
5 NOTICE — v0.14.0 references (2x)
6 CONTRIBUTING.md with CLA (3 refs)
7 All 33 .py files — AGPL header
8 Workflow .yml files — AGPL header ✅ (3 in this PR + pr-labels.yml from main)
9 Dockerfile + alembic.ini — AGPL header
10 Zero v0.13.0 references
11 ruff check
12 mypy
13 CI + codecov ✅ 381/381, all green

Verdict

Zero findings. Post-rebase state is clean. Ready for signoff.

@cmeans
Copy link
Copy Markdown
Owner Author

cmeans commented Mar 28, 2026

Adding Ready for QA Signoff — round 5 post-rebase review complete, all 13 checks pass, zero findings, 381/381 tests, CI green. Removing Ready for QA.

@cmeans cmeans added the QA Active QA is actively reviewing; Dev should not push changes label Mar 28, 2026
@github-actions github-actions Bot removed the Ready for QA Dev work complete — QA can begin review label Mar 28, 2026
@cmeans cmeans added the Ready for QA Signoff QA passed — ready for maintainer final review and merge label Mar 28, 2026
@github-actions github-actions Bot removed the QA Active QA is actively reviewing; Dev should not push changes label Mar 28, 2026
@cmeans cmeans added QA Approved Manual QA testing completed and passed and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Mar 28, 2026
@cmeans cmeans merged commit 1a29c03 into main Mar 28, 2026
29 checks passed
@cmeans cmeans deleted the license/agpl-v3 branch March 28, 2026 15:25
@cmeans cmeans mentioned this pull request Mar 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-order: 2 Merge second — depends on merge-order: 1 QA Approved Manual QA testing completed and passed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant