Rules for working in this repository — for human contributors and AI coding agents alike. See CONTRIBUTING.md for the fuller setup and workflow guide.
- Never commit to
main. Create a branch (feat/…,fix/…,refactor/…,chore/…,docs/…,test/…) and open a pull request.mainis protected and requires green CI. - Conventional Commits, always. Commit messages and PR titles follow Conventional Commits — release-please derives the version and changelog from them.
- Green before you push. These must pass locally before opening a PR:
swift buildswift run CoreChecksscripts/dev/format.sh --check(runscripts/dev/format.shto auto-fix)
- Put testable logic in
SimpletonCore(UI-free) and add aTests/CoreCheckssuite for it, registered inTests/CoreChecks/main.swift. TheSimpletontarget is the AppKit/SwiftUI app. - Prefer registries/tables over scattered
switches (e.g.ProviderPreset). Adding a case should be one row, not edits across five files. - Expose env overrides for testability when it avoids touching real user data — e.g.
SIMPLETON_SUPPORT_DIR,SIMPLETON_SSH_CONFIG. - Never commit secrets. API keys live in the macOS Keychain. Redact hostnames, keys, and tokens from screenshots, issues, and logs.
- Don't hand-edit versions or
CHANGELOG.md. Releases are automated by release-please; pin a specific version with aRelease-As: x.y.zcommit footer when needed.
Sources/SimpletonCore/— pure, testable logic (models, stores, parsers). No AppKit.Sources/Simpleton/— the AppKit + SwiftUI application.Tests/CoreChecks/— the no-Xcode test runner overSimpletonCore.scripts/dev/,scripts/e2e/— dev-signing and app-bundle / UI-smoke helpers.
- Build & Test (required) —
swift build+swift run CoreCheckson macOS. - Format check (required) —
swift formatmust report no changes. - SwiftLint (advisory) — style guidance; does not block.
- Workflow lint (actionlint) — validates GitHub Actions YAML.
- PR title — must be a valid Conventional Commit.