Skip to content

chore(license): switch Python SDK to Elastic 2.0 for §1.4a#12

Merged
Shaivpidadi merged 2 commits intodevfrom
feat/1.4a-elastic-license-scaffolding
Apr 24, 2026
Merged

chore(license): switch Python SDK to Elastic 2.0 for §1.4a#12
Shaivpidadi merged 2 commits intodevfrom
feat/1.4a-elastic-license-scaffolding

Conversation

@Shaivpidadi
Copy link
Copy Markdown
Member

Summary

Closes the remaining open acceptance criterion from TASKS.md §1.4a by switching the Python SDK license from MIT to Elastic License 2.0. All other §1.4a items (src/ layout, pyproject.toml name + 0.1.0-alpha.1 version, pytest + pytest-asyncio config, README quickstart, CI workflow, PyPI publish on tag, submodule registration in meta-repo) were already in place on dev.

TASKS.md §1.4a explicitly specifies Elastic-2.0, distinct from §0.2f which keeps the sister typescript-sdk on MIT. This PR brings the repo in line with that plan.

Changes

  • LICENSE — replaced MIT with canonical Elastic License 2.0 text
  • pyproject.tomllicense = { text = "Elastic-2.0" }, classifier flipped to "License :: Other/Proprietary License"
  • README.md — license badge + "License" section updated
  • docs/README.md, PROJECT_SPECS.md — license references updated; changelog entry added
  • src/governs_ai/**/*.pySPDX-License-Identifier flipped from MIT to Elastic-2.0 across all 27 source files (previously set by LIC-1.3)

GovernsAI Tracker issue

GOV-574 — [Pixel] 1.4a — Python SDK project scaffolding

Reviewers

Tagging Nexus (code quality) and Cipher (security/arch) — both approvals required. Cipher, please sanity-check the Elastic 2.0 text against the canonical version; the divergence from sister typescript-sdk (MIT) is intentional per TASKS.md.

Test plan

  • pip install -e . in a fresh python3 -m venv — succeeds, builds editable wheel governs-ai-sdk-0.1.0a1
  • import governs_ai plus all public symbols (GovernsAIClient, GovernsAIError, PrecheckError, PrecheckResult, BudgetResult, MemoryClient, MemoryResult) resolve
  • Subpackages governs_ai.clients, .models, .utils, .exceptions import cleanly
  • pytest tests/ — 36 passed, 2 integration tests deselected (no local services)
  • grep -r MIT across tree — only remaining hits are the historical changelog entries in PROJECT_SPECS.md, intentionally preserved
  • CI: black, flake8, mypy, pytest, gitleaks jobs green on this branch

Acceptance criterion in TASKS.md §1.4a specifies `license Elastic-2.0`
for the Python SDK, distinct from the sister typescript-sdk which stays
MIT per §0.2f. This commit aligns LICENSE, pyproject.toml metadata,
README/docs references, and all 27 src/ SPDX headers with that choice.

- LICENSE: replace MIT text with canonical Elastic License 2.0
- pyproject.toml: license -> "Elastic-2.0"; trove classifier -> "Other/Proprietary"
- README.md: badge + license section updated to Elastic 2.0
- docs/README.md + PROJECT_SPECS.md: license references updated
- src/governs_ai/**/*.py: SPDX-License-Identifier MIT -> Elastic-2.0 (27 files)

Verified:
- pip install -e . in clean venv succeeds (governs-ai-sdk-0.1.0a1)
- import governs_ai and all public symbols/subpackages resolve
- pytest tests/ passes (36 passed, 2 integration deselected)

Refs: GOV-574 (1.4a — Python SDK project scaffolding)
ADR-001 mandates GitHub native secret scanning only — gitleaks and other
third-party scanners are explicitly disallowed. Drops the `secret-scan`
job entirely; no substitute scanner is added.

Native coverage is already in place on governs-ai/python-sdk:
- secret_scanning: enabled
- secret_scanning_push_protection: enabled
(verified via `gh api repos/Governs-AI/python-sdk --jq '.security_and_analysis'`)

Refs: GOV-574, PR #12, ADR-001
@Shaivpidadi Shaivpidadi merged commit 78f52d0 into dev Apr 24, 2026
4 checks passed
@Shaivpidadi Shaivpidadi deleted the feat/1.4a-elastic-license-scaffolding branch April 24, 2026 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant