Thanks for contributing. This project is still early, so the main goal is to keep changes small, testable, and aligned with the current product contract in SPEC.md.
- Read
SPEC.mdbefore changing behavior or CLI surfaces. - Open an issue first for larger changes, new commands, or scope changes.
- Keep secrets and real Slack workspace data out of git, screenshots, fixtures, and examples.
Requirements:
- Go
1.25+ - SQLite with FTS5 support
Build and test:
go test ./...
go build ./cmd/slacrawlRun the CLI locally:
go run ./cmd/slacrawl --help- Create a dedicated worktree and branch with
gwt new <branch>. - Keep the branch focused on one change or one small related set of changes.
- Update docs when behavior, flags, config, or scope changes.
- Run tests before opening a pull request.
- Re-read your diff for accidental secret exposure, noisy refactors, or unrelated edits.
- Use
ghfor pull request operations. - Prefer opening draft PRs first.
- Link related issues with
Fixes: <issue>when applicable. - Explain the user-visible behavior change and any important tradeoffs.
- Add or update tests for behavior changes and regressions.
- Keep PRs reviewable. Smaller is better.
- Prefer Go stdlib and small, stable dependencies.
- Use explicit structs and straightforward control flow.
- Preserve the local-first model. Do not introduce remote storage requirements for core usage.
- Surface partial-coverage states explicitly in
doctor,status, or command output instead of hiding them. - Add comments only when the reason for Slack-specific behavior is not obvious from the code.
- Keep
README.md,SPEC.md, and examples in sync with the implementation. - Do not document features as supported until they are actually implemented.
- When changing config keys or defaults, update
config.example.toml.
- Run
go test ./...before opening a PR. - Add targeted tests when changing parsing, normalization, config loading, store behavior, or CLI output.
- If a known failing test blocks your branch, call that out clearly in the PR description.
When filing an issue, include:
- what you ran
- what you expected
- what happened instead
- relevant config snippets with secrets removed
- platform details such as OS, Go version, and whether Slack Desktop discovery was involved