Contributing to JevGuard
September 20, 2026 ยท View on GitHub
Thanks for contributing. JevGuard is designed to make coding-agent changes more trustworthy without pretending that incomplete evidence is safe to judge.
Before you start
Read:
README.mdfor product intent;- local
SPEC.mdfor scope and the normative contracts; AGENTS.mdfor architecture and code standards;- local
docs/adrfor decisions that should not be casually reversed.
SPEC.md, CONTEXT.md, docs/adr/, and docs/tasks/ are intentionally local
planning records and are ignored by Git. Do not add, force-add, or publish them.
Development setup
The project uses pnpm workspaces. Bun is the OpenCode plugin runtime, not the workspace package manager.
corepack enable
pnpm install
Run the workspace checks before opening a pull request:
pnpm format
pnpm lint
pnpm typecheck
pnpm test
pnpm check runs the same sequence in one command. The CLI (jevguard login) and
the OpenCode plugin run under the Bun runtime; Bun is not the workspace package
manager.
Contribution expectations
- Keep changes focused and preserve package dependency direction.
- Add or update tests for behavior changes and regressions.
- Do not use a global git diff as fallback evidence.
- Do not change
UNAVAILABLEinto a semantic verdict. - Do not add auto-remediation, blocking behavior, or agent-context injection to the observe-only slice.
- Do not expose API keys, environment files, secrets, or rejected evidence in tests, fixtures, logs, or documentation.
- Do not accept the TypeSafe API key as a CLI argument or repository setting. Local
credentials use
jevguard loginand the OS credential store; the environment override is reserved for CI and controlled automation.
Pull requests
Explain the problem, behavioral change, tests, and documentation updates. Mention
any intentional deviation from SPEC.md or an ADR.
Keep pull requests reviewable. If a change introduces a hard-to-reverse boundary, technology commitment, or non-obvious trade-off, propose an ADR with it.
Code style
Write small, readable TypeScript modules. Prefer strong types, explicit names, and
whitespace between logical steps over comments. TSDoc is for public contracts and
non-obvious invariants, not for narrating implementation. Centralize a feature's
interfaces, unions, and shared type aliases in a focused types.ts module; keep a
type beside implementation only when it is truly private and extraction would make
the module less readable.
License
By contributing, you agree that your contributions are licensed under the MIT License.