problems99 0.1.1

GitHub issue conversation fetcher CLI
Documentation
# Contributing to 99problems

Thank you for taking the time to contribute! 🎉

## Ways to contribute

- **Bug reports** — open an issue describing what happened and what you expected
- **Feature requests** — open an issue with the `enhancement` label
- **Pull requests** — see the workflow below

## Development setup

```bash
# Prerequisites: Rust stable (1.85+), cargo
git clone https://github.com/mbe24/99problems
cd 99problems

# Install the pre-commit hook (runs cargo fmt + clippy before each commit)
cp .githooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit  # not needed on Windows

# Build
cargo build

# Run unit tests
cargo test

# Run integration tests (requires a GitHub token)
export GITHUB_TOKEN=ghp_your_token
cargo test -- --include-ignored
```

## Pull request workflow

1. Fork the repo and create a branch: `git checkout -b my-feature`
2. Make your changes and add tests where appropriate
3. Run `cargo test` — all tests must pass
4. Run `cargo clippy` and `cargo fmt --check` — no new warnings
5. Open a pull request with a clear description of what and why

## Project structure

```
src/
  main.rs          # CLI entry point (clap)
  config.rs        # Dotfile config loading
  model.rs         # Shared data types (Conversation, Comment)
  source/
    mod.rs         # Source trait + Query builder
    github_issues.rs  # GitHub Issues API client
  format/
    mod.rs         # Formatter trait
    json.rs        # JSON output
    yaml.rs        # YAML output
tests/
  integration.rs   # Live API tests (#[ignore] by default)
```

## Adding a new source

1. Create `src/source/my_source.rs` implementing the `Source` trait
2. Register it in `src/source/mod.rs`
3. Add a variant to `SourceKind` in `src/main.rs`

## Adding a new output format

1. Create `src/format/my_format.rs` implementing the `Formatter` trait
2. Register it in `src/format/mod.rs`
3. Add a variant to `OutputFormat` in `src/main.rs`

## Code of conduct

Be respectful and constructive. We follow the
[Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).