Kyn is a stateless Go CLI for enforcing related-file change policy in CI.
It answers questions like:
- If source changed, did tests/stories/specs change too?
- If a sidecar exists, should a CI flag be emitted?
- Are file-family rules enforced consistently across repos?
- Deterministic output suitable for CI parsing and diffing
- Stable exit codes (
0pass,1policy fail,2usage/config,3runtime) - Fast local and CI runs with no daemon, service, or plugin system
- Config-driven policy instead of brittle shell glue
go build -o ./bin/kyn ./cmd/kyn
./bin/kyn --help./bin/kyn check \
--cwd testdata/angular \
-c kyn.config.yaml \
-f libs/ui/button/button.component.ts,libs/ui/button/button.component.html# CI baseline
kyn check -c kyn.config.yaml --base origin/main --head HEAD -o json
# Auto git mode (default when no input mode is provided)
kyn check -c kyn.config.yaml -o json
# Explain per-rule diagnostics
kyn explain -c kyn.config.yaml --base origin/main --head HEAD
# Bootstrap starter config
kyn init --preset web-ui
# Migrate config v1 -> v2 safely
kyn config migrate -c kyn.config.yaml --from v1 --to v2textjsonsarifrdjsoncheckstyle
- Docs Site
- Docs Index
- Specification
- CI Guide
- Release Guide
- Presets
- Migration v1 -> v2
- Troubleshooting
- Changelog
Kyn intentionally stays focused:
- Stateless CLI only
- Deterministic behavior and stable contracts
- No daemon/watch mode, no plugin system, no PR API integrations
make hooks
make fmt
make lint
make test
make vet
make build