Thanks for your interest in contributing! This guide covers everything you need to set up your environment, make changes, and open a pull request.
This project follows the Contributor Covenant v2.1. Please read it before participating.
Use the
Bug Report template.
Include the logion --version output, your platform, and clear steps to
reproduce.
Use the Feature Request template. Significant changes (new commands, API changes, architectural shifts) should start as a Discussion or RFC before turning into a PR.
The public plans/, future-roadmap/, and protocol-specs/ directories are a generated,
contribution-friendly projection of the maintainers' canonical planning source.
You may open a normal public PR proposing a concrete edit. Maintainers review it
in public, port an accepted patch into the canonical source with attribution,
and regenerate the public files and manifest before merge. This keeps one
ordered source of truth without hiding product direction or excluding public
contributors.
Do not edit an automation sync branch directly. For an independent planning PR,
run python3 scripts/check_roadmap_mirror.py --update after editing so reviewers
can verify the proposed projection. Acceptance is not final until the canonical
sync reproduces the same content.
Files under protocol-specs/upstream/ are byte-for-byte, commit-pinned copies
of external normative specifications. Do not edit them as Logion prose. Propose
normative changes to the owning upstream project; propose a pin update here only
with the upstream diff, compatibility impact, licenses, and refreshed hashes.
Run python3 scripts/check_protocol_specs.py to verify snapshot integrity.
git clone https://github.com/nicolasmelo1/logion.git
cd logion
uv sync --all-packages --all-groups
make install-hooks
make testPrerequisites:
- Python 3.12+
- uv — package and workspace manager
- Node.js 18+ (only needed for the Prism mock server)
- Rust/Cargo (for
make factory-check; the first run builds the reviewedsfrevision)
make factory-check and CI use python3 scripts/sf.py, which installs the
commit pinned in that launcher under .local/software-factory/ without
replacing a global sf. It checks Cargo source provenance and the installed
binary's recorded SHA-256 before each invocation; an unrelated sf on PATH
is never used. A missing install needs network access; a damaged or unverifiable
install fails closed with its rebuild path. Do not remove rule documentation
to accommodate a different local tool version.
The Logion API contract is in contracts/openapi/v1.json. You can spin up a
mock server that serves realistic responses directly from it:
make mock # starts Prism on port 4010
make mock-stop # stops the mock serverSee docs/openapi-sync.md for details on how the contract is synced and why contributors should not edit it directly.
feat/<short-description>— new featuresfix/<short-description>— bug fixesdocs/<short-description>— documentationchore/<short-description>— maintenance, tooling, dependencies
This project uses Conventional Commits because the release automation (based on python-semantic-release) parses commit history to determine version bumps. Every commit message must follow the format:
type(scope)!: summary
Common types: feat, fix, docs, refactor, test, chore,
perf, ci, build.
The ! (breaking change marker) and (scope) are optional.
Examples:
feat(cli): add listings export command
fix(client): handle 404 in course lookups
docs: clarify mock-server setup in CONTRIBUTING
chore(deps): bump ruff to 0.5.0
Every commit must be signed off:
git commit -sThis adds a Signed-off-by: trailer that certifies you wrote or have the
right to submit the patch (Developer Certificate of Origin).
When you open a PR, the template will ask you to confirm:
make lintpassesmake testpasses- Any area-specific checks (e.g.
make typecheck) - Backwards compatibility (or a migration plan)
- PR title follows Conventional Commits
contracts/openapi/v1.json is generated by an internal service and synced
into this repo on merges to main. You will see PRs labeled
automation/sync-openapi — these are produced by CI.
Contributors cannot modify contracts/openapi/v1.json directly. If you
need a change to the API surface (new endpoint, changed schema, etc.), open a
Discussion to propose
it. The maintainers will evaluate and implement it upstream if accepted.
See docs/openapi-sync.md for details on how the contract is synced and how to work with the mock server.
Releases are automated via python-semantic-release. See the release workflow
documentation (planned: RELEASING.md) for details on how version bumps,
changelog generation, and package publishing work.
Questions? Open an issue or start a Discussion.