Contributing

Development Setup

git clone https://github.com/styrene-lab/omegon.git
cd omegon
cd core && cargo build -p omegon
cargo test -p omegon

Branch Policy

Trunk-based development on main. No long-lived feature branches.

Conventional Commits

All commits must follow the Conventional Commits spec:

feat(tui): surface SegmentMeta as response header tag
fix(providers): handle rate-limit 429 with exponential backoff
chore(release): 0.15.2-rc.5
refactor(memory): extract semantic search into separate module
docs: update provider matrix in FAQ
test: add snapshot test for rounded borders

Testing Requirements

Release Workflow

Releases use the just task runner:

# Cut a release candidate (bump, test, commit, tag, build, sign)
just rc

# Sign with Apple Developer ID (YubiKey — optional)
just sign

# Publish: push to origin, trigger CI, build docs, link binary
just publish

# Cut a stable release (strip -rc.N suffix)
just release

What just publish Does

  1. Pre-flight: verifies clean working tree, binary exists, tag exists, version matches
  2. Pushes to origin with tags — triggers three CI workflows:
    • release.yml — builds binaries for 4 platforms, signs with cosign, creates GitHub Release
    • site.yml — rebuilds docs site, pushes container to GHCR, ArgoCD auto-deploys
  3. Builds docs site locally (verification)
  4. Links signed binary to /opt/homebrew/bin/omegon
  5. Runs post-publish smoke test

Crate Structure

CratePurpose
omegonBinary — TUI, agent loop, providers, tools, cleave orchestrator
omegon-gitGit operations — worktree management, merge, diff
omegon-memoryProject memory — facts, episodes, semantic search, knowledge graph
omegon-secretsCredential storage — keychain, encrypted file, Vault
omegon-traitsShared traits and types across crates
opsx-coreOpenSpec engine — spec parsing, verification, lifecycle

Feature Proposals

New features should start with a design tree node, not a PR. Use design_tree_update(create) to propose a new exploration, add research and open questions, and let the design converge before writing code. This prevents throwaway work and ensures architectural coherence.