DevelopmentAll versions
On this page

Contributing to KetraTerm

Thanks for your interest in contributing to KetraTerm!

Contributing Workflow

Check existing issues and work before starting a substantial change. Discuss new capabilities or public API changes with the maintainers, then submit a focused pull request against the repository's default branch. Keep pull request branches free of merge commits.

For a bug fix, include a reproducer and a regression test that asserts the expected result. For an API change, describe the consumer workflow, ownership, threading, failure behavior, and compatibility impact. Avoid unrelated refactors.

Building & Running

Standalone Application (ketraterm-app)

Run these commands from the repository root:

./gradlew :ketraterm-app:run
./gradlew :ketraterm-app:test

IntelliJ Platform Plugin (ketraterm-intellij-plugin)

The plugin is a separate Gradle build with its own wrapper:

cd ketraterm-intellij-plugin
./gradlew runIde
./gradlew test

Its README describes IDE requirements and library integration. Root build commands do not run the plugin's checks.

Code Formatting

Run ./gradlew spotlessApply in the owning build before submitting Kotlin or Gradle changes. For plugin changes, run its wrapper from the plugin directory.

Verification

Start with the affected module's tests, then add checks for the boundaries you changed:

./gradlew :ketraterm-core:test
./gradlew :ketraterm-session:test
./gradlew :ketraterm-ui-swing:test
./gradlew test
./gradlew publicationChecks

Use exact byte-stream tests for parser-to-core behavior and explicit handshakes or controlled schedulers for concurrent behavior. Cover relevant malformed input, bounds, recovery, and chunking. Native PTY and external-oracle tests have separate requirements documented by their modules.

Public API changes need KDoc, an intentionally reviewed ABI baseline, and Java/Kotlin consumer verification. publicationChecks runs the release verification against a build-local Maven repository without publishing remotely. Update the canonical feature and gap maps when supported behavior or scope changes.

Rules for Commit Messages

Use a short imperative subject that identifies the change. Explain its reason and relevant tradeoffs in the body, and reference an issue when one exists. Describe the final implementation rather than the sequence of experiments.