Skip to content

chore: OSS-polish — Apache 2.0, issue templates, oracle path, release workflow - #6

Merged
sunilp merged 2 commits into
mainfrom
chore/oss-polish
May 6, 2026
Merged

sunilp merged 2 commits into
mainfrom
chore/oss-polish

Conversation

@sunilp

@sunilp sunilp commented May 6, 2026 •

Copy link
Copy Markdown
Member

Summary

OSS-polish: license switch + inbound contribution scaffolding + oracle path fix + automated release pipeline. All in preparation for flipping the repo to public.

Changes

1. License: MIT → Apache 2.0

  • Aligns with jamjet-labs/jamjet (Rust runtime, Apache 2.0) and the agent-memory ecosystem — Mem0, Letta, Zep are all Apache 2.0.
  • Apache 2.0 includes an explicit patent grant from contributors, valued by enterprise adopters.
  • Repo was private during MIT period — no MIT-licensed copies are in the wild, so this is a clean switch.
  • LICENSE replaced with standard Apache 2.0 text (matches jamjet-labs/jamjet/LICENSE).
  • pyproject.toml license field + classifier updated; README badge + project meta line updated.

2. Inbound contribution scaffolding

  • .github/ISSUE_TEMPLATE/bug_report.md — env, version, repro steps, traceback
  • .github/ISSUE_TEMPLATE/feature_request.md — use case, proposed solution, alternatives
  • .github/pull_request_template.md — summary / why / what changed / test plan

3. Oracle path fix

benchmarks/smoke_runner.py:98 and benchmarks/longmemeval_v2.py:44 defaulted to a developer-machine-specific ../jamjet-research/... path. Replaced with ./longmemeval_oracle.json cwd-relative default. LONGMEMEVAL_ORACLE env var still wins.

4. Automated release pipeline (NEW)

.github/workflows/release.yml — triggered on v*.*.* tag push:

  • Tag-version sanity check — fails fast if pyproject.toml version doesn't match the tag (catches "tagged v0.1.1 but pyproject still says 0.1.0" mistakes).
  • Build wheel + sdist via uv build. Artifacts uploaded for 30 days.
  • Publish to PyPI via OIDC trusted publisher — no long-lived PYPI_TOKEN secret to manage or rotate. Uses pypa/gh-action-pypi-publish@release/v1.
  • Create GitHub Release with auto-generated notes from commit history + attached wheel and sdist. Pre-releases (e.g. v1.0.0-rc1) auto-marked.

One-time PyPI setup required after this merges, before tagging v0.1.0:

  1. Go to https://pypi.org/manage/account/publishing/
  2. Add a trusted publisher with: Owner jamjet-labs, Repository engram, Workflow release.yml, Environment pypi

Instructions are also in the workflow file header.

Plus

Test plan

  • All 276 unit tests pass
  • Ruff check + format clean
  • Mypy --strict clean
  • Both yaml workflows (ci.yml, release.yml) parse cleanly via yaml.safe_load
  • LICENSE diff verified vs jamjet-labs/jamjet/LICENSE — identical
  • Tag-version check logic verified locally (extracts 0.1.0 from pyproject correctly)

After merge

The release flow is:

  1. Flip repo visibility: gh repo edit jamjet-labs/engram --visibility public --accept-visibility-change-consequences
  2. Configure PyPI trusted publisher (one-time, instructions above)
  3. Tag and push: git tag -a v0.1.0 -m "Engram v0.1.0 — first GA release" && git push origin v0.1.0
  4. The release.yml workflow handles the rest — PyPI upload + GitHub Release creation, no manual twine upload needed.

Summary by CodeRabbit

  • Chores

    • Updated project license from MIT to Apache 2.0 (LICENSE, pyproject).
    • Added standardized GitHub issue templates (bug report, feature request) and a pull request template.
    • Added a Release GitHub Actions workflow to build and publish packages.
  • Bug Fixes

    • Improved benchmark oracle path handling with reliable local defaults.
  • Documentation

    • Updated CHANGELOG and README license references; added .gitignore rule for benchmark reports.

…acle path fix

Three small but consequential cleanups in preparation for flipping the
repo to public:

1. License: MIT to Apache 2.0
   - Aligns with jamjet-labs/jamjet (Rust runtime, Apache 2.0) and the
     agent-memory ecosystem (Mem0, Letta, Zep are all Apache 2.0).
   - Apache 2.0 includes an explicit patent grant from contributors,
     valued by enterprise adopters.
   - Repo was private during the MIT period — no MIT-licensed copies
     are in the wild, so this is a clean switch.
   - LICENSE file replaced with the standard Apache 2.0 text (matches
     the jamjet-labs/jamjet copy).
   - pyproject.toml: license metadata + classifier updated.
   - README badge + project meta updated.

2. Inbound contribution scaffolding
   - .github/ISSUE_TEMPLATE/bug_report.md
   - .github/ISSUE_TEMPLATE/feature_request.md
   - .github/pull_request_template.md
   Templates prompt for repro steps, environment, version — improves
   inbound issue quality and signals "we take contributions seriously".

3. Oracle path fix
   - benchmarks/smoke_runner.py and benchmarks/longmemeval_v2.py
     defaulted the oracle path to ../jamjet-research/... — a
     developer-machine-specific relative path that fails for everyone
     else.
   - Replaced with ./longmemeval_oracle.json default (cwd-relative).
     LONGMEMEVAL_ORACLE env var still wins; the new default is a
     sensible fail-fast location pointing at the LongMemEval repo.

Plus: gitignore *.md in benchmarks/reports/ alongside the existing
*.jsonl rule. Per-run artifacts shouldn't pollute git. uv.lock
regenerated to match the v0.1.0 version bump from PR #4.
@coderabbitai

coderabbitai Bot commented May 6, 2026 •

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: b2c8e4d3-2666-4b71-a007-562112ae2438

📥 Commits

Reviewing files that changed from the base of the PR and between 6c6270c and d9353ed.

📒 Files selected for processing (2)
  • .github/workflows/release.yml
  • CHANGELOG.md

📝 Walkthrough

Walkthrough

Updates project license from MIT to Apache-2.0, adds GitHub issue and pull-request templates plus a release workflow, adjusts .gitignore and CHANGELOG entries, and refactors benchmark oracle defaults to use a cwd-relative ./longmemeval_oracle.json with environment-variable precedence preserved.

Changes

License Update

Layer / File(s) Summary
License File
LICENSE
MIT License text replaced with Apache License 2.0 including full terms and appendix.
Project Metadata
pyproject.toml
license changed from MIT to Apache-2.0; classifier updated to Apache Software License.
Documentation
README.md, CHANGELOG.md
License badge/notice updated in README; Unreleased CHANGELOG documents license change.

GitHub Templates & Release Workflow

Layer / File(s) Summary
Issue & PR templates
.github/ISSUE_TEMPLATE/bug_report.md, .github/ISSUE_TEMPLATE/feature_request.md, .github/pull_request_template.md
New bug-report and feature-request issue templates and a PR template added with sections for reproducer, environment, proposal, test plan, and reviewer notes.
CI / Release Workflow
.github/workflows/release.yml
New "Release" GitHub Actions workflow to trigger on annotated tags, verify pyproject.toml version, build wheel/sdist, upload artifacts, publish to PyPI via OIDC, and create a GitHub Release with attached distributions.
Repository config
.gitignore, CHANGELOG.md
benchmarks/reports/*.md added to .gitignore; CHANGELOG notes templates and release-related entries.

Benchmark Oracle Path Refactoring

Layer / File(s) Summary
Default Constant / Env
benchmarks/smoke_runner.py
Introduces _ORACLE_ENV and _ORACLE_DEFAULT and initializes ORACLE from env LONGMEMEVAL_ORACLE with default ./longmemeval_oracle.json.
Consistent Default
benchmarks/longmemeval_v2.py
Replaces previous absolute-path fallback with ./longmemeval_oracle.json and clarifying comments; preserves env precedence.
Documentation
CHANGELOG.md
Documents benchmark defaults change from machine-specific paths to cwd-relative default while keeping LONGMEMEVAL_ORACLE precedence.

Sequence Diagram

sequenceDiagram
  participant Dev as Developer (git tag)
  participant GH as GitHub (push tag)
  participant Actions as GitHub Actions (Release workflow)
  participant Build as Build (wheel/sdist)
  participant PyPI as PyPI
  participant GHRel as GitHub Release

  Dev->>GH: push annotated tag vX.Y.Z
  GH->>Actions: trigger Release workflow
  Actions->>Build: verify tag vs pyproject.toml\nbuild wheel & sdist
  Build->>Actions: upload artifacts
  Actions->>PyPI: publish artifacts via OIDC
  Actions->>GHRel: create release, attach artifacts
  GHRel->>Developer: release created
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A hop, a patch, a tidy little trail,
License changed to wind in Apache sail,
Templates planted for issues and PRs,
Benchmarks now find their oracle near — not far,
Release wheels spin, ready to set sail.


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

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

@sunilp sunilp changed the title chore: OSS-polish — Apache 2.0 license, issue templates, oracle path fix chore: OSS-polish — Apache 2.0, issue templates, oracle path, release workflow May 6, 2026
@sunilp
sunilp merged commit 510cb70 into main May 6, 2026
3 of 4 checks passed
@sunilp
sunilp deleted the chore/oss-polish branch May 6, 2026 17:25
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.

1 participant